11package grep .neogulcoder .domain .users .controller ;
22
3- import grep .neogulcoder .domain .users .controller .dto .request .PasswordRequest ;
4- import grep .neogulcoder .domain .users .controller .dto .request .SignUpRequest ;
5- import grep .neogulcoder .domain .users .controller .dto .request .UpdatePasswordRequest ;
3+ import grep .neogulcoder .domain .users .controller .dto .request .*;
64import grep .neogulcoder .domain .users .controller .dto .response .AllUserResponse ;
75import grep .neogulcoder .domain .users .controller .dto .response .UserResponse ;
8- import grep .neogulcoder .domain .users .service .EmailVerificationService ;
6+ import grep .neogulcoder .domain .users .exception .PasswordNotMatchException ;
7+ import grep .neogulcoder .domain .users .exception .code .UserErrorCode ;
8+ import grep .neogulcoder .domain .users .service .MailService ;
99import grep .neogulcoder .domain .users .service .UserService ;
1010import grep .neogulcoder .global .auth .Principal ;
1111import grep .neogulcoder .global .response .ApiResponse ;
1212import jakarta .validation .Valid ;
13- import java .io .IOException ;
14- import java .util .List ;
1513import lombok .RequiredArgsConstructor ;
1614import org .springframework .http .HttpStatus ;
1715import org .springframework .http .MediaType ;
1816import org .springframework .http .ResponseEntity ;
1917import org .springframework .security .core .annotation .AuthenticationPrincipal ;
20- import org .springframework .web .bind .annotation .DeleteMapping ;
21- import org .springframework .web .bind .annotation .GetMapping ;
22- import org .springframework .web .bind .annotation .PathVariable ;
23- import org .springframework .web .bind .annotation .PostMapping ;
24- import org .springframework .web .bind .annotation .PutMapping ;
25- import org .springframework .web .bind .annotation .RequestBody ;
26- import org .springframework .web .bind .annotation .RequestMapping ;
27- import org .springframework .web .bind .annotation .RequestParam ;
28- import org .springframework .web .bind .annotation .ResponseStatus ;
29- import org .springframework .web .bind .annotation .RestController ;
18+ import org .springframework .web .bind .annotation .*;
3019import org .springframework .web .multipart .MultipartFile ;
3120
21+ import java .io .IOException ;
22+ import java .time .LocalDateTime ;
23+ import java .util .List ;
24+
3225@ RestController
3326@ RequiredArgsConstructor
3427@ RequestMapping ("/api/users" )
3528public class UserController implements UserSpecification {
3629
3730 private final UserService usersService ;
38- private final EmailVerificationService verificationService ;
31+ private final MailService mailService ;
3932
4033 @ GetMapping ("/me" )
41- public ResponseEntity <ApiResponse <UserResponse >> get (
42- @ AuthenticationPrincipal Principal principal ) {
34+ public ResponseEntity <ApiResponse <UserResponse >> get (@ AuthenticationPrincipal Principal principal ) {
4335 UserResponse userResponse = usersService .getUserResponse (principal .getUserId ());
4436 return ResponseEntity .ok (ApiResponse .success (userResponse ));
4537 }
@@ -58,52 +50,55 @@ public ResponseEntity<ApiResponse<List<AllUserResponse>>> getAll() {
5850
5951 @ PutMapping (value = "/update/profile" , consumes = MediaType .MULTIPART_FORM_DATA_VALUE )
6052 public ResponseEntity <ApiResponse <Void >> updateProfile (
61- @ AuthenticationPrincipal Principal principal ,
62- @ RequestParam (value = "nickname" , required = false ) String nickname ,
63- @ RequestParam (value = "profileImage" , required = false ) MultipartFile profileImage
53+ @ AuthenticationPrincipal Principal principal ,
54+ @ RequestParam (value = "nickname" , required = false ) String nickname ,
55+ @ RequestParam (value = "profileImage" , required = false ) MultipartFile profileImage
6456 ) throws IOException {
6557 usersService .updateProfile (principal .getUserId (), nickname , profileImage );
6658 return ResponseEntity .ok (ApiResponse .noContent ());
6759 }
6860
6961 @ PutMapping ("/update/password" )
70- public ResponseEntity <ApiResponse <Void >> updatePassword (
71- @ AuthenticationPrincipal Principal principal ,
72- @ Valid @ RequestBody UpdatePasswordRequest request ) {
62+ public ResponseEntity <ApiResponse <Void >> updatePassword (@ AuthenticationPrincipal Principal principal ,
63+ @ Valid @ RequestBody UpdatePasswordRequest request ) {
7364 usersService .updatePassword (principal .getUserId (), request .getPassword (),
74- request .getNewPassword (), request .getNewPasswordCheck ());
65+ request .getNewPassword (), request .getNewPasswordCheck ());
7566 return ResponseEntity .ok (ApiResponse .noContent ());
7667 }
7768
7869 @ DeleteMapping ("/delete/me" )
7970 public ResponseEntity <ApiResponse <Void >> delete (@ AuthenticationPrincipal Principal principal ,
80- @ RequestBody @ Valid PasswordRequest request ) {
71+ @ RequestBody @ Valid PasswordRequest request ) {
8172 usersService .deleteUser (principal .getUserId (), request .getPassword (), request .getPasswordCheck ());
8273 return ResponseEntity .ok (ApiResponse .noContent ());
8374 }
8475
8576 @ PostMapping ("/signup" )
8677 @ ResponseStatus (HttpStatus .CREATED )
8778 public ResponseEntity <ApiResponse <Void >> signUp (@ Valid @ RequestBody SignUpRequest request ) {
79+ if (isNotMatchPassword (request .getPassword (), request .getPasswordCheck ())) {
80+ throw new PasswordNotMatchException (UserErrorCode .PASSWORD_MISMATCH );
81+ }
82+
8883 usersService .signUp (request );
8984 return ResponseEntity .ok (ApiResponse .noContent ());
9085 }
9186
9287 @ PostMapping ("/mail/send" )
93- public ResponseEntity <ApiResponse <Void >> sendCode (@ RequestParam String email ) {
94- verificationService .sendVerificationEmail (email );
88+ public ResponseEntity <ApiResponse <Void >> sendCode (@ Valid @ RequestBody SendCodeToEmailRequest request ) {
89+ LocalDateTime currentDateTime = LocalDateTime .now ();
90+ mailService .sendCodeTo (request .getEmail (), currentDateTime );
9591 return ResponseEntity .ok (ApiResponse .noContent ());
9692 }
9793
9894 @ PostMapping ("/mail/verify" )
99- public ResponseEntity <ApiResponse <Void >> verifyCode (
100- @ RequestParam String email ,
101- @ RequestParam String code
102- ) {
103- boolean result = verificationService .verifyCode (email , code );
104- return result ?
105- ResponseEntity .ok (ApiResponse .noContent ()) :
106- ResponseEntity .ok (ApiResponse .badRequest ());
95+ public ResponseEntity <ApiResponse <Boolean >> verifyCode (@ Valid @ RequestBody EmailVerifyRequest request ) {
96+ LocalDateTime currentDateTime = LocalDateTime .now ();
97+ boolean verified = mailService .verifyEmailCode (request .getEmail (), currentDateTime );
98+ return ResponseEntity .ok (ApiResponse .success (verified ));
10799 }
108100
101+ private boolean isNotMatchPassword (String password , String passwordCheck ) {
102+ return !password .equals (passwordCheck );
103+ }
109104}
0 commit comments