Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
218 commits
Select commit Hold shift + click to select a range
6b6e2f5
Merge pull request #195 from teamterning/main
junggyo1020 Jan 18, 2025
3b11d0f
refactor(Jwt) : νŒ¨ν‚€μ§€ 경둜 λ³€κ²½
jsoonworld Mar 6, 2025
8ef06ca
refactor(AppleAuthTokenValidator) : Apple 인증 μ„œλΉ„μŠ€ λ¦¬νŒ©ν† λ§
jsoonworld Mar 6, 2025
f67f626
refactor(AuthController) : 인증 컨트둀러 λ¦¬νŒ©ν† λ§ 및 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
jsoonworld Mar 6, 2025
307fce2
refactor(AuthService) : 인증 μ„œλΉ„μŠ€ λ¦¬νŒ©ν† λ§ 및 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
jsoonworld Mar 6, 2025
59c387e
refactor(KakaoAuthTokenValidator) : 카카였 인증 μ„œλΉ„μŠ€ λ¦¬νŒ©ν† λ§ 및 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
jsoonworld Mar 6, 2025
df15cb9
refactor(SocialAuthServiceManager) : μ†Œμ…œ 인증 μ„œλΉ„μŠ€ 관리 둜직 λ¦¬νŒ©ν† λ§
jsoonworld Mar 6, 2025
42cbc1e
refactor(AuthServiceImpl) : 인증 μ„œλΉ„μŠ€ λ¦¬νŒ©ν† λ§ 및 μ—­ν•  뢄리
jsoonworld Mar 6, 2025
0ab01f5
refactor(SignUpFilterResponseDto) : λΆˆν•„μš”ν•œ DTO 제거
jsoonworld Mar 6, 2025
1870316
refactor(directory) : νŒ¨ν‚€μ§€ 경둜 λ³€κ²½ 및 ꡬ쑰 정리
jsoonworld Mar 6, 2025
1e8ee34
refactor(WebhookService) : νšŒμ›κ°€μž… 이벀트 λ¦¬μŠ€λ„ˆ μΆ”κ°€ 및 μ½”λ“œ 정리
jsoonworld Mar 6, 2025
03bf6fa
feat(UserSignedUpEvent) : νšŒμ›κ°€μž… 이벀트 클래슀 κ΅¬ν˜„
jsoonworld Mar 6, 2025
15f262c
feat(AuthReissueService) : 토큰 μž¬λ°œκΈ‰ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Mar 6, 2025
d16a889
feat(AuthReissueServiceImpl) : 토큰 μž¬λ°œκΈ‰ μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
356be8c
feat(AuthSignInService) : 둜그인 μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
83bb6b9
feat(AuthSignInServiceImpl) : 둜그인 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
b8c120e
feat(AuthSignOutService) : λ‘œκ·Έμ•„μ›ƒ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
62b3f56
feat(AuthSignOutServiceImpl) : λ‘œκ·Έμ•„μ›ƒ μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
5a8650e
feat(AuthSignUpService) : νšŒμ›κ°€μž… μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
e8d21bb
feat(AuthSignUpServiceImpl) : νšŒμ›κ°€μž… μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
47925b7
feat(AppleAuthProvider) : μ• ν”Œ μ†Œμ…œ 둜그인 ν”„λ‘œλ°”μ΄λ” κ΅¬ν˜„
jsoonworld Mar 6, 2025
d7fa9b5
feat(KakaoAuthProvider) : 카카였 μ†Œμ…œ 둜그인 ν”„λ‘œλ°”μ΄λ” κ΅¬ν˜„
jsoonworld Mar 6, 2025
e97f2a5
feat(SocialAuthProvider) : μ†Œμ…œ 인증 ν”„λ‘œλ°”μ΄λ” μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
6236721
feat(AuthWithdrawService) : νšŒμ› νƒˆν‡΄ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
cb74f30
feat(AuthWithdrawServiceImpl) : νšŒμ› νƒˆν‡΄ μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 6, 2025
e6e446a
feat(AuthServiceConfig) : μ†Œμ…œ 인증 μ„œλΉ„μŠ€ 관리 빈 μ„€μ •
jsoonworld Mar 6, 2025
d0853a2
merge(auth) : Auth application 계측 ꡬ쑰 κ°œμ„ 
jsoonworld Mar 7, 2025
114605f
refactor(JwtTokenProvider) : JWT 토큰 생성 및 검증 μ±…μž„ 뢄리
jsoonworld Mar 9, 2025
ab84f90
refactor(CustomJwtAuthenticationEntryPoint) : JWT 인증 μ‹€νŒ¨ μ˜ˆμ™Έ 처리 방식 λ³€κ²½
jsoonworld Mar 9, 2025
94dd95f
refactor(JwtAuthenticationFilter) : JWT 인증 ν•„ν„° 둜직 κ°œμ„ 
jsoonworld Mar 9, 2025
967791f
refactor(JwtValidationType) : JWT 검증 μƒνƒœ 관리 방식 λ³€κ²½
jsoonworld Mar 9, 2025
1d6374d
del(PrincipalHandler): μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” PrincipalHandler 클래슀 제거
jsoonworld Mar 9, 2025
3c9ce52
refactor(AuthReissueServiceImpl) : 토큰 μž¬λ°œκΈ‰ 둜직 κ°œμ„ 
jsoonworld Mar 9, 2025
6579801
refactor(AuthSignInServiceImpl) : JWT 토큰 생성 μ±…μž„ 뢄리
jsoonworld Mar 9, 2025
e96eadb
refactor(AuthSignUpServiceImpl) : JWT 토큰 생성 λ‘œμ§μ„ JwtTokenManager둜 μœ„μž„
jsoonworld Mar 9, 2025
f5d1759
refactor(AppleAuthTokenValidator) : μƒμˆ˜ 뢄리 및 μ½”λ“œ κ°„κ²°ν™”
jsoonworld Mar 9, 2025
b45945f
refactor(UserAuthentication) : 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ μΆ”κ°€ 및 νŒ¨ν‚€μ§€ 이동
jsoonworld Mar 9, 2025
48fde8e
refactor(SecurityConfig) : JWT ν•„ν„° 및 인증 μ§„μž…μ  νŒ¨ν‚€μ§€ 이동 반영
jsoonworld Mar 9, 2025
2441319
refactor(ValueConfig) : λΆˆν•„μš”ν•œ μƒμˆ˜ 제거 및 μ„€μ • 클래슀 정리
jsoonworld Mar 9, 2025
a3f45cf
feat(GlobalExceptionHandler) : JWT μ˜ˆμ™Έ 처리 μΆ”κ°€
jsoonworld Mar 9, 2025
297b757
feat(JwtClaimsGenerator) : JWT ν΄λ ˆμž„ 생성 둜직 κ΅¬ν˜„
jsoonworld Mar 9, 2025
44f4b7c
feat(JwtTokenManager) : JWT 토큰 관리 둜직 κ΅¬ν˜„
jsoonworld Mar 9, 2025
6778627
feat(AuthenticationTokenFactory) : 인증 토큰 생성 νŒ©ν† λ¦¬ κ΅¬ν˜„
jsoonworld Mar 9, 2025
186866b
feat(UserDetailsFactory) : UserDetails 생성 νŒ©ν† λ¦¬ κ΅¬ν˜„
jsoonworld Mar 9, 2025
012042c
feat(UserIdConverter) : μ‚¬μš©μž ID λ³€ν™˜ μœ ν‹Έλ¦¬ν‹° κ΅¬ν˜„
jsoonworld Mar 9, 2025
4bf1e63
feat(JwtErrorCode) : JWT μ˜ˆμ™Έ μ½”λ“œ 관리 enum κ΅¬ν˜„
jsoonworld Mar 9, 2025
7a4ddb6
feat(JwtException) : JWT μ˜ˆμ™Έ 클래슀 κ΅¬ν˜„
jsoonworld Mar 9, 2025
1719d28
feat(JwtTokenVerifier) : JWT 검증 및 μ‚¬μš©μž ID μΆ”μΆœ 둜직 κ΅¬ν˜„
jsoonworld Mar 9, 2025
14f05d1
fix(TokenExtractor) : 쀑볡 import 제거
jsoonworld Mar 9, 2025
da93926
feat(JwtClaimsParser) : JWT Claims νŒŒμ‹± κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 9, 2025
0a0bcd6
feat(JwtUserIdExtractor) : JWTμ—μ„œ μ‚¬μš©μž ID μΆ”μΆœ κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 9, 2025
0102164
feat(TokenExtractor) : JWT 토큰 μΆ”μΆœ κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 9, 2025
b7d2e8d
refactor(JwtTokenVerifier) : JwtUserIdExtractor둜 μ‚¬μš©μž ID μΆ”μΆœ 방식 λ³€κ²½
jsoonworld Mar 9, 2025
efb51a3
feat(JwtKeyProvider) : JWT μ„œλͺ… ν‚€ 제곡 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 9, 2025
1ecf37b
feat(JwtSigner) : JWT μ„œλͺ… 및 토큰 생성 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 9, 2025
699d25b
refactor(JwtClaimsParser) : 역할에 맞게 JwtClaimsParser 클래슀 νŒ¨ν‚€μ§€ 이동
jsoonworld Mar 11, 2025
40479b9
refactor(JwtClaimsGenerator): Claims 생성 둜직 κ°„κ²°ν™” 및 λ©”μ„œλ“œ μΆ”μΆœ
jsoonworld Mar 11, 2025
4df51b4
Merge pull request #200 from teamterning/refactor/#198
jsoonworld Mar 11, 2025
7c8cc49
refactor(recover): 개발 브랜치λ₯Ό κ³Όκ±° λ²„μ „μœΌλ‘œ 볡원
jsoonworld Mar 14, 2025
57ded00
merge(jwt): JWT λ³€κ²½ 이전 μƒνƒœλ‘œ 브랜치 볡원
jsoonworld Mar 14, 2025
27475eb
refactor(auth) : DTO νŒ¨ν‚€μ§€ μœ„μΉ˜ λ³€κ²½ 및 넀이밍 λ³€κ²½
jsoonworld Mar 18, 2025
2bf8653
refactor(AuthController) : DTO 및 토큰 μΆ”μΆœ 둜직 κ°œμ„ 
jsoonworld Mar 18, 2025
6133db2
refactor(AuthSignInServiceImpl) : signIn 둜직 κ°œμ„  및 DTO λ³€κ²½
jsoonworld Mar 18, 2025
2952126
refactor(AuthSignUpServiceImpl) : DTO νŒ¨ν‚€μ§€ λ³€κ²½ 및 νšŒμ›κ°€μž… 둜직 κ°œμ„ 
jsoonworld Mar 18, 2025
e160e23
fix(KakaoAuthTokenValidator) : μ€‘λ³΅λœ "Bearer" 토큰 접두어 제거
jsoonworld Mar 18, 2025
d39f148
feat(AuthErrorCode) : 인증 κ΄€λ ¨ μ—λŸ¬ μ½”λ“œ Enum μΆ”κ°€
jsoonworld Mar 18, 2025
89ade53
refactor(SignInResponse) : λ ˆμ½”λ“œ 기반 DTO λ¦¬νŒ©ν† λ§ 및 λΆˆν•„μš”ν•œ `SignInResponseDto` 제거
jsoonworld Mar 18, 2025
a6b3c35
feat(AuthException) : 인증 κ΄€λ ¨ μ˜ˆμ™Έ 클래슀 μΆ”κ°€
jsoonworld Mar 18, 2025
616d34f
feat(AuthSuccessCode) : 인증 성곡 응닡 μ½”λ“œ Enum μΆ”κ°€
jsoonworld Mar 18, 2025
e198234
feat(SuccessResponse) : SuccessCode 기반의 성곡 응닡 생성 λ©”μ„œλ“œ μΆ”κ°€
jsoonworld Mar 18, 2025
280d467
refactor(SuccessMessage) : 인증 κ΄€λ ¨ 성곡 λ©”μ‹œμ§€ 제거
jsoonworld Mar 18, 2025
ad21015
feat(GlobalExceptionHandler) : 인증 μ˜ˆμ™Έ 처리 둜직 μΆ”κ°€
jsoonworld Mar 18, 2025
4909d5d
feat(SuccessCode) : 성곡 응닡을 μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Mar 18, 2025
436fa60
fix(JwtErrorCode) : 였λ₯˜ λ©”μ‹œμ§€ 접두어 μˆ˜μ •
jsoonworld Mar 18, 2025
3ca644d
refactor(JwtClaimsGenerator) : JWT ν΄λ ˆμž„ 생성 둜직 νƒ€μž… 체크 κ°•ν™”
jsoonworld Mar 18, 2025
40683fa
refactor(JwtClaimsExtractor) : μ‚¬μš©μž ID μΆ”μΆœ 둜직 λͺ…μ‹œμ μœΌλ‘œ κ°œμ„ 
jsoonworld Mar 18, 2025
d7c69db
refactor(Auth) : UserAuthentication 생성 방식 λ³€κ²½ 및 μ½”λ“œ κ°„μ†Œν™”
jsoonworld Mar 18, 2025
3b3a2fd
feat(CustomUserDetails) : CustomUserDetails 클래슀 μΆ”κ°€
jsoonworld Mar 18, 2025
415b6b7
refactor(UserAuthentication) : 인증 객체 ꡬ쑰 λ‹¨μˆœν™”
jsoonworld Mar 18, 2025
07cd799
refactor(UserDetailsFactory) : μ‚¬μš©μž μ •μ˜ UserDetails 객체 λ°˜ν™˜μœΌλ‘œ λ³€κ²½
jsoonworld Mar 18, 2025
a165cd9
feat(JwtErrorCode) : `INVALID_USER_DETAILS_TYPE` μ—λŸ¬μ½”λ“œ μΆ”κ°€
jsoonworld Mar 18, 2025
d64d42f
refactor(JwtAuthenticationFilter) : 인증 객체 생성 방식 λ‹¨μˆœν™”
jsoonworld Mar 18, 2025
9eaa3d5
[ !hotfix] 4ν•™λ…„μ˜ 경우 μ‘Έμ—…μ˜ˆμ •μ—¬λΆ€ 상관없이 전체 곡고λ₯Ό 보여주도둝 μˆ˜μ •
junggyo1020 Mar 19, 2025
f345479
merge(SignIn) : μ†Œμ…œ 둜그인 둜직 κ°œμ„ 
jsoonworld Mar 20, 2025
f3eb6b3
Merge pull request #209 from teamterning/develop
junggyo1020 Mar 28, 2025
135373e
feat(build.gradle) : WebFlux 및 Resilience4j 라이브러리 μ˜μ‘΄μ„± κ΅¬ν˜„
jsoonworld Mar 29, 2025
eb57f73
feat(AuthSignInServiceImpl) : 둜그인 μ‹œ FCM 토큰 μœ νš¨μ„± 검증 둜직 κ΅¬ν˜„
jsoonworld Mar 29, 2025
6020ecc
feat(SignInResponse) : FCM 토큰 μž¬λ°œκΈ‰ μ—¬λΆ€ 응닡 ν•„λ“œ μΆ”κ°€
jsoonworld Mar 29, 2025
f235628
refactor(WebClientConfig) : WebClient μ„€μ •κ°’ μƒμˆ˜λ‘œ λΆ„λ¦¬ν•˜μ—¬ 가독성 κ°œμ„ 
jsoonworld Mar 29, 2025
af01766
feat(FcmTokenReissueRequiredResponse) : FCM 토큰 μž¬λ°œκΈ‰ μ—¬λΆ€ 응닡 DTO κ΅¬ν˜„
jsoonworld Mar 29, 2025
a80e6c4
feat(FcmTokenValidationClient) : FCM 토큰 μœ νš¨μ„± 검증 ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„
jsoonworld Mar 29, 2025
fac9ab9
refactor(errorMessage) : μ˜€νƒ€ μˆ˜μ •
jsoonworld Mar 29, 2025
7dc154c
[✨ feat] μš΄μ˜μ„œλ²„μ—μ„œ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•˜ DTO κ΅¬ν˜„
junggyo1020 Mar 29, 2025
fb824d3
[✨ feat] μ„œλ²„κ°„ 톡신을 μœ„ν•œ WebFlux μ˜μ‘΄μ„± μΆ”κ°€
junggyo1020 Mar 29, 2025
475d8f6
[✨ feat] μš΄μ˜μ„œλ²„μ—μ„œ μ•Œλ¦Όμ„œλ²„λ‘œ POST μš”μ²­μ„ 보내기 μœ„ν•œ ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„
junggyo1020 Mar 29, 2025
d711a9a
[✨ feat] νšŒμ›κ°€μž… μ‹œ, fcm 토큰도 함꼐 μž…λ ₯받도둝 μˆ˜μ •
junggyo1020 Mar 29, 2025
83ae811
[✨ feat] μ•Œλ¦Όμ„œλ²„ <> μš΄μ˜μ„œλ²„ κ°„ 톡신을 μœ„ν•œ μ„€μ •
junggyo1020 Mar 29, 2025
2892e6e
[✨ feat] νšŒμ›κ°€μž… μ‹œ μ•Œλ¦Όμ„œλ²„λ‘œ 데이터 전솑 둜직 κ΅¬ν˜„
junggyo1020 Mar 29, 2025
91e75cf
[FEAT] GlobalExceptionHandler μ˜ˆμ™ΈμΌ€μ΄μŠ€ μΆ”κ°€
JungYoonShin Mar 30, 2025
b8e4550
[FEAT] μš”μ²­/응닡 λ‘œκΉ…μ„ μœ„ν•œ loback μ„€μ •
JungYoonShin Mar 30, 2025
faa6a2b
[FEAT] HttpRequest 캐싱을 μœ„ν•œ CachedHttpServletRequest κ΅¬ν˜„
JungYoonShin Mar 30, 2025
a7421e5
[FEAT] μš”μ²­/응닡 λ‘œκΉ…μ„ μœ„ν•œ LoggingFilter κ΅¬ν˜„
JungYoonShin Mar 30, 2025
0b5683c
feat(SecurityConfig) : μ™ΈλΆ€ 슀크랩 미동기화 API 경둜 인증 μ˜ˆμ™Έμ— μΆ”κ°€
jsoonworld Mar 30, 2025
286aea9
feat(Scrap) : 슀크랩 동기화 μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œ syncStatus κ΅¬ν˜„
jsoonworld Mar 30, 2025
60fc239
feat(SyncStatus) : 슀크랩 동기화 μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” VO κ΅¬ν˜„
jsoonworld Mar 30, 2025
c64e990
feat(ScrapExternalApiController) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 쑰회 API κ΅¬ν˜„
jsoonworld Mar 30, 2025
d2a2af8
feat(ScrapExternalService) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Mar 30, 2025
851806c
feat(UnsyncedScrapUserReader) : 미동기화 슀크랩 μœ μ € 쑰회 κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
jsoonworld Mar 30, 2025
6f8bda4
feat(UnsyncedScrapUserReaderImpl) : 미동기화 슀크랩 μœ μ € 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 30, 2025
22c8a21
feat(UnsyncedScrapUserResponse) : 단일 미동기화 μœ μ € 응닡 DTO μΆ”κ°€
jsoonworld Mar 30, 2025
19d4896
feat(UnsyncedScrapUsersResponse) : 미동기화 슀크랩 μœ μ € λͺ©λ‘ 응닡 DTO μΆ”κ°€
jsoonworld Mar 30, 2025
b59142a
chore(ScrapRepository) : μ‚¬μš©λ˜μ§€ μ•ŠλŠ” import 제거 및 μ½”λ“œ 정리
jsoonworld Mar 30, 2025
90bdcb1
feat(ScrapRepositoryCustom) : 미동기화 슀크랩 μœ μ € ID 쑰회 λ©”μ„œλ“œ μ •μ˜
jsoonworld Mar 30, 2025
1f6db49
feat(ScrapRepositoryImpl) : 미동기화 슀크랩 μœ μ € ID 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Mar 30, 2025
bf7a528
[✨ feat] μ•Œλ¦Όμ„œλ²„λ‘œ λ³΄λ‚΄λŠ” 응닡값 μˆ˜μ •
junggyo1020 Mar 31, 2025
ae49757
[REFACTOR] λ‘œκΉ… 파일 μœ„μΉ˜ yml ν™˜κ²½λ³€μˆ˜ μ„€μ •
JungYoonShin Apr 1, 2025
61e45e5
Merge pull request #214 from teamterning/feat/#201
JungYoonShin Apr 1, 2025
adfadfe
Merge pull request #217 from teamterning/develop
JungYoonShin Apr 1, 2025
65bea90
merge(fcmValidate) : μ†Œμ…œ 둜그인 μ‹œ FCM 토큰 검증 및 μž¬λ°œκΈ‰ μ—¬λΆ€ 응닡 처리 둜직 κ΅¬ν˜„
jsoonworld Apr 1, 2025
82efdec
merge(scrap) : μŠ€ν¬λž©ν•œ μœ μ €λ₯Ό μ‘°νšŒν•˜λŠ” API κ΅¬ν˜„
jsoonworld Apr 1, 2025
8bef276
fix(SecurityConfig) : μˆ˜μ •λœ URL νŒ¨ν„΄ μΆ”κ°€
jsoonworld Apr 2, 2025
a1899cd
fix(WebClientConfig) : WebClient 빈 μ„€μ • μˆ˜μ •
jsoonworld Apr 2, 2025
b24c6b8
fix(ScrapExternalApiController) : `fetchUnsyncedScrapUsers` λ©”μ„œλ“œμ˜ μ€‘λ³΅λœ …
jsoonworld Apr 2, 2025
9300eda
feat(ScrapSyncMarker) : 슀크랩 동기화 μ™„λ£Œ λ§ˆν‚Ή κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
49e3937
feat(ScrapSyncNotifier) : 슀크랩 동기화 μ•Œλ¦Ό κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
d24e004
feat(UnsyncedScrapMarker) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € λ§ˆν‚Ή κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
4aac349
feat(UnsyncedScrapUserReader) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € ID 쑰회 κΈ°λŠ₯ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
ffd5801
feat(ReadUnsyncedScrapUsersService) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
14a136e
feat(ScrapSyncCoordinatorService) : 슀크랩 동기화 μ‘°μ • μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
4cab9f1
feat(SyncUnsyncedUsersService) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 동기화 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
984d3d7
feat(UnsyncedScrapMarkerService) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 λ§ˆν‚Ή μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
ae99e51
feat(UnsyncedScrapUserReaderService) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € ID 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
11ea7f3
feat(ReadUnsyncedScrapUsersUseCase) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 쑰회 μœ μŠ€μΌ€μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
125261b
feat(ScrapSyncOrchestrator) : 슀크랩 동기화 μ‘°μ • μœ μŠ€μΌ€μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
6097a90
feat(SyncUnsyncedUsersUseCase) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 μœ μ € 동기화 μœ μŠ€μΌ€μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Apr 2, 2025
54ed314
feat(ScrapExternalErrorCode) : 슀크랩 μ™ΈλΆ€ 였λ₯˜ μ½”λ“œ 관리 Enum μΆ”κ°€
jsoonworld Apr 2, 2025
0d66b1b
feat(ScrapExternalException) : 슀크랩 μ™ΈλΆ€ 였λ₯˜ 처리 μ˜ˆμ™Έ 클래슀 μΆ”κ°€
jsoonworld Apr 2, 2025
3731b2e
feat(OpsApiClient) : 슀크랩 동기화 κ²°κ³Ό μ•Œλ¦Ό 전솑 ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„
jsoonworld Apr 2, 2025
715e9a8
feat(ScrapUserIdsRequest) : 슀크랩 μœ μ € ID μš”μ²­ DTO μΆ”κ°€
jsoonworld Apr 2, 2025
48dcdb5
feat(ScrapSyncScheduler) : 슀크랩 동기화 μŠ€μΌ€μ€„λŸ¬ κ΅¬ν˜„
jsoonworld Apr 2, 2025
420b712
feat(ScrapSyncMarkerImpl) : 슀크랩 동기화 λ§ˆν‚Ή μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Apr 2, 2025
c26e27f
feat(ScrapRepositoryCustom) : 슀크랩 동기화 κ΄€λ ¨ μ»€μŠ€ν…€ 리포지토리 λ©”μ„œλ“œ μΆ”κ°€
jsoonworld Apr 2, 2025
9fa52d3
feat(ScrapRepositoryImpl) : λ™κΈ°ν™”λ˜μ§€ μ•Šμ€ 슀크랩 쑰회 λ©”μ„œλ“œ κ΅¬ν˜„
jsoonworld Apr 2, 2025
abd8a68
fix(WebClientConfig) : `opsWebClient` 빈 μ„€μ •μ—μ„œ URL 경둜 μˆ˜μ •
jsoonworld Apr 2, 2025
ae34c99
fix(OpsApiClient) : `WebClient` μΈμŠ€ν„΄μŠ€ λ³€κ²½ 및 λ©”μ„œλ“œ μˆ˜μ •
jsoonworld Apr 2, 2025
a76977c
fix(ScrapSyncScheduler) : μ€‘λ³΅λœ `@Scheduled` μ–΄λ…Έν…Œμ΄μ…˜ μˆ˜μ • 및 λΆˆν•„μš”ν•œ ν•„λ“œ 제거
jsoonworld Apr 2, 2025
d314beb
merge : 동기화 λŒ€μƒ μœ μ € ID μˆ˜μ‹  및 μƒνƒœ 반영 API κ΅¬ν˜„
jsoonworld Apr 3, 2025
ea3aa9b
Merge branch 'develop' into feat/#212-before
junggyo1020 Apr 4, 2025
943017c
Merge pull request #216 from teamterning/feat/#212-before
junggyo1020 Apr 4, 2025
b4689bd
Update ScrapSyncMarkerImpl.java
junggyo1020 Apr 4, 2025
1395914
[✨ feat] spring batch μ˜μ‘΄μ„± μΆ”κ°€
junggyo1020 Apr 6, 2025
65b4e83
[✨ feat] ν‘Έμ‹œμ•Œλ¦Ό μ—¬λΆ€ λ³€κ²½ κ΄€λ ¨ μ—λŸ¬μœ ν˜• μΆ”κ°€
junggyo1020 Apr 6, 2025
3119419
[✨ feat] μœ μ € μƒνƒœ 동기화λ₯Ό μœ„ν•œ 이벀트 기반 동기 처리
junggyo1020 Apr 6, 2025
37b116e
[✨ feat] μ•Œλ¦Όμ„œλ²„λ‘œ μš”μ²­μ„ 보내기 μœ„ν•œ ν΄λΌμ΄μ–ΈνŠΈ μ •μ˜
junggyo1020 Apr 6, 2025
a0c52f5
[✨ feat] ν”„λ‘œν•„ 쑰회 μ‹œ, pushStatus μ»¬λŸΌμ„ ν•¨κ»˜ μ‘°νšŒν•˜λ„λ‘ μˆ˜μ •
junggyo1020 Apr 6, 2025
77d8cfe
[✨ feat] μš΄μ˜μ„œλ²„ User도 pushStatusλ₯Ό 가지도둝 값을 생성
junggyo1020 Apr 6, 2025
ef7952d
[✨ feat] μœ μ €μ˜ ν‘Έμ‹œμ•Œλ¦Ό ν—ˆμš©μ—¬λΆ€λ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ dto μ •μ˜
junggyo1020 Apr 6, 2025
e4386f0
[✨ feat] 좩돌 제거
junggyo1020 Apr 6, 2025
007b575
[✨ feat] μ„œλ²„ κ°„ 톡신을 μœ„ν•œ whitelist μΆ”κ°€
junggyo1020 Apr 6, 2025
8cab637
[✨ feat] ν‘Έμ‹œμ•Œλ¦Ό ν—ˆμš©μ—¬λΆ€ 성곡 λ©”μ„Έμ§€ 응닡값 μΆ”κ°€
junggyo1020 Apr 6, 2025
5c010a5
[✨ feat] μŠ€μΌ€μ₯΄λ§μ„ μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜ μΆ”κ°€
junggyo1020 Apr 6, 2025
1aa7980
[✨ feat] μš΄μ˜μ„œλ²„μ˜ user도 pushStatus값을 가지도둝 μˆ˜μ •
junggyo1020 Apr 6, 2025
f09b95e
[✨ feat] ν‘Έμ‹œμ•Œλ¦Ό ν—ˆμš©μ—¬λΆ€ λ³€κ²½ api κ΅¬ν˜„
junggyo1020 Apr 6, 2025
e955479
[✨ feat] ν‘Έμ‹œμ•Œλ¦Ό ν—ˆμš©μ—¬λΆ€ λ³€κ²½ api κ΅¬ν˜„
junggyo1020 Apr 6, 2025
8ac1685
[✨ feat] 동기화λ₯Ό μœ„ν•œ 데이터 μ €μž₯ 객체 κ΅¬ν˜„
junggyo1020 Apr 6, 2025
bbd8dde
[✨ feat] 동기화λ₯Ό μœ„ν•œ μŠ€μΌ€μ₯΄λ§ κ΅¬ν˜„
junggyo1020 Apr 6, 2025
f5e4ef0
Merge pull request #221 from teamterning/feat/#220
junggyo1020 Apr 6, 2025
6a84c4b
Merge pull request #223 from teamterning/develop
junggyo1020 Apr 6, 2025
feca3f0
[ !hotfix] NOT NULL 속성에 μ˜ν•œ 였λ₯˜μΈμ§€ 확인
junggyo1020 Apr 6, 2025
a8d100d
[FEAT] ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ ν™˜κ²½ ꡬ좕
JungYoonShin Apr 9, 2025
ab8a8ac
[TEST] 슀크랩 μ·¨μ†Œ λ™μ‹œμ„± ν…ŒμŠ€νŠΈ κ΅¬ν˜„
JungYoonShin Apr 9, 2025
1bcd7ad
[FIX] 인턴 곡고 μ‘°νšŒμ‹œ 비관적 락 적용
JungYoonShin Apr 9, 2025
05786da
[REFACTOR] 슀크랩 μ·¨μ†Œ, μΆ”κ°€μ‹œ 슀크랩 수λ₯Ό updateν•˜λŠ” λ©”μ„œλ“œ 뢄리
JungYoonShin Apr 9, 2025
c343848
[chore] testλ₯Ό μœ„ν•œ μ£Όμ„μ²˜λ¦¬
junggyo1020 Apr 13, 2025
9acfa18
[chore] HS256 μ•Œκ³ λ¦¬μ¦˜ 적용
junggyo1020 Apr 13, 2025
d7f8bf1
[chore] HS256 μ•Œκ³ λ¦¬μ¦˜ 적용
junggyo1020 Apr 13, 2025
83ac110
[chore] RS256 μ•Œκ³ λ¦¬μ¦˜ 재적용
junggyo1020 Apr 13, 2025
79b3557
[chore] RS256 μ•Œκ³ λ¦¬μ¦˜ 재적용
junggyo1020 Apr 13, 2025
d688ebb
[chore] RS256 μ•Œκ³ λ¦¬μ¦˜ 재적용
junggyo1020 Apr 13, 2025
211ad16
[chore] HS256 μ•Œκ³ λ¦¬μ¦˜ 재적용
junggyo1020 Apr 13, 2025
3688894
[chore] JwtKeyProviderκ°€ 자체적으둜 RSA ν‚€ νŽ˜μ–΄λ₯Ό μƒμ„±ν•˜λ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •
junggyo1020 Apr 14, 2025
3bfda06
[FIX] 슀크랩 μ·¨μ†Œμ‹œ, 슀크랩 μˆ˜μ— λŒ€ν•œ λ™μ‹œμ„± 이슈λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 비관적 락 적용
JungYoonShin Apr 14, 2025
71c8673
[chore] Apple 둜그인이 μ•ˆλ˜λ˜ 문제 ν•΄κ²°
junggyo1020 Apr 14, 2025
8a0da9b
[chore] 짧은 μ„œλ²„κ°„ μ‘λ‹΅μ‹œκ°„ μ‘°μ •
junggyo1020 Apr 14, 2025
f79003e
Merge branch 'staging' into fix/#228-preQA
junggyo1020 Apr 14, 2025
6d80592
[πŸ”¨ fix] 동기적 λ°©μ‹μœΌλ‘œ μ•Œλ¦Όμ„œλ²„μ— username 변경을 μ μš©ν•˜λ„λ‘ λ³€κ²½
junggyo1020 Apr 14, 2025
46baf67
[πŸ”¨ fix] 동기적 λ°©μ‹μœΌλ‘œ μ•Œλ¦Όμ„œλ²„μ— νšŒμ› νƒˆν‡΄λ₯Ό μ μš©ν•˜λ„λ‘ λ³€κ²½
junggyo1020 Apr 14, 2025
af2c537
[✨ feat] μ†Œμ…œλ‘œκ·ΈμΈ μ‹œ, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ fcmToken을 RequestBody둜 μ „λ‹¬ν•˜λ„λ‘ μΆ”κ°€
junggyo1020 Apr 14, 2025
79edcbb
[✨ feat] fcmToken이 μ—†λŠ” μœ μ €κ°€ μ†Œμ…œλ‘œκ·ΈμΈμ„ ν•˜λ©΄ μƒˆλ‘­κ²Œ λ°œκΈ‰λ°›λ„λ‘ μˆ˜μ •
junggyo1020 Apr 14, 2025
dc5dffc
Merge pull request #229 from teamterning/fix/#228-preQA
junggyo1020 Apr 15, 2025
b8db715
Merge pull request #231 from teamterning/develop
junggyo1020 Apr 15, 2025
c87d9f9
Update README.md
jsoonworld Apr 17, 2025
abb79d4
Update README.md
jsoonworld Apr 17, 2025
2b05625
[FIX] Docker μ»¨ν…Œμ΄λ„ˆ λ‘œκ·Έλ‘œλ„ 둜그 확인할 수 μžˆλ„λ‘ HTTP μš”μ²­/응닡 λ‘œκΉ… μ„€μ • μˆ˜μ •
JungYoonShin Apr 19, 2025
b4a5b48
[✨ feat] νšŒμ›κ°€μž… μ‹œ, ν‘Έμ‹œμ•Œλ¦Όμ—¬λΆ€ Defaultκ°’μœΌλ‘œ μœ μ €λ₯Ό μƒμ„±ν•˜λ„λ‘ 둜직 μˆ˜μ •
junggyo1020 Apr 19, 2025
823b3e7
Merge pull request #233 from teamterning/develop
junggyo1020 Apr 19, 2025
08a763f
[FIX] 파일 λ‘œκΉ… μ„€μ • μˆ˜μ •
JungYoonShin Apr 20, 2025
55b4e14
[πŸ”¨ fix] Docker μ»¨ν…Œμ΄λ„ˆ λ‘œκ·Έλ‘œλ„ 둜그 확인할 수 μžˆλ„λ‘ HTTP μš”μ²­/응닡 λ‘œκΉ… μ„€μ • μˆ˜μ •
JungYoonShin Apr 22, 2025
8cc1310
[πŸ”€ merge] HTTP μš”μ²­/응닡 μˆ˜μ •μ‚¬ν•­ λ‘œκΉ… μŠ€ν…Œμ΄μ§• μ„œλ²„ 반영
JungYoonShin Apr 22, 2025
3372e62
[TEST] 슀크랩 μΆ”κ°€μ‹œμ— λŒ€ν•œ λ™μ‹œμ„± ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„±
JungYoonShin Apr 28, 2025
3a4f3eb
[REFACTOR] 슀크랩 μ·¨μ†Œμ‹œ μœ μ € κΆŒν•œ ν›„ 슀크랩 수 update ν•˜λ„λ‘ 호좜 μˆ˜μ •
JungYoonShin Apr 28, 2025
91d0c34
[REFACTOR] 슀크랩 수 update ν›„ 슀크랩 μ €μž₯ν•˜λ„λ‘ μˆœμ„œ λ³€κ²½
JungYoonShin Apr 28, 2025
75a5cc1
[REFACTOR] ScrapServiceImpl λΆˆν•„μš”ν•œ κ°œν–‰ 제거
JungYoonShin May 7, 2025
211368f
[FIX] 슀크랩 μ·¨μ†Œ μ‹œ, 슀크랩 μ‚­μ œ ν›„ count κ°μ†Œν•˜λ„λ‘ μˆœμ„œ μˆ˜μ •
JungYoonShin May 7, 2025
965692f
[FEAT] 슀크랩 μ·¨μ†Œμ‹œμ— Unchecked Exception λ°œμƒ μ‹œ νŠΈλžœμž­μ…˜ 둀백이 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜λŠ”μ§€μ— λŒ€ν•œ ν…ŒμŠ€νŠΈβ€¦
JungYoonShin May 7, 2025
152111f
[FIX] 슀크랩 μ·¨μ†Œμ‹œμ— Unchecked Exception λ°œμƒ μ‹œμ— λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
JungYoonShin May 7, 2025
50f2d06
[πŸ”¨ fix] 슀크랩 μΆ”κ°€μ‹œ, 슀크랩 μˆ˜μ— λŒ€ν•œ λ™μ‹œμ„± ν…ŒμŠ€νŠΈ μ§„ν–‰
JungYoonShin May 10, 2025
49a1f27
[feat] μ†Œμ…œλ‘œκ·ΈμΈ μ‹œ, μ•Œλ¦Όμ„œλ²„μ™€ μš΄μ˜μ„œλ²„μ˜ μœ μ €λ₯Ό 동기화 ν•˜λŠ” 둜직 μΆ”κ°€
junggyo1020 May 10, 2025
a45fa6b
Merge remote-tracking branch 'origin/develop' into develop
junggyo1020 May 10, 2025
20544c2
[feat] μ†Œμ…œλ‘œκ·ΈμΈ μ‹œ, μ•Œλ¦Όμ„œλ²„μ™€ μš΄μ˜μ„œλ²„μ˜ μœ μ €λ₯Ό 동기화 ν•˜λŠ” 둜직 μΆ”κ°€
junggyo1020 May 10, 2025
3368b69
Merge pull request #239 from teamterning/feat/#238
junggyo1020 May 10, 2025
176db6a
Merge remote-tracking branch 'origin/develop' into develop1
junggyo1020 May 10, 2025
e70d7be
[refactor] 도메인 기반 폴더링 ꡬ쑰둜 μˆ˜μ • - common
junggyo1020 May 10, 2025
1b51795
[refactor] 도메인 기반 폴더링 ꡬ쑰둜 μˆ˜μ • - common
junggyo1020 May 10, 2025
34ea30b
[refactor] 도메인 기반 폴더링 ꡬ쑰둜 μˆ˜μ •
junggyo1020 May 10, 2025
9ea6df6
[refactor] 도메인 기반 폴더링 ꡬ쑰둜 μˆ˜μ •
junggyo1020 May 10, 2025
5c927be
Merge pull request #240 from teamterning/refactor/#237
junggyo1020 May 11, 2025
c2d80e0
Merge pull request #241 from teamterning/develop
junggyo1020 May 11, 2025
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ Temporary Items
# application.yml
src/main/resources/application.yml
src/main/resources/application-dev.yml
src/test/resources/application-test.yml

# Q-Class
src/main/generated
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

## Back-end (Spring 🌱)

| <img src="https://github.com/user-attachments/assets/8e71a4f2-70e7-4a80-b658-de0eea90b0e0" width=300px alt="μ„œλ²„/정정ꡐ"/> | <img src="https://github.com/user-attachments/assets/7cdc140f-5281-45b5-88ac-a952cc327247" width=300px alt="μ„œλ²„/μ‹ μ •μœ€"/> | <img src="https://github.com/user-attachments/assets/4f3006b2-4869-408e-b12b-d954a5b79d9d" width=300px alt="μ„œλ²„/ꢌμž₯순"/>
| <img src="https://github.com/user-attachments/assets/8e71a4f2-70e7-4a80-b658-de0eea90b0e0" width=300px alt="μ„œλ²„/정정ꡐ"/> | <img src="https://github.com/user-attachments/assets/7cdc140f-5281-45b5-88ac-a952cc327247" width=300px alt="μ„œλ²„/μ‹ μ •μœ€"/> | <img src="https://github.com/user-attachments/assets/54c89379-08b8-4737-8da0-5bfad27e49fe" width=300px alt="μ„œλ²„/ꢌμž₯순"/>
| :-----: | :-----: | :-----: |
| [정정ꡐ/Junggyo1020](https://github.com/junggyo1020) | [μ‹ μ •μœ€/JungYoonShin](https://github.com/JungYoonShin) | [ꢌμž₯순/jsoonworld](https://github.com/jsoonworld) |

Expand Down
12 changes: 12 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ dependencies {
// ν…ŒμŠ€νŠΈ μ˜μ‘΄μ„±
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testRuntimeOnly 'com.h2database:h2'

// PostgreSQL
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
Expand All @@ -58,6 +59,17 @@ dependencies {

// Gson
implementation 'com.google.code.gson:gson:2.8.6'

// Spring WebFlux
implementation 'org.springframework.boot:spring-boot-starter-webflux'

// Resilience4j
implementation 'io.github.resilience4j:resilience4j-spring-boot3:2.1.0'
implementation 'io.github.resilience4j:resilience4j-reactor:2.1.0'

// Spring Batch
implementation 'org.springframework.boot:spring-boot-starter-batch'

}

//QueryDSL 초기 μ„€μ •
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableJpaAuditing
@SpringBootApplication
@EnableScheduling
public class TerningserverApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
package org.terning.terningserver.controller;
package org.terning.terningserver.auth.api;

import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import org.terning.terningserver.controller.swagger.AuthSwagger;
import org.terning.terningserver.domain.Filter;
import org.terning.terningserver.dto.auth.request.SignInRequestDto;
import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto;
import org.terning.terningserver.dto.auth.request.SignUpRequestDto;
import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto;
import org.terning.terningserver.dto.auth.response.SignInResponseDto;
import org.terning.terningserver.dto.auth.response.SignUpFilterResponseDto;
import org.terning.terningserver.dto.auth.response.SignUpResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.service.AuthService;

import static org.terning.terningserver.exception.enums.SuccessMessage.*;
import org.terning.terningserver.auth.application.AuthService;
import org.terning.terningserver.auth.dto.request.SignInRequest;
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
import org.terning.terningserver.auth.dto.response.AccessTokenGetResponseDto;
import org.terning.terningserver.auth.dto.response.SignInResponse;
import org.terning.terningserver.auth.dto.response.SignUpResponseDto;
import org.terning.terningserver.common.exception.dto.SuccessResponse;

import static org.terning.terningserver.auth.common.success.AuthSuccessCode.SUCCESS_SIGN_IN;
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_REISSUE_TOKEN;
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_OUT;
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP;
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_SIGN_UP_FILTER;
import static org.terning.terningserver.common.exception.enums.SuccessMessage.SUCCESS_WITHDRAW;


@RestController
Expand All @@ -28,13 +30,11 @@ public class AuthController implements AuthSwagger {
private final AuthService authService;

@PostMapping("/sign-in")
public ResponseEntity<SuccessResponse<SignInResponseDto>> signIn(
public ResponseEntity<SuccessResponse<SignInResponse>> signIn(
@RequestHeader("Authorization") String authAccessToken,
@RequestBody SignInRequestDto request
@RequestBody SignInRequest request
) {
val signInResponse = authService.signIn(authAccessToken, request);

return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_IN, signInResponse));
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_IN, authService.signIn(authAccessToken, request)));
}

@PostMapping("/token-reissue")
Expand All @@ -51,20 +51,16 @@ public ResponseEntity<SuccessResponse<SignUpResponseDto>> signUp(
@RequestHeader("Authorization") String authId,
@RequestBody SignUpRequestDto request
) {

SignUpResponseDto signUpResponseDto = authService.signUp(authId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_UP, signUpResponseDto));
}

@PostMapping("/sign-up/filter")
public ResponseEntity<SuccessResponse<SignUpFilterResponseDto>> filter(
public ResponseEntity<SuccessResponse> registerUserFilter(
@RequestHeader("User-Id") Long userId,
@RequestBody SignUpFilterRequestDto request
) {
Filter newFilter = authService.createAndSaveFilter(request);

authService.connectFilterToUser(userId, newFilter.getId());

authService.registerFilterWithUser(userId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_SIGN_UP_FILTER));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.terning.terningserver.controller.swagger;
package org.terning.terningserver.auth.api;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -7,23 +7,22 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.terning.terningserver.dto.auth.request.SignInRequestDto;
import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto;
import org.terning.terningserver.dto.auth.request.SignUpRequestDto;
import org.terning.terningserver.dto.auth.response.AccessTokenGetResponseDto;
import org.terning.terningserver.dto.auth.response.SignInResponseDto;
import org.terning.terningserver.dto.auth.response.SignUpFilterResponseDto;
import org.terning.terningserver.dto.auth.response.SignUpResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.auth.dto.request.SignInRequest;
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
import org.terning.terningserver.auth.dto.response.AccessTokenGetResponseDto;
import org.terning.terningserver.auth.dto.response.SignInResponse;
import org.terning.terningserver.auth.dto.response.SignUpResponseDto;
import org.terning.terningserver.common.exception.dto.SuccessResponse;

@Tag(name = "Auth", description = "μ†Œμ…œ 둜그인 및 νšŒμ›κ°€μž… API")
public interface AuthSwagger {

@Operation(summary = "μ†Œμ…œ 둜그인", description = "AuthType에 λ§žλŠ” μ†Œμ…œ 둜그인 API")
ResponseEntity<SuccessResponse<SignInResponseDto>> signIn(
ResponseEntity<SuccessResponse<SignInResponse>> signIn(
@Parameter(name = "Authorization", description = "", example = "authAccessToken")
@RequestHeader("Authorization") String authAccessToken,
@RequestBody SignInRequestDto request
@RequestBody SignInRequest request
);

@Operation(summary = "토큰 μž¬λ°œκΈ‰", description = "토큰 μž¬λ°œκΈ‰ API")
Expand All @@ -33,7 +32,7 @@ ResponseEntity<SuccessResponse<AccessTokenGetResponseDto>> reissueToken(
);

@Operation(summary = "μ‚¬μš©μž 필터링 정보 생성", description = "μ‚¬μš©μž 필터링 정보 생성 API")
ResponseEntity<SuccessResponse<SignUpFilterResponseDto>> filter(
ResponseEntity<SuccessResponse> registerUserFilter(
@Parameter(name = "User-Id", description = "", example = "userId")
@RequestHeader("User-Id") Long userId,
@RequestBody SignUpFilterRequestDto request
Expand All @@ -53,6 +52,4 @@ ResponseEntity<SuccessResponse> signOut(
@Operation(summary = "κ³„μ •νƒˆν‡΄", description = "κ³„μ •νƒˆν‡΄ API")
ResponseEntity<SuccessResponse> withdraw(
@AuthenticationPrincipal Long userId);


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.terning.terningserver.auth.application;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.terning.terningserver.auth.application.reissue.AuthReissueService;
import org.terning.terningserver.auth.application.signin.AuthSignInService;
import org.terning.terningserver.auth.application.signout.AuthSignOutService;
import org.terning.terningserver.auth.application.signup.AuthSignUpService;
import org.terning.terningserver.auth.application.withdraw.AuthWithdrawService;
import org.terning.terningserver.auth.dto.request.SignInRequest;
import org.terning.terningserver.auth.dto.request.SignUpFilterRequestDto;
import org.terning.terningserver.auth.dto.request.SignUpRequestDto;
import org.terning.terningserver.auth.dto.response.AccessTokenGetResponseDto;
import org.terning.terningserver.auth.dto.response.SignInResponse;
import org.terning.terningserver.auth.dto.response.SignUpResponseDto;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class AuthService {

private final AuthSignInService authSignInService;
private final AuthSignUpService authSignUpService;
private final AuthSignOutService authSignOutService;
private final AuthWithdrawService authWithdrawService;
private final AuthReissueService authReissueService;

@Transactional
public SignInResponse signIn(String authAccessToken, SignInRequest request) {
SignInResponse signInResponse = authSignInService.signIn(authAccessToken, request);
return signInResponse;
}

@Transactional
public SignUpResponseDto signUp(String authId, SignUpRequestDto request) {
SignUpResponseDto signUpResponseDto = authSignUpService.signUp(authId, request);
return signUpResponseDto;
}

@Transactional
public void registerFilterWithUser(Long userId, SignUpFilterRequestDto request) {
authSignUpService.registerFilterWithUser(userId, request);
}

@Transactional
public void signOut(long userId) {
authSignOutService.signOut(userId);
}

@Transactional
public void withdraw(long userId) {
authWithdrawService.withdraw(userId);
}

@Transactional
public AccessTokenGetResponseDto reissueToken(String refreshToken) {
AccessTokenGetResponseDto accessTokenGetResponseDto = authReissueService.reissueToken(refreshToken);
return accessTokenGetResponseDto;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.terning.terningserver.auth.application.reissue;

import org.terning.terningserver.auth.dto.response.AccessTokenGetResponseDto;

public interface AuthReissueService {
AccessTokenGetResponseDto reissueToken(String refreshToken);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.terning.terningserver.auth.application.reissue;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.terning.terningserver.common.security.jwt.application.JwtTokenManager;
import org.terning.terningserver.user.domain.Token;
import org.terning.terningserver.user.domain.User;
import org.terning.terningserver.auth.dto.response.AccessTokenGetResponseDto;
import org.terning.terningserver.common.exception.CustomException;
import org.terning.terningserver.common.security.jwt.auth.TokenExtractor;
import org.terning.terningserver.user.repository.UserRepository;

import static org.terning.terningserver.common.exception.enums.ErrorMessage.FAILED_TOKEN_REISSUE;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class AuthReissueServiceImpl implements AuthReissueService {

private final JwtTokenManager jwtTokenManager;
private final UserRepository userRepository;

@Override
public AccessTokenGetResponseDto reissueToken(String refreshToken) {
User user = findUserByRefreshToken(refreshToken);
Token accessToken = jwtTokenManager.issueAccessToken(user);
return AccessTokenGetResponseDto.of(accessToken);
}

private User findUserByRefreshToken(String refreshToken) {
return userRepository.findByRefreshToken(TokenExtractor.extractToken(refreshToken))
.orElseThrow(() -> new CustomException(FAILED_TOKEN_REISSUE));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.terning.terningserver.auth.application.signin;

import org.terning.terningserver.auth.dto.response.SignInResponse;
import org.terning.terningserver.auth.dto.request.SignInRequest;

public interface AuthSignInService {
SignInResponse signIn(String authAccessToken, SignInRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package org.terning.terningserver.auth.application.signin;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.terning.terningserver.auth.application.social.SocialAuthProvider;
import org.terning.terningserver.auth.application.social.SocialAuthServiceManager;
import org.terning.terningserver.external.pushNotification.notification.NotificationUserClient;
import org.terning.terningserver.common.security.jwt.application.JwtTokenManager;
import org.terning.terningserver.user.domain.Token;
import org.terning.terningserver.user.domain.User;
import org.terning.terningserver.user.domain.AuthType;
import org.terning.terningserver.auth.dto.request.SignInRequest;
import org.terning.terningserver.auth.dto.response.SignInResponse;
import org.terning.terningserver.user.repository.UserRepository;

@Service
@RequiredArgsConstructor
public class AuthSignInServiceImpl implements AuthSignInService {

private final SocialAuthServiceManager socialAuthServiceManager;
private final JwtTokenManager jwtTokenManager;
private final UserRepository userRepository;
private final NotificationUserClient notificationUserClient;
// private final FcmTokenValidationClient fcmTokenValidationClient;

@Transactional
@Override
public SignInResponse signIn(String authAccessToken, SignInRequest request) {
String authId = getAuthId(request.authType(), authAccessToken);
User user = findUserByAuthIdAndType(authId, request.authType());

if (user == null) {
// return SignInResponse.of(null, authId, request.authType(), null, false);
return SignInResponse.of(null, authId, request.authType(), null);
}

Token token = jwtTokenManager.generateToken(user);
user.updateRefreshToken(token.getRefreshToken());

// boolean fcmReissueRequired = fcmTokenValidationClient.requestFcmTokenValidation(user.getId());

if (request.fcmToken() != null && !request.fcmToken().trim().isEmpty()) {
notificationUserClient.createOrUpdateUser(user, request.fcmToken());
}

// return SignInResponse.of(token, authId, request.authType(), user.getId(), fcmReissueRequired);
return SignInResponse.of(token, authId, request.authType(), user.getId());
}


private String getAuthId(AuthType authType, String authAccessToken) {
SocialAuthProvider provider = socialAuthServiceManager.getAuthService(authType);
return provider.getAuthId(authAccessToken);
}

private User findUserByAuthIdAndType(String authId, AuthType authType) {
return userRepository.findByAuthIdAndAuthType(authId, authType).orElse(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.terning.terningserver.auth.application.signout;

public interface AuthSignOutService {
void signOut(long userId);
}
Loading
Loading