Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[회원 가입] 회원가입 연관 비즈니스 로직 & API 구현(#8) #48

Merged
merged 146 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from 127 commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
d8cc31d
feat: 화살 보내기 요청 DTO 추가(#24)
Minjae-An Mar 9, 2024
9b49093
feat: 확살 송수신 내역 repository, 내역 확인 로직 추가(#24)
Minjae-An Mar 9, 2024
e953b85
feat: 화살 송수신 내역 존재 여부 확인 로직 추가(#24)
Minjae-An Mar 9, 2024
7a7b7c3
feat: 화살 송수신 내역 저장 기능 구현(#24)
Minjae-An Mar 9, 2024
d781de3
feat: 화살 관련 예외 enum 정의(#24)
Minjae-An Mar 9, 2024
8aad1e4
feat: 사용자 화살 감소 로직 추가(#24)
Minjae-An Mar 9, 2024
7dd07aa
refactor: 생성 시간 필드, 불필요한 업데이트 불가 DDL 속성 삭제(#24)
Minjae-An Mar 9, 2024
3a6137d
feat: 화살 보내기 비즈니스 로직 추가(#24)
Minjae-An Mar 9, 2024
9a4cae0
feat: 화살 보내기 API 구현(#24)
Minjae-An Mar 9, 2024
52995c4
refactor: 화살 command repository 삭제(#24)
Minjae-An Mar 9, 2024
a2c164d
refactor: 코드 정렬 수정(#24)
Minjae-An Mar 9, 2024
d6ce69e
Merge branch 'dev' into feat/#24-send-arrow
Minjae-An Mar 11, 2024
6c7ff1d
refactor: 사용자 화살 증감 메서드 이름 수정(#24)
Minjae-An Mar 11, 2024
01f3138
feat: 화살 관련 예외 enum 추가(#24)
Minjae-An Mar 11, 2024
95c99d8
refactor: 화살 내역 존재 여부 확인 메서드 이름 수정(#24)
Minjae-An Mar 11, 2024
672f7bb
refactor: 코드 배치 수정(#24)
Minjae-An Mar 11, 2024
f25c26f
refactor: 화살 보내기 API 파라미터 이름 수정(#24)
Minjae-An Mar 11, 2024
4d26a15
refactor: 컨벤션에 맞게 코드 배치 수정(#24)
Minjae-An Mar 11, 2024
7efedf9
feat: 이름 칼럼, 생성자 추가(#27)
Minjae-An Mar 11, 2024
d77dae4
feat: 상대 프로필 응답 DTO 수정(#27)
Minjae-An Mar 11, 2024
d0bbec9
feat: 사용자 엔티티 수정(#27)
Minjae-An Mar 11, 2024
fa4204d
feat: 상대 프로필 조회 비즈니스 로직 추가(#27)
Minjae-An Mar 11, 2024
87ec03e
feat: 상대 프로필 API 구현 및 코드 정렬(#27)
Minjae-An Mar 11, 2024
e6f7eb1
feat: 사용자 엔티티 수정(#27)
Minjae-An Mar 13, 2024
4aba46d
feat: 사용자 프로필 응답 DTO 수정(#27)
Minjae-An Mar 13, 2024
6cc2cb6
feat: 사용자 프로필 상세 응답 DTO 수정(#27)
Minjae-An Mar 13, 2024
1d75218
feat: 사용자 프로필 조회 비즈니스 로직 수정(#27)
Minjae-An Mar 13, 2024
4e54bfd
chore: spring mail 종속성 추가(#35)
Minjae-An Mar 13, 2024
ba20da8
chore: Gmail SMTP 사용을 위한 설정 추가(#35)
Minjae-An Mar 13, 2024
0d4b90f
feat: 이메일 기반 사용자 조회 로직 추가(#35)
Minjae-An Mar 13, 2024
78ac728
feat: 이메일 기반 사용자 조회 로직 추가(#35)
Minjae-An Mar 13, 2024
5bd4d1f
feat: 서비스 사용 정규식 enum 정의(#35)
Minjae-An Mar 13, 2024
bdc8259
feat: 임시 비밀번호 발급 기능 구현(#35)
Minjae-An Mar 13, 2024
f6e4e06
feat: 메일 관련 설정 정의(#35)
Minjae-An Mar 13, 2024
811198d
feat: 이메일 전송 로직 추가(#35)
Minjae-An Mar 13, 2024
25703a7
feat: 임시 비밀번호 발급 비즈니스 로직 추가(#35)
Minjae-An Mar 13, 2024
a798b4c
feat: 임시 비밃번호 발급 비즈니스 로직 트랜잭션 정의 추가(#35)
Minjae-An Mar 13, 2024
1bfde17
feat: 임시 비밀번호 발급 요청 DTO 수정(#35)
Minjae-An Mar 13, 2024
89c4db5
feat: 임시 비밀번호 발급 API 구현(#35)
Minjae-An Mar 13, 2024
7216f5d
Merge branch 'dev' into feat/#35-send-temporary-password
Minjae-An Mar 13, 2024
52373f1
Merge branch 'dev' into feat/#35-send-temporary-password
Minjae-An Mar 14, 2024
3cd825f
Merge branch 'dev' into feat/#35-send-temporary-password
Minjae-An Mar 14, 2024
50b9982
refactor: 병합에 따른 코드 재배치(#35)
Minjae-An Mar 14, 2024
45adb7a
refactor: 병합에 따른 코드 재배치(#35)
Minjae-An Mar 14, 2024
c8a4c13
chore: sms 서비스 sdk 의존성 추가(#28)
Minjae-An Mar 14, 2024
2a98c5d
chore: sms 서비스 관련 설정 추가(#28)
Minjae-An Mar 14, 2024
d7e4f63
feat: sms 서비스 이용을 위한 설정 정의(#28)
Minjae-An Mar 14, 2024
4e03b0b
feat: 인증 코드 생성 로직 추가(#28)
Minjae-An Mar 14, 2024
e4c64ae
feat: 문자 전송 로직 추가(#28)
Minjae-An Mar 14, 2024
f4b1867
feat: 전화번호 기반 사용자 존재 여부 확인 로직 정의(#28)
Minjae-An Mar 14, 2024
15ec97d
feat: 전화번호 기반 사용자 존재 여부 확인 로직 추가(#28)
Minjae-An Mar 14, 2024
a81a435
feat: 전화번호 형식 제약 조건 추가(#28)
Minjae-An Mar 14, 2024
8895e63
chore: application.yml 수정(#28)
Minjae-An Mar 15, 2024
cf77ed4
feat: 인증 코드 sms 전송 비즈니스 로직 추가(#28)
Minjae-An Mar 15, 2024
1db8b3e
feat: 전화번호 인증 코드 전송 API 구현(#28)
Minjae-An Mar 15, 2024
b032ffc
chore: spring data redis 의존성 추가(#28)
Minjae-An Mar 16, 2024
ccd2145
chore: redis 관련 설정 추가(#28)
Minjae-An Mar 16, 2024
d06aebc
feat: redis 관련 설정 정의(#28)
Minjae-An Mar 16, 2024
c96a456
feat: redis 키-값 저장,조회,삭제 로직 추가(#28)
Minjae-An Mar 16, 2024
4f6d001
feat: 인증 코드 sms 전송 비즈니스 로직 수정(#28)
Minjae-An Mar 16, 2024
7cdf64e
feat: 인증 코드 정규식 정의(#28)
Minjae-An Mar 16, 2024
ebc6598
feat: 아이디 찾기 예외 enum 정의(#28)
Minjae-An Mar 16, 2024
4fc18c7
feat: 전화번호 기반 사용자 조회 기능 정의(#28)
Minjae-An Mar 16, 2024
8b6e6c2
feat: 전화번호 기반 사용자 조회 로직 추가(#28)
Minjae-An Mar 16, 2024
263b1c7
refactor: 코드 정렬(#28)
Minjae-An Mar 16, 2024
1b8e780
feat: 아이디 찾기 요청 DTO 수정(#28)
Minjae-An Mar 16, 2024
f4193d8
feat: 아이디 찾기 비즈니스 로직 추가(#28)
Minjae-An Mar 16, 2024
d638475
feat: 아이디 찾기 API 구현(#28)
Minjae-An Mar 16, 2024
cbace66
feat: 전화번호 정규식 정의(#28)
Minjae-An Mar 16, 2024
46f54d1
feat: 회원가입 요청 DTO 수정(#8)
Minjae-An Mar 18, 2024
65175e2
Merge branch 'feat/#28-verification-code-to-phone' into feat/#8-join-api
Minjae-An Mar 18, 2024
c42075e
refactor: PasswordEncryptor 최상위 util 패키지로 이동(#8)
Minjae-An Mar 18, 2024
0b8cd06
refactor: 잘못된 들여쓰기 수정을 위해 코드 정렬(#8)
Minjae-An Mar 21, 2024
55c1124
feat: 이름 기반 동물상 조회 로직 정의(#8)
Minjae-An Mar 21, 2024
57acf27
feat: 이름 기반 닮은 동물상 조회 로직 구현(#8)
Minjae-An Mar 21, 2024
e7f4166
feat: 이름 기반 지역 조회 로직 정의(#8)
Minjae-An Mar 21, 2024
4aa4e3b
feat: 이름 기반 지역 조회 로직 구현(#8)
Minjae-An Mar 21, 2024
6830a5b
feat: 분류 기반 음역대 조회 로직 정의(#8)
Minjae-An Mar 21, 2024
aabb78b
feat: 분류 기반 음역대 조회 로직 구현(#8)
Minjae-An Mar 21, 2024
56a2f8d
feat: 사용자 선호 조건 repository 정의(#8)
Minjae-An Mar 21, 2024
0135d7b
feat: 사용자 선호 조건 엔티티 저장 로직 구현(#8)
Minjae-An Mar 21, 2024
babedea
feat: 사용자 선호조건 엔티티 구성(#8)
Minjae-An Mar 21, 2024
cfaa963
feat: 사용자 엔티티 저장 로직 구성(#8)
Minjae-An Mar 21, 2024
841ac4d
feat: 프로필 사진 repository 정의(#8)
Minjae-An Mar 21, 2024
11f8142
feat: 프로필 사진 엔티티 저장 로직 구성(#8)
Minjae-An Mar 21, 2024
9ada0ef
feat: 회원가입 관련 예외 enum 정의(#8)
Minjae-An Mar 21, 2024
c2758a1
refactor: 분류 기반 음역대 조회 로직 수정(#8)
Minjae-An Mar 21, 2024
a836b55
refactor: 이름 기반 닮은 동물상 조회 기능 수정(#8)
Minjae-An Mar 21, 2024
d72b3de
refactor: 이름 기반 지역 조회 로직 수정(#8)
Minjae-An Mar 21, 2024
4dc2a88
refactor: 잘못된 들여쓰기, 코드 정렬로 수정(#8)
Minjae-An Mar 21, 2024
38ad65b
refactor: 회원가입 요청 DTO 수정(#8)
Minjae-An Mar 21, 2024
0cdb653
feat: 회원가입 응답 DTO 구성(#8)
Minjae-An Mar 21, 2024
71c6087
feat: 성별 enum 구성(#8)
Minjae-An Mar 21, 2024
68d7de5
feat: 비밀번호 암호화시 사용되는 salt 생성 로직 구현(#8)
Minjae-An Mar 21, 2024
5cecb7d
refactor: 잘못된 들여쓰기 수정, 코드 정렬(#8)
Minjae-An Mar 21, 2024
db35a10
feat: 회원가입 관련 로직 추가(#8)
Minjae-An Mar 21, 2024
c032f59
feat: 회원가입 비즈니스 로직 초안 구성(#8)
Minjae-An Mar 21, 2024
03bf526
feat: 회원가입 API 초안 구현 및 코드 정렬(#8)
Minjae-An Mar 21, 2024
f5b9bd8
refactor: 분류 기반 음역대 조회 로직 이름 수정, 코드 정렬(#8)
Minjae-An Mar 22, 2024
0127f4b
feat: 프로필 사진 엔티티 저장 로직 수정(#8)
Minjae-An Mar 22, 2024
85181cc
feat: S3 이용 프로필 사진 업로드 로직 추가(#8)
Minjae-An Mar 22, 2024
449f442
feat: 프로필 사진 엔티티 저장 로직에 S3 업로드 로직 추가(#8)
Minjae-An Mar 22, 2024
3fbedcb
feat: 프로필 사진 컬렉션 필드 초기화 & 연관관계 설정 로직 추가(#8)
Minjae-An Mar 22, 2024
b8a1aa0
feat: 이미 사용 중인 닉네임, 이메일 확인 로직 정의(#8)
Minjae-An Mar 22, 2024
348aa8f
feat: 이미 사용 중인 닉네임, 이메일 확인 로직 추가(#8)
Minjae-An Mar 22, 2024
0a123bf
feat: 랜덤 salt 생성 로직 수정(#8)
Minjae-An Mar 22, 2024
eb97f42
feat: 이미 사용 중인 이메일/닉네임 예외 추가(#8)
Minjae-An Mar 22, 2024
d0531eb
feat: s3 업로드된 프로필 사진 삭제 로직 추가(#8)
Minjae-An Mar 22, 2024
cf87994
feat: 회원가입 관련 로직 수정(#8)
Minjae-An Mar 22, 2024
d59ab4a
feat: 프로필 사진 삭제 이벤트 정의(#8)
Minjae-An Mar 22, 2024
a7cc07d
feat: 프로필 사진 삭제 이벤트 리스너 정의(#8)
Minjae-An Mar 22, 2024
535343d
feat: 회원가입 로직 롤백시 업로드된 프로필 사진 삭제 이벤트 발행 로직 추가(#8)
Minjae-An Mar 22, 2024
05a9d25
chore: jjwt 의존성 추가(#8)
Minjae-An Mar 23, 2024
5de7d20
feat: access/refresh token 발급 및 검증 로직 추가(#8)
Minjae-An Mar 23, 2024
c94a7e4
feat: refresh token 필드 및 업데이트 로직 추가(#8)
Minjae-An Mar 23, 2024
afdaeef
feat: 회원가입 로직, access/refresh token 발급 로직 추가(#8)
Minjae-An Mar 23, 2024
3f2a04c
refactor: 잘못된 주석 들여쓰기 수정(#8)
Minjae-An Mar 27, 2024
c2f30c4
refactor: 문자열 값 Geneder enum 변환 메서드 이름 수정(#8)
Minjae-An Mar 27, 2024
f0173c4
refactor: 회원가입 비즈니스 로직 코드 정렬(#8)
Minjae-An Mar 27, 2024
5143d9d
refactor: Gender 문자열 값 변환 메서드 사용 위치 수정 및 코드 정렬(#8)
Minjae-An Mar 27, 2024
f90f944
feat: salt 길이 32바이트로 변경(#8)
Minjae-An Mar 27, 2024
4c1854d
Merge branch 'dev' into feat/#8-join-api
Minjae-An Mar 27, 2024
a477b66
refactor: 병합으로 코드 수정(#8)
Minjae-An Mar 27, 2024
19e6d68
feat: 임시 비밀번호 발급 로직에 비밀번호 암호화 로직 추가(#8)
Minjae-An Mar 27, 2024
cad76e7
refactor: 잘못된 들여쓰기 간격 수정(#8)
Minjae-An Mar 28, 2024
6e3618f
Merge branch 'dev' into feat/#8-join-api
Minjae-An Mar 31, 2024
7be7bf4
refactor: 병합으로 인한 코드 수정(#8)
Minjae-An Mar 31, 2024
fbd3cb8
refactor: 사용자 상세 프로필 응답 DTO 수정(#8)
Minjae-An Apr 1, 2024
52c3e5b
fix: 불필요한 업로드된 사진 삭제 로직 제거(#8)
Minjae-An Apr 1, 2024
85522be
refactor: jwt 생성 로직 수정(#8)
Minjae-An Apr 1, 2024
7e494e5
refactor: JWT 검증 예외, 일괄 처리하도록 로직 수정(#8)
Minjae-An Apr 1, 2024
d37ff58
refactor: 불필요한 트랜잭션 선언 제거(#8)
Minjae-An Apr 1, 2024
ecebd2c
feat: 유틸 기능 연관 예외 정의(#8)
Minjae-An Apr 1, 2024
9fa2ecb
refactor: 커스텀 예외 사용하도록 검증 로직 수정(#8)
Minjae-An Apr 1, 2024
87b8599
refactor: 커스텀 예외 사용토록 로직 수정(#8)
Minjae-An Apr 1, 2024
e5904ed
Merge branch 'dev' into feat/#8-join-api
Minjae-An Apr 3, 2024
dc212e9
feat: 인가 과정 제외 URL들 추가(#8)
Minjae-An Apr 3, 2024
a2c43a4
refactor: 이미 사용하는 전화번호 검증 메서드명 수정(#8)
Minjae-An Apr 3, 2024
bcde03e
feat: 이미 사용 중인 전화번호 검증 로직, 회원가입 로직에 추가(#8)
Minjae-An Apr 3, 2024
6bb7168
refactor: 병합과 메서드명 변경에 따른 수정(#8)
Minjae-An Apr 3, 2024
f08b17f
refactor: 병합에 따른 코드 수정(#8)
Minjae-An Apr 3, 2024
b8511ca
refactor: jwt 검증 로직 삭제 및 로직 리팩토링(#8)
Minjae-An Apr 4, 2024
6b485c4
refactor: EOL 추가, 코드 정렬(#8)
Minjae-An Apr 4, 2024
88d7032
refactor: 사용 중인 데이터 검증 로직 이름 수정(#8)
Minjae-An Apr 4, 2024
0f7a1b8
refactor: 메서드명 수정에 따른 사용 위치 수정(#8)
Minjae-An Apr 4, 2024
0153fc0
refactor: 메서드명 수정에 따른 사용 위치 수정(#8)
Minjae-An Apr 4, 2024
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
10 changes: 10 additions & 0 deletions be/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ dependencies {
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

// jwt
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'javax.xml.bind:jaxb-api:2.3.1'
implementation 'com.sun.xml.bind:jaxb-impl:2.3.3'
implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1'
}

tasks.named('bootBuildImage') {
Expand All @@ -58,3 +64,7 @@ tasks.named('bootBuildImage') {
tasks.named('test') {
useJUnitPlatform()
}

clean {
delete file('src/main/generated')
}
52 changes: 52 additions & 0 deletions be/src/main/java/yeonba/be/exception/JoinException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package yeonba.be.exception;

import org.springframework.http.HttpStatus;

public enum JoinException implements BaseException {

PASSWORD_CONFIRMATION_NOT_MATCH(
HttpStatus.BAD_REQUEST,
"비밀번호 확인 값이 비밀번호와 일치하지 않습니다."),

VOCAL_RANGE_NOT_FOUND(
HttpStatus.BAD_REQUEST,
"존재하지 않는 음역대입니다."),

ANIMAL_NOT_FOUND(
HttpStatus.BAD_REQUEST,
"존재하지 않는 동물상입니다."),

AREA_NOT_FOUND(
HttpStatus.BAD_REQUEST,
"존재하지 않는 지역입니다."),

ALREADY_USED_EMAIL(
HttpStatus.BAD_REQUEST,
"이미 사용 중인 이메일입니다."),

ALREADY_USED_NICKNAME(
HttpStatus.BAD_REQUEST,
"이미 사용 중인 닉네임입니다.");


private final HttpStatus httpStatus;
private final String reason;

JoinException(HttpStatus httpStatus, String reason) {

this.httpStatus = httpStatus;
this.reason = reason;
}

@Override
public HttpStatus getHttpStatus() {

return httpStatus;
}

@Override
public String getReason() {

return reason;
}
}
5 changes: 5 additions & 0 deletions be/src/main/java/yeonba/be/exception/LoginException.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ public enum LoginException implements BaseException {
HttpStatus.BAD_REQUEST,
"해당 인증 코드 내역이 존재하지 않습니다."),

VERIFICATION_CODE_NOT_MATCH(
HttpStatus.BAD_REQUEST,
"인증 코드가 일치하지 않습니다."),

EXPIRED_VERIFICATION_CODE(
HttpStatus.BAD_REQUEST,
"만료된 인증 코드입니다.");
Expand All @@ -16,6 +20,7 @@ public enum LoginException implements BaseException {
private final String reason;

LoginException(HttpStatus httpStatus, String reason) {

this.httpStatus = httpStatus;
this.reason = reason;
}
Expand Down
17 changes: 9 additions & 8 deletions be/src/main/java/yeonba/be/login/controller/LoginController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -20,6 +21,7 @@
import yeonba.be.login.dto.response.UserLoginResponse;
import yeonba.be.login.dto.response.UserRefreshTokenResponse;
import yeonba.be.login.service.LoginService;
import yeonba.be.user.service.JoinService;
import yeonba.be.util.CustomResponse;

@Tag(name = "Login", description = "로그인 관련 API")
Expand All @@ -28,18 +30,18 @@
public class LoginController {

private final LoginService loginService;
private final JoinService joinService;

@Operation(summary = "회원가입", description = "회원가입을 할 수 있습니다.")
@ApiResponse(responseCode = "200", description = "회원가입 성공")
@PostMapping("/users/join")
@PostMapping(path = "/users/join", consumes = "multipart/form-data")
public ResponseEntity<CustomResponse<UserJoinResponse>> join(
@RequestBody UserJoinRequest request) {
@Valid @ModelAttribute UserJoinRequest request) {

String createdJwt = "created";
UserJoinResponse response = joinService.join(request);

return ResponseEntity
.ok()
.body(new CustomResponse<>(new UserJoinResponse(createdJwt)));
.body(new CustomResponse<>(response));
}

@Operation(summary = "이메일 찾기 인증 코드 sms 전송", description = "이메일 찾기를 위한 인증번호 sms 전송을 요청합니다.")
Expand Down Expand Up @@ -70,9 +72,9 @@ public ResponseEntity<CustomResponse<UserEmailInquiryResponse>> emailInquiry(

@Operation(summary = "비밀번호 찾기", description = "이메일로 임시 비밀번호를 발급받을 수 있습니다.")
@ApiResponse(responseCode = "202", description = "임시 비밀번호 발급(비밀번호 찾기) 정상 처리")
@PostMapping("/users/pw-inquiry")
@PostMapping("/users/help/pw-inquiry")
public ResponseEntity<CustomResponse<Void>> passwordInquiry(
@RequestBody UserPasswordInquiryRequest request) {
@Valid @RequestBody UserPasswordInquiryRequest request) {

loginService.sendTemporaryPasswordMail(request);

Expand All @@ -82,7 +84,6 @@ public ResponseEntity<CustomResponse<Void>> passwordInquiry(
}

@Operation(summary = "로그인", description = "로그인을 할 수 있습니다.")
@ApiResponse(responseCode = "200", description = "로그인 성공")
@PostMapping("/users/login")
public ResponseEntity<CustomResponse<UserLoginResponse>> login(
@RequestBody UserLoginRequest request) {
Expand Down
Loading