diff --git a/src/main/java/org/harang/server/controller/MatchingController.java b/src/main/java/org/harang/server/controller/MatchingController.java index 687fd33..fb9f0de 100644 --- a/src/main/java/org/harang/server/controller/MatchingController.java +++ b/src/main/java/org/harang/server/controller/MatchingController.java @@ -44,4 +44,11 @@ public ApiResponse finishMatching(final @NotNull @PathVariable("postId") Long public ApiResponse getWaitinglist(final @NotNull @PathVariable("postId") Long postId) { return ApiResponse.success(matchingService.getWaitingList(postId)); } + + @PostMapping("/{postId}/chats") + public ApiResponse createMatchingWaiting(@MemberId Long memberId, + final @NotNull @PathVariable("postId") Long postId) { + matchingService.createMatchingWaiting(memberId, postId); + return ApiResponse.success(SuccessMessage.OK); + } } diff --git a/src/main/java/org/harang/server/controller/MockJwtController.java b/src/main/java/org/harang/server/controller/MockJwtController.java index a84e5c9..09f6692 100644 --- a/src/main/java/org/harang/server/controller/MockJwtController.java +++ b/src/main/java/org/harang/server/controller/MockJwtController.java @@ -18,6 +18,6 @@ public class MockJwtController { @GetMapping public JwtTokenResponse getToken(){ - return jwtUtil.generateTokens(Long.valueOf(1), Type.SPROUT); + return jwtUtil.generateTokens(Long.valueOf(2), Type.SPROUT); } } diff --git a/src/main/java/org/harang/server/controller/PostController.java b/src/main/java/org/harang/server/controller/PostController.java index 99dd598..271046b 100644 --- a/src/main/java/org/harang/server/controller/PostController.java +++ b/src/main/java/org/harang/server/controller/PostController.java @@ -31,6 +31,12 @@ public ApiResponse createPost(@MemberId Long memberId, @Valid @RequestBody Po return ApiResponse.success(SuccessMessage.CREATED); } + @DeleteMapping("/{postId}") + public ApiResponse deletePost(@MemberId Long memberId, @PathVariable Long postId) { + postService.deletePost(memberId, postId); + return ApiResponse.success(SuccessMessage.OK); + } + @GetMapping public ApiResponse> getAllPosts() { return ApiResponse.success(postService.getAllPosts()); diff --git a/src/main/java/org/harang/server/domain/Category.java b/src/main/java/org/harang/server/domain/Category.java index f3f79d3..36d6854 100644 --- a/src/main/java/org/harang/server/domain/Category.java +++ b/src/main/java/org/harang/server/domain/Category.java @@ -21,7 +21,7 @@ public class Category { @Column(name = "name", nullable = false) private String name; - @OneToMany(mappedBy = "category") + @OneToMany(mappedBy = "category", cascade = CascadeType.ALL) private List postCategoryList = new ArrayList<>(); @Builder diff --git a/src/main/java/org/harang/server/domain/Help.java b/src/main/java/org/harang/server/domain/Help.java index 07dd418..9a0f2e1 100644 --- a/src/main/java/org/harang/server/domain/Help.java +++ b/src/main/java/org/harang/server/domain/Help.java @@ -22,7 +22,7 @@ public class Help { private String name; /* Relation Parent Mapping */ - @OneToMany(mappedBy = "help") + @OneToMany(mappedBy = "help", cascade = CascadeType.ALL) private List memberHelpList = new ArrayList<>(); @Builder diff --git a/src/main/java/org/harang/server/domain/Location.java b/src/main/java/org/harang/server/domain/Location.java index ad08ce8..f54751c 100644 --- a/src/main/java/org/harang/server/domain/Location.java +++ b/src/main/java/org/harang/server/domain/Location.java @@ -15,7 +15,7 @@ public class Location { @Column(name = "id", nullable = false) private Long id; - @OneToOne(fetch = FetchType.LAZY) + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "post_id") private Post post; diff --git a/src/main/java/org/harang/server/domain/MemberInfo.java b/src/main/java/org/harang/server/domain/MemberInfo.java index 4dc4339..94509e3 100644 --- a/src/main/java/org/harang/server/domain/MemberInfo.java +++ b/src/main/java/org/harang/server/domain/MemberInfo.java @@ -32,10 +32,10 @@ public class MemberInfo { private String refreshToken; /* Relation Parent Mapping */ - @OneToMany(mappedBy = "memberInfo") + @OneToMany(mappedBy = "memberInfo", cascade = CascadeType.ALL) private List memberHelpList = new ArrayList<>(); - @OneToMany(mappedBy = "memberInfo") + @OneToMany(mappedBy = "memberInfo", cascade = CascadeType.ALL) private List certificationList = new ArrayList<>(); @Builder diff --git a/src/main/java/org/harang/server/domain/Post.java b/src/main/java/org/harang/server/domain/Post.java index 381f609..1ed35ef 100644 --- a/src/main/java/org/harang/server/domain/Post.java +++ b/src/main/java/org/harang/server/domain/Post.java @@ -55,13 +55,13 @@ public class Post { private Status status = Status.WAITING; /* Relation Parent Mapping */ - @OneToMany(mappedBy = "post") + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List matchingList = new ArrayList<>(); - @OneToMany(mappedBy = "post") + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List postCategoryList = new ArrayList<>(); - @OneToMany(mappedBy = "post") + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) private List waitingList = new ArrayList<>(); @Builder diff --git a/src/main/java/org/harang/server/dto/type/ErrorMessage.java b/src/main/java/org/harang/server/dto/type/ErrorMessage.java index 61ad981..03032a7 100644 --- a/src/main/java/org/harang/server/dto/type/ErrorMessage.java +++ b/src/main/java/org/harang/server/dto/type/ErrorMessage.java @@ -49,6 +49,7 @@ public enum ErrorMessage { MATCHING_ALREADY_DONE("50004", HttpStatus.INTERNAL_SERVER_ERROR, "이미 종료된 매칭입니다."), ONLY_SPROUT_CAN_CREATE_MATCH("50005", HttpStatus.INTERNAL_SERVER_ERROR, "새싹인 유저만 매칭을 생성할 수 있습니다."), ONLY_WATERING_CAN_HELP_SPROUT("50006", HttpStatus.INTERNAL_SERVER_ERROR, "물뿌리개인 유저만 새싹을 도와줄 수 있습니다."), + CHAT_ALREADY_STARTED("50007", HttpStatus.INTERNAL_SERVER_ERROR, "이미 채팅을 시작한 게시글입니다."), ; private String code; diff --git a/src/main/java/org/harang/server/repository/LocationRepository.java b/src/main/java/org/harang/server/repository/LocationRepository.java index 05ce167..a950b26 100644 --- a/src/main/java/org/harang/server/repository/LocationRepository.java +++ b/src/main/java/org/harang/server/repository/LocationRepository.java @@ -1,7 +1,16 @@ package org.harang.server.repository; +import jakarta.transaction.Transactional; import org.harang.server.domain.Location; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; public interface LocationRepository extends JpaRepository { -} + Location findByPostId(Long PostId); + + @Transactional + @Modifying + @Query("DELETE FROM Location l WHERE l.post.id = :postId") + void deleteByPostId(Long postId); +} \ No newline at end of file diff --git a/src/main/java/org/harang/server/service/MatchingService.java b/src/main/java/org/harang/server/service/MatchingService.java index 5090e17..54c9ed5 100644 --- a/src/main/java/org/harang/server/service/MatchingService.java +++ b/src/main/java/org/harang/server/service/MatchingService.java @@ -94,4 +94,31 @@ public List getWaitingList(Long postId) { .build()).toList(); return waitingListResponse; } + + @Transactional + public void createMatchingWaiting(Long memberId, Long postId) { + Post post = postRepository.findByIdOrThrow(postId); + Member member = memberRepository.findByIdOrThrow(memberId); + + // 이미 사용자가 채팅을 시작한 글이라면 예외 발생 + List waitingMemberIdList = waitingRepository.findAllByPostId(postId) + .stream().map(w -> w.getMember().getId()).toList(); + for (Long m : waitingMemberIdList) { + if (m.equals(memberId)) { + throw new CustomException(ErrorMessage.CHAT_ALREADY_STARTED); + } + } + + // 사용자가 물뿌리개가 아니라면 예외 발생 + if (!member.getType().equals(Type.WATERING)) { + throw new CustomException(ErrorMessage.ONLY_WATERING_CAN_HELP_SPROUT); + } + + Waiting newWaiting = Waiting.builder() + .post(post) + .member(member) + .build(); + + waitingRepository.save(newWaiting); + } } diff --git a/src/main/java/org/harang/server/service/PostService.java b/src/main/java/org/harang/server/service/PostService.java index 19c6ab1..023a694 100644 --- a/src/main/java/org/harang/server/service/PostService.java +++ b/src/main/java/org/harang/server/service/PostService.java @@ -82,5 +82,13 @@ public List getSearchResults(String title) { .stream() .map(p -> PostResponse.of(p)) .toList(); + + @Transactional + public void deletePost(Long memberId, Long postId) { + Post post = postRepository.findByIdOrThrow(postId); + + locationRepository.deleteByPostId(postId); + postRepository.delete(post); + } }