Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.wooteco.wiki.global.common.ApiResponse.SuccessBody;
import com.wooteco.wiki.global.common.ApiResponseGenerator;
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.OrganizationDocumentAndEventResponse;
import com.wooteco.wiki.organizationdocument.dto.response.OrganizationDocumentResponse;
Expand Down Expand Up @@ -42,6 +43,16 @@ public ApiResponse<SuccessBody<OrganizationDocumentResponse>> createOrganization
return ApiResponseGenerator.success(organizationDocumentResponse);
}

@Operation(summary = "기존 조직 문서를 크루 문서에 연결", description = "이미 존재하는 조직 문서를 크루 문서와 연결합니다.")
@PostMapping("/link")
public ApiResponse<SuccessBody<OrganizationDocumentResponse>> linkOrganizationDocument(
@RequestBody OrganizationDocumentLinkRequest organizationDocumentLinkRequest) {
OrganizationDocumentResponse organizationDocumentResponse = organizationDocumentService.link(
organizationDocumentLinkRequest);

return ApiResponseGenerator.success(organizationDocumentResponse);
}

@Operation(summary = "조직 위키 글 수정", description = "조직 위키 글을 수정합니다.")
@PutMapping
public ApiResponse<SuccessBody<OrganizationDocumentResponse>> modifyOrganizationDocumentContents(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.wooteco.wiki.organizationdocument.dto.request;

import java.util.UUID;

public record OrganizationDocumentLinkRequest(
UUID crewDocumentUuid,
UUID organizationDocumentUuid
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.wooteco.wiki.history.service.HistoryService;
import com.wooteco.wiki.organizationdocument.domain.OrganizationDocument;
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.OrganizationDocumentAndEventResponse;
import com.wooteco.wiki.organizationdocument.dto.response.OrganizationDocumentResponse;
Expand Down Expand Up @@ -47,6 +48,14 @@ public OrganizationDocumentResponse create(OrganizationDocumentCreateRequest org
return new OrganizationDocumentResponse(savedOrganizationDocument);
}

public OrganizationDocumentResponse link(OrganizationDocumentLinkRequest organizationDocumentLinkRequest) {
CrewDocument crewDocument = getCrewDocument(organizationDocumentLinkRequest.crewDocumentUuid());
OrganizationDocument organizationDocument = getOrganizationDocument(
organizationDocumentLinkRequest.organizationDocumentUuid());
documentOrganizationLinkService.link(crewDocument, organizationDocument);
return new OrganizationDocumentResponse(organizationDocument);
}

public OrganizationDocumentResponse update(OrganizationDocumentUpdateRequest organizationDocumentUpdateRequest) {
OrganizationDocument organizationDocument = organizationDocumentRepository.findByUuid(
organizationDocumentUpdateRequest.uuid())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package com.wooteco.wiki.organizationdocument.service;

import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.SoftAssertions.assertSoftly;

import com.wooteco.wiki.document.domain.CrewDocument;
import com.wooteco.wiki.document.fixture.CrewDocumentFixture;
import com.wooteco.wiki.document.repository.CrewDocumentRepository;
import com.wooteco.wiki.global.exception.WikiException;
import com.wooteco.wiki.organizationdocument.domain.DocumentOrganizationLink;
import com.wooteco.wiki.organizationdocument.domain.OrganizationDocument;
import com.wooteco.wiki.organizationdocument.dto.request.OrganizationDocumentLinkRequest;
import com.wooteco.wiki.organizationdocument.fixture.OrganizationDocumentFixture;
import com.wooteco.wiki.organizationdocument.repository.DocumentOrganizationLinkRepository;
import com.wooteco.wiki.organizationdocument.repository.OrganizationDocumentRepository;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
class OrganizationDocumentServiceTest {

@Autowired
private OrganizationDocumentService organizationDocumentService;

@Autowired
private CrewDocumentRepository crewDocumentRepository;

@Autowired
private OrganizationDocumentRepository organizationDocumentRepository;

@Autowired
private DocumentOrganizationLinkRepository documentOrganizationLinkRepository;

@DisplayName("기존 조직 문서를 크루 문서에 연결할 때")
@Nested
class LinkExistingOrganization {

private CrewDocument savedCrewDocument;
private OrganizationDocument savedOrganizationDocument;

@BeforeEach
void setUp() {
CrewDocument crewDocument = CrewDocumentFixture.createDefaultCrewDocument();
savedCrewDocument = crewDocumentRepository.save(crewDocument);

OrganizationDocument organizationDocument = OrganizationDocumentFixture.createDefault();
savedOrganizationDocument = organizationDocumentRepository.save(organizationDocument);
}

@DisplayName("성공적으로 기존 조직 문서를 크루 문서와 연결한다")
@Test
void link_success() {
// given
OrganizationDocumentLinkRequest request = new OrganizationDocumentLinkRequest(
savedCrewDocument.getUuid(),
savedOrganizationDocument.getUuid()
);

// when
organizationDocumentService.link(request);

// then
DocumentOrganizationLink link = documentOrganizationLinkRepository
.findByCrewDocumentAndOrganizationDocument(savedCrewDocument, savedOrganizationDocument)
.orElseThrow();

assertSoftly(softly -> {
softly.assertThat(link.getCrewDocument().getId()).isEqualTo(savedCrewDocument.getId());
softly.assertThat(link.getOrganizationDocument().getId()).isEqualTo(savedOrganizationDocument.getId());
});
}

@DisplayName("존재하지 않는 크루 문서 UUID로 연결을 시도하면 예외가 발생한다")
@Test
void link_fail_crewDocumentNotFound() {
// given
OrganizationDocumentLinkRequest request = new OrganizationDocumentLinkRequest(
UUID.randomUUID(),
savedOrganizationDocument.getUuid()
);

// when & then
assertThatThrownBy(() -> organizationDocumentService.link(request))
.isInstanceOf(WikiException.class);
}

@DisplayName("존재하지 않는 조직 문서 UUID로 연결을 시도하면 예외가 발생한다")
@Test
void link_fail_organizationDocumentNotFound() {
// given
OrganizationDocumentLinkRequest request = new OrganizationDocumentLinkRequest(
savedCrewDocument.getUuid(),
UUID.randomUUID()
);

// when & then
assertThatThrownBy(() -> organizationDocumentService.link(request))
.isInstanceOf(WikiException.class);
}
}
}
Loading