diff --git a/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/LinkedCrewDocumentResponse.java b/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/LinkedCrewDocumentResponse.java new file mode 100644 index 0000000..23d7425 --- /dev/null +++ b/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/LinkedCrewDocumentResponse.java @@ -0,0 +1,17 @@ +package com.wooteco.wiki.organizationdocument.dto.response; + +import com.wooteco.wiki.document.domain.CrewDocument; +import java.util.UUID; + +public record LinkedCrewDocumentResponse( + UUID documentUuid, + String title +) { + + public LinkedCrewDocumentResponse(CrewDocument crewDocument) { + this( + crewDocument.getUuid(), + crewDocument.getTitle() + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/OrganizationDocumentAndEventResponse.java b/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/OrganizationDocumentAndEventResponse.java index eddb117..faf79ff 100644 --- a/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/OrganizationDocumentAndEventResponse.java +++ b/src/main/java/com/wooteco/wiki/organizationdocument/dto/response/OrganizationDocumentAndEventResponse.java @@ -14,13 +14,15 @@ public record OrganizationDocumentAndEventResponse( String contents, String writer, LocalDateTime generateTime, - List organizationEventResponses + List organizationEventResponses, + List linkedCrewDocuments ) { public OrganizationDocumentAndEventResponse( OrganizationDocument organizationDocument, - List organizationEventResponses + List organizationEventResponses, + List linkedCrewDocuments ) { - this(organizationDocument.getId(), organizationDocument.getUuid(), organizationDocument.getTitle(), organizationDocument.getContents(), organizationDocument.getWriter(), organizationDocument.getGenerateTime(), organizationEventResponses); + this(organizationDocument.getId(), organizationDocument.getUuid(), organizationDocument.getTitle(), organizationDocument.getContents(), organizationDocument.getWriter(), organizationDocument.getGenerateTime(), organizationEventResponses, linkedCrewDocuments); } } diff --git a/src/main/java/com/wooteco/wiki/organizationdocument/repository/DocumentOrganizationLinkRepository.java b/src/main/java/com/wooteco/wiki/organizationdocument/repository/DocumentOrganizationLinkRepository.java index 5d6b498..9b4f16f 100644 --- a/src/main/java/com/wooteco/wiki/organizationdocument/repository/DocumentOrganizationLinkRepository.java +++ b/src/main/java/com/wooteco/wiki/organizationdocument/repository/DocumentOrganizationLinkRepository.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface DocumentOrganizationLinkRepository extends JpaRepository { @@ -19,5 +21,11 @@ void deleteByCrewDocumentAndOrganizationDocument(CrewDocument crewDocument, List findAllByCrewDocument(CrewDocument crewDocument); + @Query("SELECT documentOrganizationLink FROM DocumentOrganizationLink documentOrganizationLink " + + "JOIN FETCH documentOrganizationLink.crewDocument " + + "WHERE documentOrganizationLink.organizationDocument = :organizationDocument") + List findAllByOrganizationDocumentWithCrewDocument( + @Param("organizationDocument") OrganizationDocument organizationDocument); + void deleteAllByCrewDocument(CrewDocument crewDocument); } diff --git a/src/main/java/com/wooteco/wiki/organizationdocument/service/OrganizationDocumentService.java b/src/main/java/com/wooteco/wiki/organizationdocument/service/OrganizationDocumentService.java index 7075111..05f47cb 100644 --- a/src/main/java/com/wooteco/wiki/organizationdocument/service/OrganizationDocumentService.java +++ b/src/main/java/com/wooteco/wiki/organizationdocument/service/OrganizationDocumentService.java @@ -12,8 +12,10 @@ import com.wooteco.wiki.organizationdocument.dto.request.OrganizationDocumentCreateRequest; import com.wooteco.wiki.organizationdocument.dto.request.OrganizationDocumentLinkRequest; import com.wooteco.wiki.organizationdocument.dto.request.OrganizationDocumentUpdateRequest; +import com.wooteco.wiki.organizationdocument.dto.response.LinkedCrewDocumentResponse; import com.wooteco.wiki.organizationdocument.dto.response.OrganizationDocumentAndEventResponse; import com.wooteco.wiki.organizationdocument.dto.response.OrganizationDocumentResponse; +import com.wooteco.wiki.organizationdocument.repository.DocumentOrganizationLinkRepository; import com.wooteco.wiki.organizationdocument.repository.OrganizationDocumentRepository; import com.wooteco.wiki.organizationevent.dto.response.OrganizationEventResponse; import com.wooteco.wiki.organizationevent.repository.OrganizationEventRepository; @@ -33,6 +35,7 @@ public class OrganizationDocumentService { private final OrganizationEventRepository organizationEventRepository; private final DocumentRepository documentRepository; private final DocumentOrganizationLinkService documentOrganizationLinkService; + private final DocumentOrganizationLinkRepository documentOrganizationLinkRepository; private final CrewDocumentRepository crewDocumentRepository; private final HistoryService historyService; @@ -80,7 +83,12 @@ public OrganizationDocumentAndEventResponse findByUuid(UUID uuidText) { .stream() .map(OrganizationEventResponse::new) .toList(); - return new OrganizationDocumentAndEventResponse(organizationDocument, organizationEventResponses); + List linkedCrewDocuments = documentOrganizationLinkRepository + .findAllByOrganizationDocumentWithCrewDocument(organizationDocument) + .stream() + .map(link -> new LinkedCrewDocumentResponse(link.getCrewDocument())) + .toList(); + return new OrganizationDocumentAndEventResponse(organizationDocument, organizationEventResponses, linkedCrewDocuments); } private CrewDocument getCrewDocument(UUID uuid) {