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 @@ -4,6 +4,7 @@
import com.wayble.server.common.exception.ApplicationException;
import com.wayble.server.common.response.CommonResponse;
import com.wayble.server.user.dto.UserInfoRegisterRequestDto;
import com.wayble.server.user.dto.UserInfoUpdateRequestDto;
import com.wayble.server.user.dto.UserLoginRequestDto;
import com.wayble.server.user.dto.UserRegisterRequestDto;
import com.wayble.server.user.dto.token.TokenResponseDto;
Expand Down Expand Up @@ -136,4 +137,28 @@ public CommonResponse<String> registerUserInfo(
userInfoService.registerUserInfo(userId, req);
return CommonResponse.success("내 정보 등록 완료");
}

@PatchMapping("/info")
@Operation(
summary = "내 정보 수정",
description = "유저가 자신의 정보를 수정합니다."
)
@ApiResponses({
@ApiResponse(responseCode = "200", description = "내 정보 수정 완료"),
@ApiResponse(responseCode = "400", description = "잘못된 요청입니다."),
@ApiResponse(responseCode = "403", description = "권한이 없습니다."),
@ApiResponse(responseCode = "404", description = "유저를 찾을 수 없음")
})
public CommonResponse<String> updateUserInfo(
@RequestBody @Valid UserInfoUpdateRequestDto dto
) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication.getPrincipal() instanceof Long)) {
throw new ApplicationException(UserErrorCase.FORBIDDEN);
}
Long userId = (Long) authentication.getPrincipal();

userInfoService.updateUserInfo(userId, dto);
return CommonResponse.success("내 정보 수정 완료");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.wayble.server.user.dto;

import com.wayble.server.user.entity.Gender;
import com.wayble.server.user.entity.UserType;
import lombok.Getter;

@Getter
public class UserInfoUpdateRequestDto {
private String nickname; // 변경할 닉네임 (nullable)
private String birthDate; // YYYY-MM-DD (nullable)
private Gender gender; // MALE, FEMALE, UNKNOWN (nullable)
private UserType userType; // GENERAL, DISABLED, COMPANION (nullable)
private String disabilityType; // userType이 DISABLED일 때만 값, 아니면 null
private String mobilityAid; // userType이 DISABLED일 때만 값, 아니면 null
}
24 changes: 9 additions & 15 deletions src/main/java/com/wayble/server/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,13 @@ public void setNickname(String nickname) {
this.nickname = nickname;
}

public void setDisabilityType(String disabilityType) {
this.disabilityType = disabilityType;
}
public void setMobilityAid(String mobilityAid) {
this.mobilityAid = mobilityAid;
}
public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public void setUserType(UserType userType) {
this.userType = userType;
}
public void setDisabilityType(String disabilityType) { this.disabilityType = disabilityType; }

public void setMobilityAid(String mobilityAid) { this.mobilityAid = mobilityAid; }

public void setBirthDate(LocalDate birthDate) { this.birthDate = birthDate; }

public void setGender(Gender gender) { this.gender = gender; }

public void setUserType(UserType userType) { this.userType = userType;}
}
46 changes: 46 additions & 0 deletions src/main/java/com/wayble/server/user/service/UserInfoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.wayble.server.common.exception.ApplicationException;
import com.wayble.server.user.dto.UserInfoRegisterRequestDto;
import com.wayble.server.user.dto.UserInfoUpdateRequestDto;
import com.wayble.server.user.entity.User;
import com.wayble.server.user.entity.UserType;
import com.wayble.server.user.exception.UserErrorCase;
Expand Down Expand Up @@ -49,4 +50,49 @@ public void registerUserInfo(Long userId, UserInfoRegisterRequestDto dto) {

userRepository.save(user);
}

@Transactional
public void updateUserInfo(Long userId, UserInfoUpdateRequestDto dto) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new ApplicationException(UserErrorCase.USER_NOT_FOUND));

if (dto.getNickname() != null) {
user.setNickname(dto.getNickname());
}

// 생년월일 수정
if (dto.getBirthDate() != null) {
try {
user.setBirthDate(LocalDate.parse(dto.getBirthDate()));
} catch (DateTimeParseException e) {
throw new ApplicationException(UserErrorCase.INVALID_BIRTH_DATE);
}
}

// 성별 수정
if (dto.getGender() != null) {
user.setGender(dto.getGender());
}

// 유저 타입 수정
if (dto.getUserType() != null) {
user.setUserType(dto.getUserType());
}

UserType finalUserType = dto.getUserType() != null ? dto.getUserType() : user.getUserType();
if (finalUserType == UserType.DISABLED) {
if (dto.getDisabilityType() != null) {
user.setDisabilityType(dto.getDisabilityType());
}
if (dto.getMobilityAid() != null) {
user.setMobilityAid(dto.getMobilityAid());
}
} else if (dto.getUserType() != null) {
// userType이 DISABLED가 아닌 값으로 변경된 경우에만 null로 설정
user.setDisabilityType(null);
user.setMobilityAid(null);
}

userRepository.save(user);
}
}