diff --git a/src/main/java/com/petmatz/api/pet/PetController.java b/src/main/java/com/petmatz/api/pet/PetController.java index 5a2f568..ca916f3 100644 --- a/src/main/java/com/petmatz/api/pet/PetController.java +++ b/src/main/java/com/petmatz/api/pet/PetController.java @@ -64,7 +64,8 @@ public Response fetchPetInfo(@RequestBody PetRegisterNoRequest }) public Response registerPet(@RequestBody PetRequest request) throws MalformedURLException { Long userId = jwtExtractProvider.findIdFromJwt(); - User user = userUtils.findUser(userId); + System.out.println("userId :: " + userId); + User user = userUtils.findIdUser(userId); S3ImgDataInfo petSaveInfo = petService.savePet(user, request.of()); return Response.success(S3ImgDataResponse.of(petSaveInfo)); } @@ -86,7 +87,7 @@ public Response registerPet(@RequestBody PetRequest request) }) public Response updatePet(@PathVariable Long id, @RequestBody PetUpdateRequest petUpdateRequest) throws MalformedURLException { Long userId = jwtExtractProvider.findIdFromJwt(); - User user = userUtils.findUser(userId); + User user = userUtils.findIdUser(userId); S3ImgDataInfo petSaveInfo = petService.updatePet(id, user, petUpdateRequest.of()); return Response.success(S3ImgDataResponse.of(petSaveInfo)); } @@ -97,7 +98,7 @@ public Response updatePet(@PathVariable Long id, @RequestBody @Parameter(name = "id", description = "반려동물 ID", example = "1") public Response deletePet(@PathVariable Long id) { Long userId = jwtExtractProvider.findIdFromJwt(); - User user = userUtils.findUser(userId); + User user = userUtils.findIdUser(userId); petService.deletePet(id, user); return Response.success("댕댕이 정보가 성공적으로 삭제되었습니다."); } diff --git a/src/main/java/com/petmatz/domain/pet/repository/PetRepository.java b/src/main/java/com/petmatz/domain/pet/repository/PetRepository.java index f7efe05..b9177c2 100644 --- a/src/main/java/com/petmatz/domain/pet/repository/PetRepository.java +++ b/src/main/java/com/petmatz/domain/pet/repository/PetRepository.java @@ -20,6 +20,7 @@ public interface PetRepository extends JpaRepository { @Query("select p from Pet p where p.id IN :petList") List findPetListByPetId(@Param("petList") List petList); - List findAllByUserId(Long userId); + + void deleteByUserId(Long userId); } diff --git a/src/main/java/com/petmatz/domain/petmission/PetMissionService.java b/src/main/java/com/petmatz/domain/petmission/PetMissionService.java index a24f7af..908d05e 100644 --- a/src/main/java/com/petmatz/domain/petmission/PetMissionService.java +++ b/src/main/java/com/petmatz/domain/petmission/PetMissionService.java @@ -69,6 +69,7 @@ public PetMissionData insertPetMission(PetMissionInfo petMissionInfo, Long careI .map(user -> UserToPetMissionEntity.of(user, petMissionEntity, careId)) .toList(); + petMissionAppend.insertPetMission(petMissionEntity); userToPetMissionAppend.insertUserToPetMission(userToPetMissionEntities); return PetMissionData.of(chatRoomId, petMissionEntity); } diff --git a/src/main/java/com/petmatz/domain/petmission/component/PetMissionAppend.java b/src/main/java/com/petmatz/domain/petmission/component/PetMissionAppend.java index cdf1947..d491367 100644 --- a/src/main/java/com/petmatz/domain/petmission/component/PetMissionAppend.java +++ b/src/main/java/com/petmatz/domain/petmission/component/PetMissionAppend.java @@ -1,7 +1,9 @@ package com.petmatz.domain.petmission.component; import com.petmatz.domain.petmission.entity.PetMissionAnswerEntity; +import com.petmatz.domain.petmission.entity.PetMissionEntity; import com.petmatz.domain.petmission.repository.PetMissionAnswerRepository; +import com.petmatz.domain.petmission.repository.PetMissionRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -10,11 +12,16 @@ public class PetMissionAppend { private final PetMissionAnswerRepository petMissionAnswerRepository; + private final PetMissionRepository petMissionRepository; public PetMissionAnswerEntity insertPetMissionAnswer(PetMissionAnswerEntity petMissionAnswerEntity) { return petMissionAnswerRepository.save(petMissionAnswerEntity); } + public void insertPetMission(PetMissionEntity petMission) { + petMissionRepository.save(petMission); + } + } diff --git a/src/main/java/com/petmatz/domain/petmission/entity/PetMissionAskEntity.java b/src/main/java/com/petmatz/domain/petmission/entity/PetMissionAskEntity.java index b03cb71..fa0c262 100644 --- a/src/main/java/com/petmatz/domain/petmission/entity/PetMissionAskEntity.java +++ b/src/main/java/com/petmatz/domain/petmission/entity/PetMissionAskEntity.java @@ -17,7 +17,7 @@ public class PetMissionAskEntity { private String comment; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pet_mission_id", nullable = false) // 외래 키 private PetMissionEntity petMission; diff --git a/src/main/java/com/petmatz/domain/petmission/entity/UserToPetMissionEntity.java b/src/main/java/com/petmatz/domain/petmission/entity/UserToPetMissionEntity.java index 7c06d3b..1db86ed 100644 --- a/src/main/java/com/petmatz/domain/petmission/entity/UserToPetMissionEntity.java +++ b/src/main/java/com/petmatz/domain/petmission/entity/UserToPetMissionEntity.java @@ -20,7 +20,7 @@ public class UserToPetMissionEntity { @JoinColumn(name = "user_id", nullable = false) private User user; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pet_mission_id", nullable = false) private PetMissionEntity petMission; diff --git a/src/main/java/com/petmatz/domain/sosboard/SosBoardRepository.java b/src/main/java/com/petmatz/domain/sosboard/SosBoardRepository.java index 9afc58b..e8d23ca 100644 --- a/src/main/java/com/petmatz/domain/sosboard/SosBoardRepository.java +++ b/src/main/java/com/petmatz/domain/sosboard/SosBoardRepository.java @@ -16,5 +16,7 @@ public interface SosBoardRepository extends JpaRepository { Page findByUserRegion(@Param("region") String region, Pageable pageable); Page findByUserNickname(String nickname, Pageable pageable); + + void deleteByUserId(Long id); } diff --git a/src/main/java/com/petmatz/domain/sosboard/SosBoardService.java b/src/main/java/com/petmatz/domain/sosboard/SosBoardService.java index 4353b9c..424b6e1 100644 --- a/src/main/java/com/petmatz/domain/sosboard/SosBoardService.java +++ b/src/main/java/com/petmatz/domain/sosboard/SosBoardService.java @@ -5,6 +5,7 @@ import com.petmatz.domain.pet.entity.Pet; import com.petmatz.domain.pet.repository.PetRepository; import com.petmatz.domain.sosboard.component.SosBoardAppend; +import com.petmatz.domain.sosboard.component.SosBoardDelete; import com.petmatz.domain.sosboard.component.SosBoardReader; import com.petmatz.domain.sosboard.dto.*; import com.petmatz.domain.sosboard.entity.PetSosBoard; @@ -28,7 +29,7 @@ public class SosBoardService { private final SosBoardAppend sosBoardAppend; private final PetReader petReader; - private final SosBoardRepository sosBoardRepository; + private final SosBoardDelete sosBoardDelete; private final UserRepository userRepository; private final PetRepository petRepository; @@ -89,11 +90,7 @@ public SpecificSosBoardInfo updateSosBoard(Long boardId, UpdateSosBoardInfo upda //게시글 삭제 public void deleteSosBoard(Long boardId, User user) { SosBoard sosBoard = sosBoardReader.selectSosBoard(boardId); - - //사용자 권한 확인 - sosBoard.checkUserId(user.getId()); - - sosBoardRepository.delete(sosBoard); + sosBoardDelete.deleteSosBoard(sosBoard, user); } // User의 Pet 정보 불러오기 @@ -110,28 +107,7 @@ public List getUserPets(Long userId) { // 해당 닉네임에 해당하는 글 불러오기 public PageResponse getUserSosBoardsByNickname(String nickname, int page, int size) { - Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "id")); - - Page sosBoardPage = sosBoardRepository.findByUserNickname(nickname, pageable); - - // SosBoard → SosBoardServiceDto 변환 - List serviceDtos = sosBoardPage.getContent().stream() - .map(sosBoard -> { - List petResponses = sosBoard.getPetSosBoards().stream() - .map(PetSosBoard::getPet) - .map(PetResponse::of) - .collect(Collectors.toList()); - return LegercySosBoardInfo.from(sosBoard, petResponses); - }) - .collect(Collectors.toList()); - - // PageResponseDto 생성 - return new PageResponse<>( - serviceDtos, - sosBoardPage.getTotalElements(), - sosBoardPage.getTotalPages(), - page + 1 - ); + return sosBoardReader.getUserSosBoardsByNickname(nickname, page, size); } } diff --git a/src/main/java/com/petmatz/domain/sosboard/component/SosBoardDelete.java b/src/main/java/com/petmatz/domain/sosboard/component/SosBoardDelete.java new file mode 100644 index 0000000..3c89736 --- /dev/null +++ b/src/main/java/com/petmatz/domain/sosboard/component/SosBoardDelete.java @@ -0,0 +1,26 @@ +package com.petmatz.domain.sosboard.component; + +import com.petmatz.domain.sosboard.SosBoardRepository; +import com.petmatz.domain.sosboard.entity.SosBoard; +import com.petmatz.domain.user.entity.User; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class SosBoardDelete { + + private final SosBoardRepository sosBoardRepository; + + //게시글 삭제 + public void deleteSosBoard(SosBoard sosBoard, User user) { + //사용자 권한 확인 + sosBoard.checkUserId(user.getId()); + sosBoardRepository.delete(sosBoard); + } + + public void deleteSosBoardByUser(Long userId) { + sosBoardRepository.deleteByUserId(userId); + } + +} diff --git a/src/main/java/com/petmatz/domain/sosboard/component/SosBoardReader.java b/src/main/java/com/petmatz/domain/sosboard/component/SosBoardReader.java index 4689945..d40991b 100644 --- a/src/main/java/com/petmatz/domain/sosboard/component/SosBoardReader.java +++ b/src/main/java/com/petmatz/domain/sosboard/component/SosBoardReader.java @@ -1,7 +1,11 @@ package com.petmatz.domain.sosboard.component; +import com.petmatz.api.pet.dto.PetResponse; import com.petmatz.domain.sosboard.SosBoardRepository; +import com.petmatz.domain.sosboard.dto.LegercySosBoardInfo; +import com.petmatz.domain.sosboard.dto.PageResponse; import com.petmatz.domain.sosboard.dto.SosBoardInfoList; +import com.petmatz.domain.sosboard.entity.PetSosBoard; import com.petmatz.domain.sosboard.entity.SosBoard; import com.petmatz.domain.sosboard.exception.SosBoardErrorCode; import com.petmatz.domain.sosboard.exception.SosBoardServiceException; @@ -10,6 +14,7 @@ import org.springframework.stereotype.Component; import java.util.List; +import java.util.stream.Collectors; @Component @RequiredArgsConstructor @@ -44,4 +49,29 @@ private Slice checkRegin(String region, Pageable pageable) { return sosBoardRepository.findByUserRegion(region, pageable); } } + + public PageResponse getUserSosBoardsByNickname(String nickname, int page, int size) { + Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "id")); + + Page sosBoardPage = sosBoardRepository.findByUserNickname(nickname, pageable); + + // SosBoard → SosBoardServiceDto 변환 + List serviceDtos = sosBoardPage.getContent().stream() + .map(sosBoard -> { + List petResponses = sosBoard.getPetSosBoards().stream() + .map(PetSosBoard::getPet) + .map(PetResponse::of) + .collect(Collectors.toList()); + return LegercySosBoardInfo.from(sosBoard, petResponses); + }) + .collect(Collectors.toList()); + + // PageResponseDto 생성 + return new PageResponse<>( + serviceDtos, + sosBoardPage.getTotalElements(), + sosBoardPage.getTotalPages(), + page + 1 + ); + } } diff --git a/src/main/java/com/petmatz/domain/user/service/EmailService.java b/src/main/java/com/petmatz/domain/user/service/EmailService.java index fb11e4a..e751dac 100644 --- a/src/main/java/com/petmatz/domain/user/service/EmailService.java +++ b/src/main/java/com/petmatz/domain/user/service/EmailService.java @@ -29,6 +29,7 @@ public void emailCertification(EmailCertificationRequestDto dto) { // 인증 번호 생성 및 이메일 전송 String certificationNumber = CertificationNumberProvider.generateNumber(); + System.out.println("certificationNumber :: " + certificationNumber); emailProvider.sendVerificationEmail(accountId, certificationNumber); emailComponent.saveCertification(accountId, certificationNumber); diff --git a/src/main/java/com/petmatz/domain/user/service/UserService.java b/src/main/java/com/petmatz/domain/user/service/UserService.java index 3c57bb8..632fe63 100644 --- a/src/main/java/com/petmatz/domain/user/service/UserService.java +++ b/src/main/java/com/petmatz/domain/user/service/UserService.java @@ -4,6 +4,7 @@ import com.petmatz.common.security.jwt.JwtExtractProvider; import com.petmatz.domain.pet.entity.Pet; import com.petmatz.domain.pet.repository.PetRepository; +import com.petmatz.domain.sosboard.component.SosBoardDelete; import com.petmatz.domain.user.component.PasswordComponent; import com.petmatz.domain.user.component.UserUtils; import com.petmatz.domain.user.entity.User; @@ -29,6 +30,7 @@ public class UserService { private final UserRepository userRepository; private final PetRepository petRepository; + private final SosBoardDelete sosBoardDelete; private final CertificationRepository certificationRepository; private final JwtExtractProvider jwtExtractProvider; @@ -44,12 +46,22 @@ public void deleteId(DeleteIdRequestDto dto) { String password = dto.getPassword(); String encodedPassword = user.getPassword(); + //패스워드 검증 passwordComponent.validatePassword(password, encodedPassword); + + //인증번호 관련 전부 삭제 + //TODO 인증 번호를 굳이 DB에서 관리해야 하나? certificationRepository.deleteById(userId); - // 사용자 삭제 - List pets = petRepository.findAllByUserId(user.getId()); // Pet 엔티티에서 User를 참조하는 기준으로 조회 + + //sos보드 삭제 + sosBoardDelete.deleteSosBoardByUser(userId); + + //채팅방 삭제 + // 명시적으로 Pet 삭제 - petRepository.deleteAll(pets); +// petRepository.deleteAll(pets); + petRepository.deleteByUserId(userId); + userRepository.delete(user); }