diff --git a/src/main/java/hyu/erica/capstone/domain/User.java b/src/main/java/hyu/erica/capstone/domain/User.java index 66cd440..8db3a2e 100644 --- a/src/main/java/hyu/erica/capstone/domain/User.java +++ b/src/main/java/hyu/erica/capstone/domain/User.java @@ -50,6 +50,15 @@ public class User extends BaseEntity { private String phoneNumber; + // 약관 + private boolean termsOfService; + + // 개인 정보 동의 + private boolean privacyPolicy; + + // 마케팅 수신 동의 + private boolean marketingAgreement; + @Enumerated(value = STRING) private ThirdPartyLogin thirdPartyLogin; diff --git a/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java b/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java index 9445c60..c1eec78 100644 --- a/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java +++ b/src/main/java/hyu/erica/capstone/service/user/UserCommandService.java @@ -10,6 +10,8 @@ public interface UserCommandService { String signIn(SignInRequestDTO request); + boolean checkEmail(String email); + void updateInfo(Long userId, UpdateInfoRequestDTO request); void reissueToken(String refreshToken); diff --git a/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java b/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java index 7d3e240..a011e06 100644 --- a/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java +++ b/src/main/java/hyu/erica/capstone/service/user/impl/UserCommandServiceImpl.java @@ -35,6 +35,10 @@ public Long signUp(SignUpRequestDTO request) { .password(request.password()) .birthday(request.birthDate()) .phoneService(request.phoneService()) + .phoneNumber(request.phoneNumber()) + .termsOfService(request.termsOfService()) + .privacyPolicy(request.privacyPolicy()) + .marketingAgreement(request.marketingAgreement()) .build(); User save = userRepository.save(user); @@ -55,6 +59,11 @@ public String signIn(SignInRequestDTO request) { } } + @Override + public boolean checkEmail(String email) { + return userRepository.existsByEmail(email); + } + @Override public void updateInfo(Long userId, UpdateInfoRequestDTO request) { User user = userRepository.findById(userId).orElseThrow(() -> new GeneralException(ErrorStatus._USER_NOT_FOUND)); diff --git a/src/main/java/hyu/erica/capstone/web/controller/UserController.java b/src/main/java/hyu/erica/capstone/web/controller/UserController.java index 0c47f9c..d026761 100644 --- a/src/main/java/hyu/erica/capstone/web/controller/UserController.java +++ b/src/main/java/hyu/erica/capstone/web/controller/UserController.java @@ -9,6 +9,7 @@ import hyu.erica.capstone.web.dto.user.request.UpdateInfoRequestDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; @@ -28,7 +29,7 @@ public class UserController { private final UserCommandService userCommandService; // 회원 가입 - @Operation(summary = "회원 가입", description = """ + @Operation(summary = "[회원 가입]", description = """ ### 회원 가입을 진행합니다. ### Request Body @@ -38,33 +39,48 @@ public class UserController { - phoneNumber: 전화번호 - birthDate: 생년월일 - phoneService: 통신사 + - termsOfService: 서비스 이용 약관 동의 여부 + - privacyPolicy: 개인정보 처리 방침 동의 여부 + - marketingAgreement: 마케팅 정보 수신 동의 여부 + """) @PostMapping("/sign-up") public ApiResponse signUp( - @RequestBody SignUpRequestDTO request - ) { + @RequestBody SignUpRequestDTO request) { return ApiResponse.onSuccess(SuccessStatus._OK, userCommandService.signUp(request)); } + @Operation(summary = "[이메일 중복 확인]", description = """ + ### 이메일 중복을 확인합니다. + + ### Request Body + - email: 이메일 + """) + @PostMapping("/check-email") + public ApiResponse checkEmail(@RequestBody String email) { + return ApiResponse.onSuccess(SuccessStatus._OK, userCommandService.checkEmail(email)); + } + // 로그인 - @Operation(summary = "로그인", description = """ - ### 로그인을 진행합니다. + @Operation(summary = "[로그인]", description = """ + ### 로그인을 진행합니다. 로그인 성공 시 access-token을 헤더에 포함하여 반환합니다. ### Request Body - email: 이메일 - password: 비밀번호 """) @PostMapping("/login") - public ApiResponse login(@RequestBody SignInRequestDTO request) { - return ApiResponse.onSuccess(SuccessStatus._OK, userCommandService.signIn(request)); + public ApiResponse login(@RequestBody SignInRequestDTO request, HttpServletResponse response) { + response.setHeader("Authorization", userCommandService.signIn(request)); + return ApiResponse.onSuccess(SuccessStatus._OK); } // 토큰 재발급 - @Operation(summary = "토큰 재발급", description = """ + @Operation(summary = "[토큰 재발급]", description = """ ### 토큰을 재발급합니다. refresh-token을 이용하여 access-token을 재발급합니다. ### Request Header - - Authorization: Bearer {refresh-token} + - RefreshToken: {refresh-token} """) @PostMapping("/reissue-token") public ApiResponse reissueToken() { @@ -73,7 +89,7 @@ public ApiResponse reissueToken() { // 마이페이지 - @Operation(summary = "마이페이지", description = """ + @Operation(summary = "[마이 페이지]", description = """ ### 마이페이지를 조회합니다. """) @GetMapping("/my-page") @@ -83,7 +99,7 @@ public ApiResponse myPage() { // 프로필 수정 - @Operation(summary = "프로필 수정", description = """ + @Operation(summary = "[프로필 수정]", description = """ ### 프로필을 수정합니다. ### Request Body @@ -91,21 +107,11 @@ public ApiResponse myPage() { - profileImage: 프로필 이미지 - phoneNumber: 전화번호 """) - @PostMapping("/edit-profile") + @PostMapping("/edit") public ApiResponse editProfile( - @RequestBody UpdateInfoRequestDTO request - ) { - userCommandService.updateInfo(1L, request); + @RequestBody UpdateInfoRequestDTO request) { + userCommandService.updateInfo(SecurityUtils.getCurrentUserId(), request); return ApiResponse.onSuccess(SuccessStatus._OK); } - -// // 로그아웃 -// @Operation(summary = "로그아웃", description = """ -// ### 로그아웃을 진행합니다. -// """) -// @PostMapping("/logout") -// public ApiResponse logout() { -// return null; -// } } diff --git a/src/main/java/hyu/erica/capstone/web/dto/user/request/SignUpRequestDTO.java b/src/main/java/hyu/erica/capstone/web/dto/user/request/SignUpRequestDTO.java index 5952ff4..467983d 100644 --- a/src/main/java/hyu/erica/capstone/web/dto/user/request/SignUpRequestDTO.java +++ b/src/main/java/hyu/erica/capstone/web/dto/user/request/SignUpRequestDTO.java @@ -4,6 +4,6 @@ import java.time.LocalDate; public record SignUpRequestDTO (String email, String password, String name, String phoneNumber, LocalDate birthDate, - PhoneService phoneService) { + PhoneService phoneService, boolean termsOfService, boolean privacyPolicy, boolean marketingAgreement) { }