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 @@ -49,6 +49,7 @@ public enum BaseResponseMessage {
편지가_성공적으로_조회되었습니다("편지가 성공적으로 조회되었습니다"),
일치하는_편지가_없습니다("일치하는 편지가 없습니다"),
편지_공개_여부가_수정되었습니다("편지 공개 여부가 수정되었습니다"),
편지가_성공적으로_삭제_되었습니다("편지가 성공적으로 삭제 되었습니다"),

//news
뉴스_조회가_성공했습니다("뉴스 조회가 성공했습니다"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.neighbors.tohero.application.letter.dto;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;

public record DeleteLetterRequest (
@NotNull
@Max(Long.MAX_VALUE)
@Min(0)
long letterId
){
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.neighbors.tohero.common.jwt.JwtUserDetails;
import com.neighbors.tohero.domain.domain.address.service.GetAddress;
import com.neighbors.tohero.domain.domain.letter.service.CreateLetter;
import com.neighbors.tohero.domain.domain.letter.service.DeleteLetter;
import com.neighbors.tohero.domain.domain.letter.service.UpdateLetter;
import com.neighbors.tohero.domain.domain.mainPage.model.Letter;
import com.neighbors.tohero.domain.domain.mainPage.service.GetLetter;
Expand All @@ -28,6 +29,7 @@ public class LetterService {
private final GetLetter getLetter;
private final GetAddress getAddress;
private final UpdateLetter updateLetter;
private final DeleteLetter deleteLetter;

public BaseResponse<CreateLetterResponse> createLetter(final JwtUserDetails jwtUserDetail, final CreateLetterRequest createLetterRequest) {

Expand Down Expand Up @@ -82,6 +84,16 @@ public BaseResponse<UpdateLetterPublicResponse> updateLetterPublic(long userId,
);
}

@Transactional
public BaseResponse deleteLetter(long userId, long letterId){
deleteLetter.deleteLetterByUserIdAndLetterId(userId, letterId);

return new BaseResponse<>(
BaseResponseStatus.OK,
BaseResponseMessage.편지가_성공적으로_삭제_되었습니다.getMessage()
);
}


private BaseResponse<CreateLetterResponse> createGuestLetter(final String nickname, final CreateLetterRequest createLetterRequest) {
long createdLetterId = createLetter.createGuestLetter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ private void initOnlyUserRequest() {
addToOnlyUserRequest("GET", "/letter");
addToOnlyUserRequest("PUT", "/letter");
addToOnlyUserRequest("GET", "/auth/refreshToken");
addToOnlyUserRequest("DELETE", "/letter");
}

private void addToOnlyUserRequest(String method, String url) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.neighbors.tohero.domain.domain.letter.service;

import com.neighbors.tohero.common.annotaion.DomainService;
import com.neighbors.tohero.domain.query.LetterRepository;
import lombok.RequiredArgsConstructor;

@DomainService
@RequiredArgsConstructor
public class DeleteLetter {

private final LetterRepository letterRepository;

public void deleteLetterByUserIdAndLetterId(long userId, long letterId) {
letterRepository.deleteLetter(repo -> repo.deleteByUserIdAndLetterId(userId, letterId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ public interface LetterRepository {
void remainLetterWithoutUser(long userId);
Letter getLetter(Function<LetterEntityRepository, Optional<LetterEntity>> function);
void updateLetter(Consumer<LetterEntityRepository> consumer);
void deleteLetter(Consumer<LetterEntityRepository> consumer);
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,9 @@ public Letter getLetter(Function<LetterEntityRepository, Optional<LetterEntity>>
public void updateLetter(Consumer<LetterEntityRepository> consumer) {
consumer.accept(letterEntityRepository);
}

@Override
public void deleteLetter(Consumer<LetterEntityRepository> consumer) {
consumer.accept(letterEntityRepository);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,11 @@ void updateLetterPublic(
@Param("letterId") long letterId,
@Param("isPublic") boolean isPublic
);

@Modifying
@Query("DELETE FROM LetterEntity le WHERE le.user.userId = :userId AND le.letterId = :letterId")
void deleteByUserIdAndLetterId(
@Param("userId") long userId,
@Param("letterId") long letterId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.neighbors.tohero.application.baseResponse.BaseResponse;
import com.neighbors.tohero.application.letter.dto.CreateLetterRequest;
import com.neighbors.tohero.application.letter.dto.DeleteLetterRequest;
import com.neighbors.tohero.application.letter.dto.GetLetterDetailRequest;
import com.neighbors.tohero.application.letter.dto.UpdateLetterPublic;
import com.neighbors.tohero.application.letter.service.LetterService;
Expand All @@ -22,7 +23,7 @@ public class LetterController {

private final LetterService letterService;

@Operation(summary = "편지 API", description = "편지를 생성하는 API입니다. content, isPublic은 필수 정보입니다. TargetJob, addressId, heroName은 사용자에게 입력받은 여부에 따라 json에 포함/미포함 할 수 있습니다. readingAlarm은 열람여부를 메시지로 받을지 여부이며, 로그인한 유저일 경우만 json에 포함시키면 됩니다. ")
@Operation(summary = "편지 API", description = "편지를 생성하는 API입니다. content, isPublic은 필수 정보입니다. TargetJob, addressId, heroName은 사용자에게 입력받은 여부에 따라 json에 포함/미포함 할 수 있습니다. readingAlarm은 열람여부를 메시지로 받을지 여부이며, 로그인한 유저일 경우만 json에 포함시키면 됩니다. TargetJob에 경찰서면 POLICE_OFFICER, 소방서면 FIRE_FIGHTER로 입력해주시면 됩니다.")
@PostMapping("")
public ResponseEntity<BaseResponse> createLetter(
@Parameter(hidden=true) @AuthenticationPrincipal JwtUserDetails jwtUserDetail,
Expand Down Expand Up @@ -55,4 +56,14 @@ public ResponseEntity<BaseResponse> updateLetterPublic(
return ResponseEntity.ok()
.body(letterService.updateLetterPublic(jwtUserDetail.getUserId(), updateLetterPublic));
}

@Operation(summary = "편지 API", description = "편지를 삭제하는 API입니다. 로그인한 유저만 사용할 수 있습니다.")
@DeleteMapping("")
public ResponseEntity<BaseResponse> deleteLetter(
@Parameter(hidden = true) @AuthenticationPrincipal JwtUserDetails jwtUserDetail,
@RequestBody @Validated DeleteLetterRequest deleteLetterRequest
){
return ResponseEntity.ok()
.body(letterService.deleteLetter(jwtUserDetail.getUserId(), deleteLetterRequest.letterId()));
}
}
Loading