Add endpoint to retrieve latest publications.
This commit is contained in:
@@ -3,6 +3,7 @@ package org.codiki.application.publication;
|
|||||||
import static java.util.Objects.isNull;
|
import static java.util.Objects.isNull;
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -190,4 +191,8 @@ public class PublicationUseCases {
|
|||||||
|
|
||||||
return publicationPort.search(criteria);
|
return publicationPort.search(criteria);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Publication> getLatest() {
|
||||||
|
return publicationPort.getLatest();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,6 @@ public interface PublicationPort {
|
|||||||
void delete(Publication publication);
|
void delete(Publication publication);
|
||||||
|
|
||||||
List<Publication> search(List<PublicationSearchCriterion> criteria);
|
List<Publication> search(List<PublicationSearchCriterion> criteria);
|
||||||
|
|
||||||
|
List<Publication> getLatest();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public class SecurityConfiguration {
|
|||||||
"/api/pictures/{pictureId}",
|
"/api/pictures/{pictureId}",
|
||||||
"/api/publications/{publicationId}",
|
"/api/publications/{publicationId}",
|
||||||
"/api/publications",
|
"/api/publications",
|
||||||
|
"/api/publications/latest",
|
||||||
"/error"
|
"/error"
|
||||||
).permitAll()
|
).permitAll()
|
||||||
.requestMatchers(
|
.requestMatchers(
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class PublicationController {
|
|||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public List<PublicationDto> searchPublications(@RequestParam("query") String searchQuery) {
|
public List<PublicationDto> searchPublications(@RequestParam("query") String searchQuery) {
|
||||||
final List<PublicationDto> publications = publicationUseCases.searchPublications(searchQuery)
|
List<PublicationDto> publications = publicationUseCases.searchPublications(searchQuery)
|
||||||
.stream()
|
.stream()
|
||||||
.map(PublicationDto::new)
|
.map(PublicationDto::new)
|
||||||
.toList();
|
.toList();
|
||||||
@@ -77,4 +77,18 @@ public class PublicationController {
|
|||||||
|
|
||||||
return publications;
|
return publications;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/latest")
|
||||||
|
public List<PublicationDto> getLatestPublications() {
|
||||||
|
List<PublicationDto> publications = publicationUseCases.getLatest()
|
||||||
|
.stream()
|
||||||
|
.map(PublicationDto::new)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
if (isEmpty(publications)) {
|
||||||
|
throw new NoPublicationSearchResultException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return publications;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.codiki.domain.publication.port.PublicationPort;
|
|||||||
import org.codiki.infrastructure.publication.model.PublicationEntity;
|
import org.codiki.infrastructure.publication.model.PublicationEntity;
|
||||||
import org.codiki.infrastructure.publication.model.PublicationSearchResult;
|
import org.codiki.infrastructure.publication.model.PublicationSearchResult;
|
||||||
import org.codiki.infrastructure.publication.repository.PublicationRepository;
|
import org.codiki.infrastructure.publication.repository.PublicationRepository;
|
||||||
|
import org.springframework.data.domain.Limit;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -56,4 +57,12 @@ public class PublicationJpaAdapter implements PublicationPort {
|
|||||||
.map(PublicationSearchResult::getPublication)
|
.map(PublicationSearchResult::getPublication)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Publication> getLatest() {
|
||||||
|
return repository.getLatest(Limit.of(10))
|
||||||
|
.stream()
|
||||||
|
.map(PublicationEntity::toDomain)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package org.codiki.infrastructure.publication.repository;
|
package org.codiki.infrastructure.publication.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.codiki.infrastructure.publication.model.PublicationEntity;
|
import org.codiki.infrastructure.publication.model.PublicationEntity;
|
||||||
|
import org.springframework.data.domain.Limit;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
@@ -16,4 +18,12 @@ public interface PublicationRepository extends JpaRepository<PublicationEntity,
|
|||||||
WHERE p.id = :publicationId
|
WHERE p.id = :publicationId
|
||||||
""")
|
""")
|
||||||
Optional<PublicationEntity> findById(@Param("publicationId") UUID publicationId);
|
Optional<PublicationEntity> findById(@Param("publicationId") UUID publicationId);
|
||||||
|
|
||||||
|
@Query("""
|
||||||
|
SELECT p
|
||||||
|
FROM PublicationEntity p
|
||||||
|
JOIN FETCH p.author a
|
||||||
|
ORDER BY p.creationDate DESC
|
||||||
|
""")
|
||||||
|
List<PublicationEntity> getLatest(Limit limit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
meta {
|
||||||
|
name: Get latest
|
||||||
|
type: http
|
||||||
|
seq: 6
|
||||||
|
}
|
||||||
|
|
||||||
|
get {
|
||||||
|
url: {{url}}/api/publications/latest
|
||||||
|
body: none
|
||||||
|
auth: none
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user