우선 사이트의 가장 기본이 되는 기능인 회원 기능을 만들어보려고 한다
내가 생각한 회원 관련 기능은 아래와 같다
우선 기본적인 틀만 구현해놓고 그 뒤에 자세한 기능을 추가로 구현하고자 함
1. 가입
2. 로그인
3. 정보 수정(비밀번호 변경, 비밀번호 초기화, 그외정보 수정)
4. 정보 불러오기
5. 탈퇴
그 외 부수적인 기능으로 아이디/닉네임 중복체크
@lombok.Getter @lombok.Setter public class User { private Long memSeqno; private String memberId; private String password; private String name; private String email; private String countryCode; private String phone; private int roleNo; private int statusNo; private LocalDateTime createdAt; private LocalDateTime updatedAt; }
아래 request dto는 각 api 필수값의 NotBlack 어노테이션을 포함한다
@Mapper
public interface UserMapper {
void signupUser(SignupRequest request);
User loginUser(LoginRequest request);
int isIdDuplicate(String memberId);
int isNicknameDuplicate(String nickname);
void resetPassword(ResetPasswordRequest request);
void changePassword(ChangePasswordRequest request);
User getUserInfo(String memberId);
User updateUserInfo(String memberId, UpdateMyInfoRequest request);
void withdrawUser(String memberId);
}
상세한 기능 구현(ServiceImpl)은 후에 포스팅하기로 하고, 우선 Service만 ..
public interface UserService {
void sinupUser(SignupRequest request);
LoginResponse loginUser(LoginRequest request);
DuplicateCheckResponse isIdDuplicate(String memberId);
DuplicateCheckResponse isNicknameDuplicate(String nickname);
void resetPassword(ResetPasswordRequest request);
void changePassword(ChangePasswordRequest request);
UserInfoResponse getUserInfo(String memberId);
UserInfoResponse updateUserInfo(String memberId, UpdateMyInfoRequest request);
void withdrawUser(String memberId);
}
상단에 정의해놓은 기능들을 우선 형태만 구현해놓는다
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
@Autowired
private final UserServiceImpl uSer;
@PostMapping("")
public CommonResponse<Void> signup(@RequestBody SignupRequest request) {
uSer.sinupUser(request);
return CommonResponse.success();
}
@PostMapping("/login")
public CommonResponse<LoginResponse> login(@RequestBody LoginRequest request) {
uSer.loginUser(request);
return CommonResponse.success(uSer.loginUser(request));
}
@PostMapping("/check-id")
public CommonResponse<DuplicateCheckResponse> checkIdCuplicate(@RequestParam String memberId) {
return CommonResponse.success(uSer.isIdDuplicate(memberId));
}
@PostMapping("/check-nickname")
public CommonResponse<DuplicateCheckResponse> checkNicknameDuplicate(@RequestParam String nickname) {
return CommonResponse.success(uSer.isNicknameDuplicate(nickname));
}
@PostMapping("/reset-password")
public CommonResponse<Void> resetPassword(@RequestBody ResetPasswordRequest request) {
uSer.resetPassword(request);
return CommonResponse.success();
}
@PostMapping("/password")
public CommonResponse<Void> changePassword(@RequestBody ChangePasswordRequest request) {
uSer.changePassword(request);
return CommonResponse.success();
}
@PostMapping("/me")
public CommonResponse<UserInfoResponse> getMyInfo(@PathVariable String memberId) {
return CommonResponse.success(uSer.getUserInfo(memberId));
}
@PutMapping("/me")
public CommonResponse<UserInfoResponse> updateMyInfo(@PathVariable String memberId,
@RequestBody UpdateMyInfoRequest request) {
return CommonResponse.success(uSer.updateUserInfo(memberId, request));
}
@DeleteMapping("/me")
public CommonResponse<Void> withdraw(@PathVariable String memberId) {
uSer.withdrawUser(memberId);
return CommonResponse.success();
}
}
다음 포스팅부터 각 기능별 상세 구현을 진행할 예정...