Skip to content

Commit

Permalink
hotfix: 끄적이는 메모 아카이브 해제 api 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
TaeyeonRoyce committed Feb 24, 2024
1 parent 4aa7486 commit 75e5027
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 1 deletion.
13 changes: 13 additions & 0 deletions src/main/java/com/baro/memo/application/TemporalMemoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.baro.memo.application.dto.FindTemporalMemoResult;
import com.baro.memo.application.dto.SaveTemporalMemoCommand;
import com.baro.memo.application.dto.SaveTemporalMemoResult;
import com.baro.memo.application.dto.UnarchiveTemporalMemoCommand;
import com.baro.memo.application.dto.UpdateTemporalMemoCommand;
import com.baro.memo.domain.MemoContent;
import com.baro.memo.domain.TemporalMemo;
Expand Down Expand Up @@ -111,4 +112,16 @@ public ArchiveTemporalMemoResult archiveTemporalMemo(ArchiveTemporalMemoCommand
temporalMemo.archived(archive);
return ArchiveTemporalMemoResult.from(archive);
}

public void deleteArchive(UnarchiveTemporalMemoCommand command) {
Member member = memberRepository.getById(command.memberId());
TemporalMemo temporalMemo = temporalMemoRepository.getById(command.temporalMemoId());
temporalMemo.matchOwner(member.getId());
if (!temporalMemo.isArchived()) {
throw new TemporalMemoException(TemporalMemoExceptionType.NOT_EXIST_ARCHIVE);
}
Archive archive = archiveRepository.getById(temporalMemo.getArchive().getId());
archiveRepository.delete(archive);
temporalMemo.unarchive();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.baro.memo.application.dto;

public record UnarchiveTemporalMemoCommand(
Long memberId,
Long temporalMemoId
) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public enum TemporalMemoExceptionType implements RequestExceptionType {
NOT_MATCH_OWNER("TM03", "끄적이는 메모에 대한 접근 권한이 없습니다.", HttpStatus.FORBIDDEN),
ALREADY_CORRECTED("TO04", "이미 맞춤법 검사가 완료된 끄적이는 메모 입니다.", HttpStatus.BAD_REQUEST),
NON_SEQUENTIAL_DATES_EXCEPTION("TM05", "조회 기간이 유효하지 않습니다.", HttpStatus.BAD_REQUEST),
NOT_EXIST_ARCHIVE("TM06", "해당하는 아카이브가 없습니다.", HttpStatus.NOT_FOUND);
NOT_EXIST_ARCHIVE("TM06", "해당하는 아카이브가 없습니다.", HttpStatus.NOT_FOUND),
;

private final String errorCode;
private final String errorMessage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.baro.memo.application.dto.FindTemporalMemoHistoriesResult;
import com.baro.memo.application.dto.SaveTemporalMemoCommand;
import com.baro.memo.application.dto.SaveTemporalMemoResult;
import com.baro.memo.application.dto.UnarchiveTemporalMemoCommand;
import com.baro.memo.application.dto.UpdateTemporalMemoCommand;
import com.baro.memo.presentation.dto.ApplyCorrectionRequest;
import com.baro.memo.presentation.dto.ArchiveTemporalMemoRequest;
Expand Down Expand Up @@ -112,4 +113,14 @@ public ResponseEntity<Void> archiveAsMemo(
.toUri();
return ResponseEntity.created(location).build();
}

@DeleteMapping("/{temporalMemoId}/archive")
public ResponseEntity<Void> deleteArchive(
AuthMember authMember,
@PathVariable Long temporalMemoId
) {
UnarchiveTemporalMemoCommand command = new UnarchiveTemporalMemoCommand(authMember.id(), temporalMemoId);
temporalMemoService.deleteArchive(command);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -310,4 +310,37 @@ public class TemporalMemoAcceptanceSteps {
String[] split = location.split("/");
return Long.parseLong(split[split.length - 1]);
}

public static ExtractableResponse<Response> 끄적이는메모_아카이빙_해제_요청(Token 토큰, Long 끄적이는_메모_ID) {
return RestAssured.given(requestSpec).log().all()
.filter(document(DEFAULT_REST_DOCS_PATH,
pathParameters(
parameterWithName("temporalMemoId").description("끄적이는 메모 ID")
),
requestHeaders(
headerWithName(HttpHeaders.AUTHORIZATION).description("인증 토큰")
))
).contentType(MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.AUTHORIZATION, "Bearer " + 토큰.accessToken())
.when().delete("/temporal-memos/{temporalMemoId}/archive", 끄적이는_메모_ID)
.then().log().all()
.extract();
}

public static ExtractableResponse<Response> 잘못된_끄적이는메모_아카이빙_해제_요청(Token 토큰, Long 끄적이는_메모_ID) {
return RestAssured.given(requestSpec).log().all()
.filter(document(DEFAULT_REST_DOCS_PATH,
pathParameters(
parameterWithName("temporalMemoId").description("끄적이는 메모 ID")
),
requestHeaders(
headerWithName(HttpHeaders.AUTHORIZATION).description("인증 토큰")
),
responseFields(예외_응답()))
).contentType(MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.AUTHORIZATION, "Bearer " + 토큰.accessToken())
.when().delete("/temporal-memos/{temporalMemoId}/archive", 끄적이는_메모_ID)
.then().log().all()
.extract();
}
}
47 changes: 47 additions & 0 deletions src/test/java/com/baro/memo/presentation/TemporalMemoApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.끄적이는메모_생성_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.끄적이는메모_수정_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.끄적이는메모_아카이빙_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.끄적이는메모_아카이빙_해제_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.끄적이는메모를_생성하고_ID_반환한다;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.맞춤법_검사_결과_반영_바디;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.메모_아카이브_요청_바디;
Expand All @@ -30,6 +31,7 @@
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.잘못된_끄적이는메모_삭제_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.잘못된_끄적이는메모_수정_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.잘못된_끄적이는메모_아카이빙_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.잘못된_끄적이는메모_아카이빙_해제_요청;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.크기_초과_끄적이는_메모_수정_바디;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.크기_초과_끄적이는_메모_작성_바디;
import static com.baro.common.acceptance.memo.TemporalMemoAcceptanceSteps.크기_초과_맞춤법_검사_결과_반영_바디;
Expand Down Expand Up @@ -341,4 +343,49 @@ public class TemporalMemoApiTest extends RestApiTest {
// then
응답값을_검증한다(응답, 존재하지_않음);
}

@Test
void 끄적이는_메모_아카이브_해제() {
// given
var 유빈 = 로그인(유빈());
var 유빈의_끄적이는_메모_ID = 끄적이는메모를_생성하고_ID_반환한다(유빈, 끄적이는_메모_바디);
var 메모_아카이브_요청_바디 = 메모_아카이브_요청_바디(유빈의_끄적이는_메모_ID);
끄적이는메모_아카이빙_요청(유빈, 유빈의_끄적이는_메모_ID, 메모_아카이브_요청_바디);

// when
var 응답 = 끄적이는메모_아카이빙_해제_요청(유빈, 유빈의_끄적이는_메모_ID);

// then
응답값을_검증한다(응답, 응답값_없음);
}

@Test
void 다른사람의_끄적이는_메모_아카이브_해제__예외_발생() {
// given
var 유빈 = 로그인(유빈());
var 유빈의_끄적이는_메모_ID = 끄적이는메모를_생성하고_ID_반환한다(유빈, 끄적이는_메모_바디);
var 메모_아카이브_요청_바디 = 메모_아카이브_요청_바디(유빈의_끄적이는_메모_ID);
끄적이는메모_아카이빙_요청(유빈, 유빈의_끄적이는_메모_ID, 메모_아카이브_요청_바디);

var 태연 = 로그인(태연());

// when
var 응답 = 잘못된_끄적이는메모_아카이빙_해제_요청(태연, 유빈의_끄적이는_메모_ID);

// then
응답값을_검증한다(응답, 권한_없음);
}

@Test
void 아카이브_되지_않은_메모_아카이브_해제__예외_발생() {
// given
var 유빈 = 로그인(유빈());
var 유빈의_끄적이는_메모_ID = 끄적이는메모를_생성하고_ID_반환한다(유빈, 끄적이는_메모_바디);

// when
var 응답 = 잘못된_끄적이는메모_아카이빙_해제_요청(유빈, 유빈의_끄적이는_메모_ID);

// then
응답값을_검증한다(응답, 존재하지_않음);
}
}

0 comments on commit 75e5027

Please sign in to comment.