Refactor publication parser location.

This commit is contained in:
Florian THIERRY
2024-04-22 14:22:36 +02:00
parent db492b6316
commit 45355f6c42
5 changed files with 44 additions and 35 deletions

View File

@@ -33,6 +33,10 @@
<groupId>com.auth0</groupId> <groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId> <artifactId>java-jwt</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-api</artifactId>

View File

@@ -1,11 +1,11 @@
package org.codiki.infrastructure.publication; package org.codiki.application.publication;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; import static org.apache.commons.text.StringEscapeUtils.escapeHtml4;
@Service @Service
public class ParserService { public class ParserService {

View File

@@ -9,6 +9,8 @@ import java.util.UUID;
import static org.codiki.domain.publication.model.builder.AuthorBuilder.anAuthor; import static org.codiki.domain.publication.model.builder.AuthorBuilder.anAuthor;
import static org.codiki.domain.publication.model.builder.PublicationBuilder.aPublication; import static org.codiki.domain.publication.model.builder.PublicationBuilder.aPublication;
import static org.springframework.util.ObjectUtils.isEmpty;
import org.codiki.application.category.CategoryUseCases; import org.codiki.application.category.CategoryUseCases;
import org.codiki.application.picture.PictureUseCases; import org.codiki.application.picture.PictureUseCases;
import org.codiki.application.user.UserUseCases; import org.codiki.application.user.UserUseCases;
@@ -31,6 +33,7 @@ public class PublicationUseCases {
private final CategoryUseCases categoryUseCases; private final CategoryUseCases categoryUseCases;
private final Clock clock; private final Clock clock;
private final KeyGenerator keyGenerator; private final KeyGenerator keyGenerator;
private final ParserService parserService;
private final PictureUseCases pictureUseCases; private final PictureUseCases pictureUseCases;
private final PublicationCreationRequestValidator publicationCreationRequestValidator; private final PublicationCreationRequestValidator publicationCreationRequestValidator;
private final PublicationPort publicationPort; private final PublicationPort publicationPort;
@@ -39,19 +42,21 @@ public class PublicationUseCases {
private final UserUseCases userUseCases; private final UserUseCases userUseCases;
public PublicationUseCases( public PublicationUseCases(
CategoryUseCases categoryUseCases, CategoryUseCases categoryUseCases,
Clock clock, Clock clock,
KeyGenerator keyGenerator, KeyGenerator keyGenerator,
PictureUseCases pictureUseCases, ParserService parserService,
PublicationCreationRequestValidator publicationCreationRequestValidator, PictureUseCases pictureUseCases,
PublicationPort publicationPort, PublicationCreationRequestValidator publicationCreationRequestValidator,
PublicationSearchCriteriaFactory publicationSearchCriteriaFactory, PublicationPort publicationPort,
PublicationUpdateRequestValidator publicationUpdateRequestValidator, PublicationSearchCriteriaFactory publicationSearchCriteriaFactory,
UserUseCases userUseCases PublicationUpdateRequestValidator publicationUpdateRequestValidator,
UserUseCases userUseCases
) { ) {
this.categoryUseCases = categoryUseCases; this.categoryUseCases = categoryUseCases;
this.clock = clock; this.clock = clock;
this.keyGenerator = keyGenerator; this.keyGenerator = keyGenerator;
this.parserService = parserService;
this.publicationCreationRequestValidator = publicationCreationRequestValidator; this.publicationCreationRequestValidator = publicationCreationRequestValidator;
this.publicationPort = publicationPort; this.publicationPort = publicationPort;
this.publicationUpdateRequestValidator = publicationUpdateRequestValidator; this.publicationUpdateRequestValidator = publicationUpdateRequestValidator;
@@ -83,6 +88,7 @@ public class PublicationUseCases {
.withKey(keyGenerator.generateKey()) .withKey(keyGenerator.generateKey())
.withTitle(request.title()) .withTitle(request.title())
.withText(request.text()) .withText(request.text())
.withParsedText(parserService.parse(request.text()))
.withDescription(request.description()) .withDescription(request.description())
.withCreationDate(ZonedDateTime.now(clock)) .withCreationDate(ZonedDateTime.now(clock))
.withIllustrationId(request.illustrationId()) .withIllustrationId(request.illustrationId())
@@ -116,6 +122,7 @@ public class PublicationUseCases {
if (!isNull(request.text())) { if (!isNull(request.text())) {
publicationBuilder.withText(request.text()); publicationBuilder.withText(request.text());
publicationBuilder.withParsedText(parserService.parse(request.text()));
} }
if (!isNull(request.description())) { if (!isNull(request.description())) {
@@ -163,7 +170,19 @@ public class PublicationUseCases {
} }
public Optional<Publication> findById(UUID publicationId) { public Optional<Publication> findById(UUID publicationId) {
return publicationPort.findById(publicationId); return publicationPort.findById(publicationId)
.map(publication -> {
Publication result = publication;
if (isEmpty(publication.parsedText())) {
Publication editedPublication = aPublication()
.basedOn(publication)
.withParsedText(parserService.parse(publication.text()))
.build();
publicationPort.save(editedPublication);
result = editedPublication;
}
return result;
});
} }
public List<Publication> searchPublications(String searchQuery) { public List<Publication> searchPublications(String searchQuery) {

View File

@@ -14,23 +14,18 @@ import java.util.UUID;
import static java.util.Collections.reverseOrder; import static java.util.Collections.reverseOrder;
import static java.util.Comparator.comparingInt; import static java.util.Comparator.comparingInt;
import static org.codiki.domain.publication.model.builder.PublicationBuilder.aPublication;
import static org.springframework.util.ObjectUtils.isEmpty;
@Component @Component
public class PublicationJpaAdapter implements PublicationPort { public class PublicationJpaAdapter implements PublicationPort {
private final PublicationRepository repository; private final PublicationRepository repository;
private final PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter; private final PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter;
private final ParserService parserService;
public PublicationJpaAdapter( public PublicationJpaAdapter(
PublicationRepository repository, PublicationRepository repository,
PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter, PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter
ParserService parserService
) { ) {
this.repository = repository; this.repository = repository;
this.publicationSearchCriteriaJpaAdapter = publicationSearchCriteriaJpaAdapter; this.publicationSearchCriteriaJpaAdapter = publicationSearchCriteriaJpaAdapter;
this.parserService = parserService;
} }
@Override @Override
@@ -41,24 +36,8 @@ public class PublicationJpaAdapter implements PublicationPort {
@Override @Override
public Optional<Publication> findById(UUID publicationId) { public Optional<Publication> findById(UUID publicationId) {
Optional<Publication> result = repository.findById(publicationId) return repository.findById(publicationId)
.map(PublicationEntity::toDomain); .map(PublicationEntity::toDomain);
if (result.isPresent()) {
Publication publication = result.get();
if (isEmpty(publication.parsedText())) {
Publication editedPublication = aPublication()
.basedOn(publication)
.withParsedText(parserService.parse(publication.text()))
.build();
PublicationEntity editedPublicationEntity = new PublicationEntity(editedPublication);
repository.save(editedPublicationEntity);
result = Optional.of(editedPublication);
}
}
return result;
} }
@Override @Override

View File

@@ -19,6 +19,7 @@
<java-jwt.version>4.4.0</java-jwt.version> <java-jwt.version>4.4.0</java-jwt.version>
<postgresql.version>42.7.0</postgresql.version> <postgresql.version>42.7.0</postgresql.version>
<tika-core.version>2.9.0</tika-core.version> <tika-core.version>2.9.0</tika-core.version>
<commons-text.version>1.12.0</commons-text.version>
</properties> </properties>
<modules> <modules>
@@ -78,6 +79,12 @@
<artifactId>tika-core</artifactId> <artifactId>tika-core</artifactId>
<version>${tika-core.version}</version> <version>${tika-core.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>