From 45355f6c42849699ec72cc377ccebcc258b8990c Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Mon, 22 Apr 2024 14:22:36 +0200 Subject: [PATCH] Refactor publication parser location. --- backend/codiki-application/pom.xml | 4 ++ .../publication/ParserService.java | 4 +- .../publication/PublicationUseCases.java | 39 ++++++++++++++----- .../publication/PublicationJpaAdapter.java | 25 +----------- backend/pom.xml | 7 ++++ 5 files changed, 44 insertions(+), 35 deletions(-) rename backend/{codiki-infrastructure/src/main/java/org/codiki/infrastructure => codiki-application/src/main/java/org/codiki/application}/publication/ParserService.java (97%) diff --git a/backend/codiki-application/pom.xml b/backend/codiki-application/pom.xml index 0fbaf05..6a60fb7 100644 --- a/backend/codiki-application/pom.xml +++ b/backend/codiki-application/pom.xml @@ -33,6 +33,10 @@ com.auth0 java-jwt + + org.apache.commons + commons-text + org.junit.jupiter junit-jupiter-api diff --git a/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/ParserService.java b/backend/codiki-application/src/main/java/org/codiki/application/publication/ParserService.java similarity index 97% rename from backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/ParserService.java rename to backend/codiki-application/src/main/java/org/codiki/application/publication/ParserService.java index 507e07b..bb67410 100755 --- a/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/ParserService.java +++ b/backend/codiki-application/src/main/java/org/codiki/application/publication/ParserService.java @@ -1,11 +1,11 @@ -package org.codiki.infrastructure.publication; +package org.codiki.application.publication; import org.springframework.stereotype.Service; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; +import static org.apache.commons.text.StringEscapeUtils.escapeHtml4; @Service public class ParserService { diff --git a/backend/codiki-application/src/main/java/org/codiki/application/publication/PublicationUseCases.java b/backend/codiki-application/src/main/java/org/codiki/application/publication/PublicationUseCases.java index 22a8ec0..e11eb79 100644 --- a/backend/codiki-application/src/main/java/org/codiki/application/publication/PublicationUseCases.java +++ b/backend/codiki-application/src/main/java/org/codiki/application/publication/PublicationUseCases.java @@ -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.PublicationBuilder.aPublication; +import static org.springframework.util.ObjectUtils.isEmpty; + import org.codiki.application.category.CategoryUseCases; import org.codiki.application.picture.PictureUseCases; import org.codiki.application.user.UserUseCases; @@ -31,6 +33,7 @@ public class PublicationUseCases { private final CategoryUseCases categoryUseCases; private final Clock clock; private final KeyGenerator keyGenerator; + private final ParserService parserService; private final PictureUseCases pictureUseCases; private final PublicationCreationRequestValidator publicationCreationRequestValidator; private final PublicationPort publicationPort; @@ -39,19 +42,21 @@ public class PublicationUseCases { private final UserUseCases userUseCases; public PublicationUseCases( - CategoryUseCases categoryUseCases, - Clock clock, - KeyGenerator keyGenerator, - PictureUseCases pictureUseCases, - PublicationCreationRequestValidator publicationCreationRequestValidator, - PublicationPort publicationPort, - PublicationSearchCriteriaFactory publicationSearchCriteriaFactory, - PublicationUpdateRequestValidator publicationUpdateRequestValidator, - UserUseCases userUseCases + CategoryUseCases categoryUseCases, + Clock clock, + KeyGenerator keyGenerator, + ParserService parserService, + PictureUseCases pictureUseCases, + PublicationCreationRequestValidator publicationCreationRequestValidator, + PublicationPort publicationPort, + PublicationSearchCriteriaFactory publicationSearchCriteriaFactory, + PublicationUpdateRequestValidator publicationUpdateRequestValidator, + UserUseCases userUseCases ) { this.categoryUseCases = categoryUseCases; this.clock = clock; this.keyGenerator = keyGenerator; + this.parserService = parserService; this.publicationCreationRequestValidator = publicationCreationRequestValidator; this.publicationPort = publicationPort; this.publicationUpdateRequestValidator = publicationUpdateRequestValidator; @@ -83,6 +88,7 @@ public class PublicationUseCases { .withKey(keyGenerator.generateKey()) .withTitle(request.title()) .withText(request.text()) + .withParsedText(parserService.parse(request.text())) .withDescription(request.description()) .withCreationDate(ZonedDateTime.now(clock)) .withIllustrationId(request.illustrationId()) @@ -116,6 +122,7 @@ public class PublicationUseCases { if (!isNull(request.text())) { publicationBuilder.withText(request.text()); + publicationBuilder.withParsedText(parserService.parse(request.text())); } if (!isNull(request.description())) { @@ -163,7 +170,19 @@ public class PublicationUseCases { } public Optional 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 searchPublications(String searchQuery) { diff --git a/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/PublicationJpaAdapter.java b/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/PublicationJpaAdapter.java index fec58b8..8480ff8 100644 --- a/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/PublicationJpaAdapter.java +++ b/backend/codiki-infrastructure/src/main/java/org/codiki/infrastructure/publication/PublicationJpaAdapter.java @@ -14,23 +14,18 @@ import java.util.UUID; import static java.util.Collections.reverseOrder; import static java.util.Comparator.comparingInt; -import static org.codiki.domain.publication.model.builder.PublicationBuilder.aPublication; -import static org.springframework.util.ObjectUtils.isEmpty; @Component public class PublicationJpaAdapter implements PublicationPort { private final PublicationRepository repository; private final PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter; - private final ParserService parserService; public PublicationJpaAdapter( PublicationRepository repository, - PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter, - ParserService parserService + PublicationSearchCriteriaJpaAdapter publicationSearchCriteriaJpaAdapter ) { this.repository = repository; this.publicationSearchCriteriaJpaAdapter = publicationSearchCriteriaJpaAdapter; - this.parserService = parserService; } @Override @@ -41,24 +36,8 @@ public class PublicationJpaAdapter implements PublicationPort { @Override public Optional findById(UUID publicationId) { - Optional result = repository.findById(publicationId) + return repository.findById(publicationId) .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 diff --git a/backend/pom.xml b/backend/pom.xml index 2c4aeda..494d2b6 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -19,6 +19,7 @@ 4.4.0 42.7.0 2.9.0 + 1.12.0 @@ -78,6 +79,12 @@ tika-core ${tika-core.version} + + org.apache.commons + commons-text + ${commons-text.version} + +