Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Mypage 수정, 닉네임 중복체크 구현 #5

Merged
merged 12 commits into from
Mar 3, 2024
1 change: 1 addition & 0 deletions src/main/java/floud/demo/common/response/Success.java
Original file line number Diff line number Diff line change
Expand Up @@ -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, "성공적으로 회고를 등록하였습니다."),
Expand Down
16 changes: 13 additions & 3 deletions src/main/java/floud/demo/controller/MypageController.java
Original file line number Diff line number Diff line change
@@ -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")
Expand All @@ -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);
}
}
15 changes: 11 additions & 4 deletions src/main/java/floud/demo/domain/Goal.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.time.LocalDate;

@Getter
@NoArgsConstructor
Expand All @@ -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;
}

}
4 changes: 4 additions & 0 deletions src/main/java/floud/demo/domain/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
3 changes: 2 additions & 1 deletion src/main/java/floud/demo/dto/mypage/MyGoal.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
import lombok.Builder;
import lombok.Getter;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Builder
@Getter
public class MyGoal {
private Long goal_id;
private String content;
private LocalDateTime deadline;
private LocalDate deadline;
}
13 changes: 13 additions & 0 deletions src/main/java/floud/demo/dto/mypage/MypageUpdateRequestDto.java
Original file line number Diff line number Diff line change
@@ -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<UpdateGoal> goalList;
}
24 changes: 24 additions & 0 deletions src/main/java/floud/demo/dto/mypage/UpdateGoal.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
2 changes: 2 additions & 0 deletions src/main/java/floud/demo/repository/UsersRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Users, Long> {
boolean existsByNickname(String nickname);
}
77 changes: 67 additions & 10 deletions src/main/java/floud/demo/service/MyPageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -33,23 +36,77 @@ public ApiResponse<?> getMypage(){
Users users = optionalUsers.get();
log.info("유저 이름 -> {}", users.getNickname());

List<Goal> goals = goalRepository.findAllByUserId(users.getId());
List<MyGoal> goalList = goals.stream()
//set GoalList
List<MyGoal> 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<Users> 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<MyGoal> 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<MyGoal> setGoalList(Long users_id){
List<Goal> 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<UpdateGoal> requestDtoGoalList){
List<Goal> 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);
}
}

}
Loading