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}
+
+