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 @@ -16,46 +16,49 @@
import io.swagger.v3.oas.annotations.Operation;
import jakarta.mail.MessagingException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/v1")
public class MemberController {

private final MemberService memberService;
private final JwtTokenProvider jwtTokenProvider;

@Operation(summary = "회원가입 API", description = "이메일, 로그인 타입, 비밀번호, 닉네임을 저장해 회원가입하는 API")
@PostMapping("/api/v1/register/general")
public ApiResponse<Void> register(@RequestBody RegisterDto registerDto) {
@PostMapping("/register/general")
public ApiResponse<Void> register(@Valid @RequestBody RegisterDto registerDto) {
memberService.register(registerDto);
return ApiResponse.onSuccess(null);
}

@Operation(summary = "회원가입 API", description = "이메일, 로그인 타입, 비밀번호, 닉네임을 저장해 회원가입하는 API")
@PostMapping("/api/v1/register/social")
public ApiResponse<Void> registerSocial(@RequestBody SocialRegisterDto socialRegisterDto) {
@PostMapping("/register/social")
public ApiResponse<Void> registerSocial(@Valid @RequestBody SocialRegisterDto socialRegisterDto) {
memberService.register(socialRegisterDto);
return ApiResponse.onSuccess(null);
}

@Operation(summary = "이메일 중복체크 API", description = "이메일이 이미 가입되어 있는지 조회하는 API")
@GetMapping("/api/v1/register/general/check")
@GetMapping("/register/general/check")
public ApiResponse<EmailValidationResponseDto> checkRegister(@RequestParam String email) {
EmailValidationResponseDto emailValidationResponseDto = memberService.validateDuplicate(email);
return ApiResponse.onSuccess(emailValidationResponseDto);
}

@Operation(summary = "일반 로그인 API", description = "이메일, 비밀번호를 입력하여 토큰을 생성하는 API")
@PostMapping("/api/v1/login/general")
@PostMapping("/login/general")
public ApiResponse<LoginResponseDto> login(@RequestBody LoginRequestDto loginDto) {
String email = loginDto.getEmail();
String password = loginDto.getPassword();
Expand All @@ -64,15 +67,15 @@ public ApiResponse<LoginResponseDto> login(@RequestBody LoginRequestDto loginDto
}

@Operation(summary = "로그아웃 API", description = "리프레시토큰을 파괴하는 API")
@DeleteMapping("/api/v1/logout")
@DeleteMapping("/logout")
public ApiResponse<Void> logout(HttpServletRequest request) {
String token = jwtTokenProvider.resolveToken(request).getAccessToken();
memberService.logout(token);
return ApiResponse.onSuccess(null);
}

@Operation(summary = "토큰 재발급 API", description = "리프레시토큰과 액세스 토큰을 재발급하는 API")
@GetMapping("/api/v1/reissue")
@GetMapping("/reissue")
public ApiResponse<JwtTokenDto> reissue(HttpServletRequest request) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
String email = jwtTokenProvider.getEmail(token.getRefreshToken());
Expand All @@ -81,15 +84,15 @@ public ApiResponse<JwtTokenDto> reissue(HttpServletRequest request) {
}

@Operation(summary = "비밀번호 재발송 API", description = "비밃번호를 재생성해서 유저에게 메일 발송하는 API")
@PatchMapping("/api/v1/login/temp-pw")
@PatchMapping("/login/temp-pw")
public ApiResponse<Void> tempPw(@RequestBody PasswordReissueDto passwordReissueDto)
throws MessagingException {
memberService.tempPw(passwordReissueDto.getEmail());
return ApiResponse.onSuccess(null);
}

@Operation(summary = "메인화면 API", description = "닉네임, 비행기 유무, 편지 알림여부를 보내는 API")
@GetMapping("/api/v1/main")
@GetMapping("/main")
public ApiResponse<MainDto> main(HttpServletRequest request) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
String email = jwtTokenProvider.getEmail(token.getAccessToken());
Expand All @@ -98,7 +101,7 @@ public ApiResponse<MainDto> main(HttpServletRequest request) {
}

@Operation(summary = "새 편지 알림 끄기 API", description = "새 편지 알림을 끄는 API")
@PatchMapping("/api/v1/main/update-mail-alert")
@PatchMapping("/main/update-mail-alert")
public ApiResponse<Void> turnOffMailAlert(HttpServletRequest request, @RequestBody String mailAlert) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
String email = jwtTokenProvider.getEmail(token.getAccessToken());
Expand All @@ -107,7 +110,7 @@ public ApiResponse<Void> turnOffMailAlert(HttpServletRequest request, @RequestBo
}

@Operation(summary = "닉네임 변경 API", description = "닉네임을 변경하는 API")
@PatchMapping("/api/v1/setting/nickname")
@PatchMapping("/setting/nickname")
public ApiResponse<Void> changeNickname(HttpServletRequest request, @RequestBody
NicknameChangeDto nicknameChangeDto) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
Expand All @@ -117,7 +120,7 @@ public ApiResponse<Void> changeNickname(HttpServletRequest request, @RequestBody
}

@Operation(summary = "비밀번호 변경 API", description = "비밀번호를 변경하는 API")
@PatchMapping("/api/v1/setting/password")
@PatchMapping("/setting/password")
public ApiResponse<Void> changePassword(HttpServletRequest request, @RequestBody
PasswordChangeDto passwordChangeDto) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
Expand All @@ -127,7 +130,7 @@ public ApiResponse<Void> changePassword(HttpServletRequest request, @RequestBody
}

@Operation(summary = "회원 탈퇴 API", description = "상태를 비활성화로 바꾸고 날짜를 저장하는 API")
@PatchMapping("/api/v1/setting/delete-account")
@PatchMapping("/setting/delete-account")
public ApiResponse<Void> deleteAccount(HttpServletRequest request) {
JwtTokenDto token = jwtTokenProvider.resolveToken(request);
String email = jwtTokenProvider.getEmail(token.getAccessToken());
Expand Down
27 changes: 20 additions & 7 deletions src/main/java/com/simter/domain/member/dto/MemberRequestDto.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.simter.domain.member.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -14,13 +17,17 @@ public class MemberRequestDto {
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class RegisterDto {
@NotNull
@NotBlank(message = "이메일은 필수 항목입니다.")
@Email(message = "유효한 이메일 주소를 입력해주세요.")
private String email;

@NotNull
@NotBlank(message = "비밀번호는 필수 항목입니다.")
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]).{8,16}$",
message = "비밀번호는 영문자, 숫자, 특수문자를 포함하여 8~16자로 입력해주세요.")
private String password;

@NotNull
@NotBlank(message = "닉네임은 필수 항목입니다.")
@Pattern(regexp = "^[가-힣a-zA-Z]{1,10}$", message = "닉네임은 한글과 영문자만 사용하여 1~10자로 입력해주세요.")
private String nickname;

@NotNull
Expand All @@ -32,10 +39,10 @@ public static class RegisterDto {
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class SocialRegisterDto {
@NotNull
private String email;

@NotNull
@NotBlank(message = "닉네임은 필수 항목입니다.")
@Pattern(regexp = "^[가-힣a-zA-Z]{1,10}$", message = "닉네임은 한글과 영문자만 사용하여 1~10자로 입력해주세요.")
private String nickname;

@NotNull
Expand Down Expand Up @@ -70,7 +77,9 @@ public static class LoginRequestDto {
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class NicknameChangeDto {
@NotNull String nickname;
@NotBlank(message = "닉네임은 필수 항목입니다.")
@Pattern(regexp = "^[가-힣a-zA-Z]{1,10}$", message = "닉네임은 한글과 영문자만 사용하여 1~10자로 입력해주세요.")
String nickname;
}

@Builder
Expand All @@ -79,7 +88,11 @@ public static class NicknameChangeDto {
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class PasswordChangeDto {
@NotNull String oldPassword;
@NotNull String newPassword;

@NotBlank(message = "비밀번호는 필수 항목입니다.")
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]).{8,16}$",
message = "비밀번호는 영문자, 숫자, 특수문자를 포함하여 8~16자로 입력해주세요.")
String newPassword;
}

@Builder
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/simter/domain/member/entity/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.util.Collection;
import java.util.List;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;

import java.time.LocalDateTime;
import org.springframework.security.core.GrantedAuthority;
Expand Down Expand Up @@ -114,8 +113,8 @@ public void setNickname(String nickname) {
this.nickname = nickname;
}

public void changeStatusToInactive() {
this.status = false;
public void changeStatus() {
this.status = !this.status;
}

public void setInactiveDate(LocalDateTime inactiveDate) {
Expand All @@ -125,4 +124,6 @@ public void setInactiveDate(LocalDateTime inactiveDate) {
public void setChatbot(String chatbot) {
this.chatbot = chatbot;
}

public void setLoginType(String loginType) {this.loginType = loginType;}
}
Loading
Loading