Implementation of publication deletion.
This commit is contained in:
@@ -123,4 +123,18 @@ public class PublicationUseCases {
|
||||
|
||||
return updatedPublication;
|
||||
}
|
||||
|
||||
public void deletePublication(UUID publicationId) {
|
||||
Publication publicationToDelete = publicationPort.findById(publicationId)
|
||||
.orElseThrow(() -> new PublicationNotFoundException(publicationId));
|
||||
|
||||
User authenticatedUser = userUseCases.getAuthenticatedUser()
|
||||
.orElseThrow(AuthenticationRequiredException::new);
|
||||
|
||||
if (!publicationToDelete.author().id().equals(authenticatedUser.id())) {
|
||||
throw new PublicationUpdateForbiddenException();
|
||||
}
|
||||
|
||||
publicationPort.delete(publicationToDelete);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,4 +9,6 @@ public interface PublicationPort {
|
||||
void save(Publication publication);
|
||||
|
||||
Optional<Publication> findById(UUID publicationId);
|
||||
|
||||
void delete(Publication publication);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.codiki.application.publication.PublicationUseCases;
|
||||
import org.codiki.domain.publication.model.Publication;
|
||||
import org.codiki.domain.publication.model.PublicationEditionRequest;
|
||||
import org.codiki.exposition.publication.model.PublicationEditionRequestDto;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
@@ -38,4 +39,9 @@ public class PublicationController {
|
||||
Publication updatedPublication = publicationUseCases.updatePublication(publicationId, request);
|
||||
return new PublicationDto(updatedPublication);
|
||||
}
|
||||
|
||||
@DeleteMapping("/{publicationId}")
|
||||
public void deletePublication(@PathVariable("publicationId") UUID publicationId) {
|
||||
publicationUseCases.deletePublication(publicationId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,4 +28,9 @@ public class PublicationJpaAdapter implements PublicationPort {
|
||||
return repository.findById(publicationId)
|
||||
.map(PublicationEntity::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Publication publication) {
|
||||
repository.deleteById(publication.id());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package org.codiki.infrastructure.publication.repository;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codiki.infrastructure.publication.model.PublicationEntity;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
public interface PublicationRepository extends JpaRepository<PublicationEntity, UUID> {
|
||||
@Query("SELECT p FROM PublicationEntity p JOIN FETCH p.author a JOIN FETCH p.category C WHERE p.id = :publicationId")
|
||||
Optional<PublicationEntity> findById(@Param("publicationId") UUID publicationId);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
vars {
|
||||
url: http://localhost:8080
|
||||
publicationId: 31301854-e7c2-4c92-8d91-e9e146a9048f
|
||||
bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTAyMzg3Mzh9.4OLDr87maWETWjjsue0rZp8A1r01Z2TE30RPJ3GwnyTybwWFDruV1h32kUrDwFRuA-tbUUHv_YnzDyy75sft3A
|
||||
publicationId: f3a6486c-02f0-4db7-a2e1-1563bc994e7f
|
||||
bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTAyMzkzMDR9.2S0ar_3Z2lM-nwgVwiydwycu2XXoHWudZgqaiyEVC6T8IWnb3upTIC3HshyTtHJ0bLetQ7XXqRftPFLTNKgOrw
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user