diff --git a/src/main/java/floud/demo/common/response/Success.java b/src/main/java/floud/demo/common/response/Success.java index c4a3d61..3686fae 100644 --- a/src/main/java/floud/demo/common/response/Success.java +++ b/src/main/java/floud/demo/common/response/Success.java @@ -20,6 +20,7 @@ public enum Success { GET_MYPAGE_SUCCESS(HttpStatus.OK , "마이페이지를 성공적으로 조회하였습니다."), GET_MYPAGE_COMMUNITY_SUCCESS(HttpStatus.OK , "내가 쓴 글을 성공적으로 조회하였습니다."), REJECT_MY_FRIEND_SUCCESS(HttpStatus.OK , "성공적으로 친구 관계를 삭제하였습니다."), + CHECK_NICKNAME_DUPLICATED(HttpStatus.OK , "성공적으로 닉네임 중복을 확인하였습니다."), //201 CREATED SUCCESS CREATE_MEMOIR_SUCCESS(HttpStatus.CREATED, "성공적으로 회고를 등록하였습니다."), diff --git a/src/main/java/floud/demo/controller/MypageController.java b/src/main/java/floud/demo/controller/MypageController.java index 3b17414..160d1c8 100644 --- a/src/main/java/floud/demo/controller/MypageController.java +++ b/src/main/java/floud/demo/controller/MypageController.java @@ -1,11 +1,12 @@ package floud.demo.controller; import floud.demo.common.response.ApiResponse; +import floud.demo.dto.mypage.MypageUpdateRequestDto; import floud.demo.service.MyPageService; +import lombok.Getter; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + @RequiredArgsConstructor @RestController @RequestMapping("api/mypage") @@ -15,4 +16,13 @@ public class MypageController { public ApiResponse getMypage(){ return myPageService.getMypage(); } + @GetMapping("/check") + public ApiResponse checkDuplicatedName(@RequestParam(name = "nickname") String nickname){ + return myPageService.checkDuplicatedName(nickname); + } + + @PutMapping + public ApiResponse updateMypage(@RequestBody MypageUpdateRequestDto mypageUpdateRequestDto) { + return myPageService.updateMypage(mypageUpdateRequestDto); + } } diff --git a/src/main/java/floud/demo/domain/Goal.java b/src/main/java/floud/demo/domain/Goal.java index bddaa5a..cb50c23 100644 --- a/src/main/java/floud/demo/domain/Goal.java +++ b/src/main/java/floud/demo/domain/Goal.java @@ -6,7 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; +import java.time.LocalDate; @Getter @NoArgsConstructor @@ -21,16 +21,23 @@ public class Goal extends BaseTimeEntity { private String content; @Column(nullable = false) - private LocalDateTime deadLine; + private LocalDate deadline; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "users_id") private Users users; @Builder - public Goal(Long id, String content, LocalDateTime deadLine){ + public Goal(Long id, String content, LocalDate deadline, Users users){ this.id = id; this.content = content; - this.deadLine = deadLine; + this.deadline = deadline; + this.users = users; } + + public void update(String content, LocalDate deadline){ + this.content = content; + this.deadline = deadline; + } + } diff --git a/src/main/java/floud/demo/domain/Users.java b/src/main/java/floud/demo/domain/Users.java index 0abae73..40f31b0 100644 --- a/src/main/java/floud/demo/domain/Users.java +++ b/src/main/java/floud/demo/domain/Users.java @@ -49,4 +49,8 @@ public Users(Long id, String social_id, String nickname, String introduction, St this.memoirList = memoirList; } + + public void updateIntroduction(String introduction){ + this.introduction = introduction; + } } diff --git a/src/main/java/floud/demo/dto/mypage/MyGoal.java b/src/main/java/floud/demo/dto/mypage/MyGoal.java index a03dc9f..e4276ea 100644 --- a/src/main/java/floud/demo/dto/mypage/MyGoal.java +++ b/src/main/java/floud/demo/dto/mypage/MyGoal.java @@ -4,6 +4,7 @@ import lombok.Builder; import lombok.Getter; +import java.time.LocalDate; import java.time.LocalDateTime; @Builder @@ -11,5 +12,5 @@ public class MyGoal { private Long goal_id; private String content; - private LocalDateTime deadline; + private LocalDate deadline; } diff --git a/src/main/java/floud/demo/dto/mypage/MypageUpdateRequestDto.java b/src/main/java/floud/demo/dto/mypage/MypageUpdateRequestDto.java new file mode 100644 index 0000000..24856ce --- /dev/null +++ b/src/main/java/floud/demo/dto/mypage/MypageUpdateRequestDto.java @@ -0,0 +1,13 @@ +package floud.demo.dto.mypage; + +import floud.demo.domain.Goal; +import lombok.Getter; + +import java.util.List; + +@Getter +public class MypageUpdateRequestDto { + private String nickname; + private String introduction; + private List goalList; +} diff --git a/src/main/java/floud/demo/dto/mypage/UpdateGoal.java b/src/main/java/floud/demo/dto/mypage/UpdateGoal.java new file mode 100644 index 0000000..fefa998 --- /dev/null +++ b/src/main/java/floud/demo/dto/mypage/UpdateGoal.java @@ -0,0 +1,24 @@ +package floud.demo.dto.mypage; + +import floud.demo.domain.Goal; +import floud.demo.domain.Users; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Builder +@Getter +public class UpdateGoal { + private String content; + private LocalDate deadline; + + public Goal toEntity(Users users){ + return Goal.builder() + .content(content) + .deadline(deadline) + .users(users) + .build(); + } +} diff --git a/src/main/java/floud/demo/repository/UsersRepository.java b/src/main/java/floud/demo/repository/UsersRepository.java index 4421647..23d9c15 100644 --- a/src/main/java/floud/demo/repository/UsersRepository.java +++ b/src/main/java/floud/demo/repository/UsersRepository.java @@ -2,6 +2,8 @@ import floud.demo.domain.Users; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; public interface UsersRepository extends JpaRepository { + boolean existsByNickname(String nickname); } diff --git a/src/main/java/floud/demo/service/MyPageService.java b/src/main/java/floud/demo/service/MyPageService.java index dab794e..a36dccc 100644 --- a/src/main/java/floud/demo/service/MyPageService.java +++ b/src/main/java/floud/demo/service/MyPageService.java @@ -7,6 +7,8 @@ import floud.demo.domain.Users; import floud.demo.dto.mypage.MyGoal; import floud.demo.dto.mypage.MypageResponseDto; +import floud.demo.dto.mypage.MypageUpdateRequestDto; +import floud.demo.dto.mypage.UpdateGoal; import floud.demo.repository.GoalRepository; import floud.demo.repository.UsersRepository; import lombok.RequiredArgsConstructor; @@ -15,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -33,23 +36,77 @@ public ApiResponse getMypage(){ Users users = optionalUsers.get(); log.info("유저 이름 -> {}", users.getNickname()); - List goals = goalRepository.findAllByUserId(users.getId()); - List goalList = goals.stream() + //set GoalList + List goalList = setGoalList(users.getId()); + + return ApiResponse.success(Success.GET_MYPAGE_SUCCESS, MypageResponseDto.builder() + .nickname(users.getNickname()) + .introduction(users.getIntroduction()) + .goalList(goalList) + .build()); + } + + @Transactional + public ApiResponse checkDuplicatedName(String nickname){ + boolean isDuplicated = usersRepository.existsByNickname(nickname); + return ApiResponse.success(Success.CHECK_NICKNAME_DUPLICATED, Map.of("isDuplicated", isDuplicated)); + } + + @Transactional + public ApiResponse updateMypage(MypageUpdateRequestDto requestDto){ + //Checking user + Optional optionalUsers = usersRepository.findById(1L); + if(optionalUsers.isEmpty()) + return ApiResponse.failure(Error.USERS_NOT_FOUND); + Users users = optionalUsers.get(); + log.info("유저 이름 -> {}", users.getNickname()); + + //Update Introduction + users.updateIntroduction(requestDto.getIntroduction()); + usersRepository.save(users); + + //Update Goals + updateGoal(users, requestDto.getGoalList()); + + //set GoalList + List updatedGoalList = setGoalList(users.getId()); + + //MypageResonsedto 리턴하기 + return ApiResponse.success(Success.UPDATE_MYPAGE_SUCCESS, MypageResponseDto.builder() + .nickname(users.getNickname()) + .introduction(users.getIntroduction()) + .goalList(updatedGoalList) + .build()); + } + + public List setGoalList(Long users_id){ + List goals = goalRepository.findAllByUserId(users_id); + return goals.stream() .map(goal -> MyGoal.builder() .goal_id(goal.getId()) .content(goal.getContent()) - .deadline(goal.getDeadLine()) + .deadline(goal.getDeadline()) .build()) .collect(Collectors.toList()); + } + public void updateGoal(Users users, List requestDtoGoalList){ + List goals = goalRepository.findAllByUserId(users.getId()); - MypageResponseDto responseDto = MypageResponseDto.builder() - .nickname(users.getNickname()) - .introduction(users.getIntroduction()) - .goalList(goalList) - .build(); - + // Delete all existing goals + goalRepository.deleteAll(goals); - return ApiResponse.success(Success.GET_MYPAGE_SUCCESS, responseDto); + // Add new goals + for (UpdateGoal requestGoal : requestDtoGoalList) { + log.info("수정된 디데이 -> {}", requestGoal.getContent()); + log.info("수정된 데드라인 -> {}", requestGoal.getDeadline()); + UpdateGoal goal = UpdateGoal.builder() + .content(requestGoal.getContent()) + .deadline(requestGoal.getDeadline()) + .build(); + Goal newGoal = goal.toEntity(users); + goalRepository.save(newGoal); + } } + }