-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8 from CHUCA-PROJECT/feat/6
feat(#6) : 회원가입, 로그인 및 토큰 처리
- Loading branch information
Showing
58 changed files
with
2,275 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,3 +35,5 @@ out/ | |
|
||
### VS Code ### | ||
.vscode/ | ||
|
||
src/main/resources/application-prod.yml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
...-service/src/main/java/com/chuca/memberservice/domain/member/constant/MemberProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.chuca.memberservice.domain.member.constant; | ||
|
||
public enum MemberProvider { | ||
APP, KAKAO, GOOGLE, NAVER | ||
} |
41 changes: 41 additions & 0 deletions
41
...vice/src/main/java/com/chuca/memberservice/domain/member/controller/MemberController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package com.chuca.memberservice.domain.member.controller; | ||
|
||
import com.chuca.memberservice.domain.member.dto.CheckDto; | ||
import com.chuca.memberservice.domain.member.dto.LoginDto; | ||
import com.chuca.memberservice.domain.member.dto.OAuthLoginDto; | ||
import com.chuca.memberservice.domain.member.dto.SignUpDto; | ||
import com.chuca.memberservice.domain.member.service.MemberService; | ||
import com.chuca.memberservice.global.response.BaseResponse; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("/member") | ||
public class MemberController { | ||
|
||
private final MemberService memberService; | ||
|
||
// 휴대전화 인증 | ||
|
||
|
||
// 아이디 중복 확인 | ||
@GetMapping("/check-id") | ||
public ResponseEntity<BaseResponse<CheckDto.Response>> checkId(@RequestBody @Validated CheckDto.idRequest request) { | ||
return ResponseEntity.ok(BaseResponse.create(memberService.checkId(request.getGeneralId()))); | ||
} | ||
|
||
// 일반 회원가입 | ||
@PostMapping("/signup") | ||
public ResponseEntity<BaseResponse<SignUpDto.Response>> signup(@RequestBody @Validated SignUpDto.Request request) { // 추후에 이미지도 처리 해야함 | ||
return ResponseEntity.ok(BaseResponse.create(memberService.signup(request))); | ||
} | ||
|
||
// 일반 로그인 | ||
@PostMapping("/login") | ||
public ResponseEntity<BaseResponse<LoginDto.Response>> login(@RequestBody @Validated LoginDto.Request request) { | ||
return ResponseEntity.ok(BaseResponse.create(memberService.login(request))); | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
...rvice/src/main/java/com/chuca/memberservice/domain/member/controller/OAuthController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
//package com.chuca.memberservice.domain.member.controller; | ||
// | ||
//import com.chuca.memberservice.domain.member.dto.OAuthLoginDto; | ||
//import com.chuca.memberservice.domain.member.service.oauth.KakaoOauthService; | ||
//import com.chuca.memberservice.domain.member.service.oauth.NaverOauthService; | ||
//import com.chuca.memberservice.global.response.BaseResponse; | ||
//import com.fasterxml.jackson.core.JsonProcessingException; | ||
//import lombok.RequiredArgsConstructor; | ||
//import org.springframework.http.ResponseEntity; | ||
//import org.springframework.web.bind.annotation.*; | ||
// | ||
//import java.io.IOException; | ||
// | ||
//@RestController | ||
//@RequestMapping("/oauth") | ||
//@RequiredArgsConstructor | ||
//public class OAuthController { | ||
// | ||
// private final NaverOauthService naverOauthService; | ||
// private final KakaoOauthService kakaoOauthService; | ||
// | ||
// // 1. 네이버 로그인 (사용자 로그인 페이지 제공 단계) | ||
// @GetMapping("/{socialType}") | ||
// public void naverLogin(@PathVariable("socialType") String provider) throws IOException { | ||
// naverOauthService.request(); | ||
// } | ||
// | ||
// // 2. 네이버 로그인 (사용자 정보 받기) | ||
// @GetMapping("/{socialType}/callback") | ||
// public ResponseEntity<BaseResponse<OAuthLoginDto.Response>> callback( | ||
// @PathVariable("socialType") String provider, | ||
// @RequestParam String code, | ||
// @RequestParam String state) throws JsonProcessingException { | ||
// return ResponseEntity.ok(BaseResponse.create(naverOauthService.login(code, state))); | ||
// } | ||
// | ||
// // 3. 카카오 로그인 및 회원가입 (기획 로직 수정 중이라 추후에 약관 관련한 처리해야하고, 사업자 정보 발급하면 전화번호도 받아오기) | ||
// @PostMapping("/{socialType}") | ||
// public ResponseEntity<BaseResponse<OAuthLoginDto.Response>> kakaoLogin(@PathVariable("socialType") String provider, @RequestBody OAuthLoginDto.Request request) { | ||
// return ResponseEntity.ok(BaseResponse.create(kakaoOauthService.kakaoLogin(request))); | ||
// } | ||
//} |
17 changes: 17 additions & 0 deletions
17
...ervice/src/main/java/com/chuca/memberservice/domain/member/controller/TestController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.chuca.memberservice.domain.member.controller; | ||
|
||
import com.chuca.memberservice.domain.member.entity.Member; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@Slf4j | ||
@RestController | ||
public class TestController { | ||
|
||
@GetMapping("/test") | ||
public String test() { | ||
return "Hello, World!"; | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
member-service/src/main/java/com/chuca/memberservice/domain/member/dto/CheckDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package com.chuca.memberservice.domain.member.dto; | ||
|
||
import jakarta.validation.constraints.NotEmpty; | ||
import jakarta.validation.constraints.Pattern; | ||
import lombok.*; | ||
|
||
public class CheckDto { | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class idRequest { | ||
@NotEmpty | ||
private String generalId; | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Response { | ||
private boolean check; | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class nicknameRequest { | ||
@NotEmpty | ||
private String nickname; | ||
} | ||
|
||
} |
29 changes: 29 additions & 0 deletions
29
member-service/src/main/java/com/chuca/memberservice/domain/member/dto/LoginDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.chuca.memberservice.domain.member.dto; | ||
|
||
import jakarta.validation.constraints.NotEmpty; | ||
import jakarta.validation.constraints.Pattern; | ||
import lombok.*; | ||
|
||
public class LoginDto { | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Request { | ||
@NotEmpty | ||
private String generalId; | ||
|
||
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,20}$", message = "비밀번호는 8자 이상 대문자, 소문자, 숫자, 특수문자 등 3가지 이상을 사용해 주세요.") | ||
private String password; | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Response { | ||
private String accessToken; | ||
private String refreshToken; | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
member-service/src/main/java/com/chuca/memberservice/domain/member/dto/OAuthLoginDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.chuca.memberservice.domain.member.dto; | ||
|
||
import lombok.*; | ||
|
||
public class OAuthLoginDto { | ||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Request { | ||
private String email; | ||
private String nickname; | ||
private String profileImage; | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Response { | ||
private String accessToken; | ||
private String refreshToken; | ||
} | ||
} |
4 changes: 4 additions & 0 deletions
4
member-service/src/main/java/com/chuca/memberservice/domain/member/dto/PhoneDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
package com.chuca.memberservice.domain.member.dto; | ||
|
||
public class PhoneDto { | ||
} |
46 changes: 46 additions & 0 deletions
46
member-service/src/main/java/com/chuca/memberservice/domain/member/dto/SignUpDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package com.chuca.memberservice.domain.member.dto; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.validation.constraints.NotEmpty; | ||
import jakarta.validation.constraints.NotNull; | ||
import jakarta.validation.constraints.Pattern; | ||
import lombok.*; | ||
|
||
public class SignUpDto { | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Request { | ||
@NotEmpty | ||
private String generalId; | ||
|
||
@NotEmpty | ||
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,20}$", message = "비밀번호는 8자 이상 대문자, 소문자, 숫자, 특수문자 등 3가지 이상을 사용해 주세요.") | ||
private String password; | ||
|
||
@NotEmpty | ||
private String phone; | ||
|
||
@NotNull | ||
private boolean locTos; // 위치 기반 서비스 이용약관 동의 여부 | ||
|
||
@NotNull | ||
private boolean adTos; // 광고성 정보 수신 동의 여부 | ||
|
||
@NotEmpty | ||
private String nickname; | ||
|
||
private String profileImage; // 추후에 이미지 관련 처리해야함 | ||
} | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
@Builder | ||
public static class Response { | ||
private String accessToken; | ||
private String refreshToken; | ||
} | ||
} |
115 changes: 115 additions & 0 deletions
115
member-service/src/main/java/com/chuca/memberservice/domain/member/entity/Member.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
package com.chuca.memberservice.domain.member.entity; | ||
|
||
import com.chuca.memberservice.domain.member.constant.MemberProvider; | ||
import com.chuca.memberservice.global.entity.BaseTime; | ||
import io.hypersistence.utils.hibernate.type.json.JsonType; | ||
import jakarta.persistence.*; | ||
import lombok.*; | ||
import org.hibernate.annotations.ColumnDefault; | ||
import org.hibernate.annotations.DynamicInsert; | ||
import org.hibernate.annotations.DynamicUpdate; | ||
import org.hibernate.annotations.Type; | ||
import org.springframework.security.core.GrantedAuthority; | ||
import org.springframework.security.core.userdetails.UserDetails; | ||
|
||
import java.util.Collection; | ||
import java.util.HashMap; | ||
import java.util.LinkedHashMap; | ||
import java.util.Map; | ||
|
||
@Getter | ||
@AllArgsConstructor | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@DynamicInsert | ||
@DynamicUpdate | ||
@Entity | ||
@Table(name = "member") | ||
public class Member extends BaseTime implements UserDetails { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
@Column(name = "memberId") | ||
private Long id; | ||
|
||
// 일반 로그인 시 필요한 아이디 (일반 로그인에만 사용) | ||
@Column(nullable = true, unique = true) | ||
private String generalId; | ||
|
||
@Column(unique = true) | ||
private String email; // 이메일 (소셜 로그인에만 사용) | ||
|
||
@Column(unique = true) | ||
private String password; | ||
|
||
@Enumerated(EnumType.STRING) | ||
@ColumnDefault("'APP'") | ||
private MemberProvider provider; | ||
|
||
private String phone; | ||
|
||
@Column(nullable = false) | ||
private boolean locTos; // 위치 기반 서비스 이용약관 동의 여부 | ||
|
||
@Column(nullable = false) | ||
private boolean adTos; // 광고성 정보 수신 동의 여부 | ||
|
||
@Column(nullable = false, unique = true) | ||
private String nickname; | ||
|
||
private String profileImage; // 프로필 이미지 | ||
|
||
@Column(nullable = false) | ||
@ColumnDefault("'active'") | ||
private String status; | ||
|
||
@Type(JsonType.class) | ||
@Column(name = "alarms", columnDefinition = "longtext") | ||
private Map<String, Object> alarms = new LinkedHashMap<>(); // 알림 설정 (관심 키워드, 관심 카페, 연락, 야간 푸시 알림)\ | ||
|
||
// 소셜 로그인 시 활용 | ||
@Builder | ||
public Member(String email, MemberProvider provider, String phone, String nickname, String profileImage) { | ||
Map<String, Object> settings = new LinkedHashMap<>(); | ||
settings.put("option1", true); // 관심 키워드 | ||
settings.put("option2", true); // 관심 카페 | ||
settings.put("option3", true); // 연락 | ||
settings.put("option4", true); // 야간 푸시 알림 | ||
|
||
this.email = email; | ||
this.provider = provider; | ||
this.phone = phone; | ||
this.nickname = nickname; | ||
this.profileImage = profileImage != null ? profileImage : ""; | ||
this.locTos = false; | ||
this.adTos = false; | ||
this.alarms = settings; | ||
} | ||
|
||
// 일반 로그인 시 활용 | ||
public Member(String gerneralId, String password, String phone, boolean locTos, boolean adTos, String nickname, String profileImage) { | ||
Map<String, Object> settings = new LinkedHashMap<>(); | ||
settings.put("option1", true); // 관심 키워드 | ||
settings.put("option2", true); // 관심 카페 | ||
settings.put("option3", true); // 연락 | ||
settings.put("option4", true); // 야간 푸시 알림 | ||
|
||
this.generalId = gerneralId; | ||
this.password = password; | ||
this.phone = phone; | ||
this.locTos = locTos; | ||
this.adTos = adTos; | ||
this.nickname = nickname; | ||
this.profileImage = profileImage != null ? profileImage : ""; | ||
this.alarms = settings; | ||
} | ||
|
||
@Override | ||
public Collection<? extends GrantedAuthority> getAuthorities() { | ||
return null; | ||
} | ||
|
||
@Override | ||
public String getUsername() { | ||
return null; | ||
} | ||
} |
Oops, something went wrong.