-
Notifications
You must be signed in to change notification settings - Fork 1
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
๐ Readme v0.0.2 #26
Merged
Merged
Conversation
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
asn6878
approved these changes
Mar 29, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๊ณ ์ํ์ จ์ต๋๋ค :)
psychology50
added a commit
that referenced
this pull request
Aug 27, 2024
* chore: init project * feat: ๋ฉํฐ ๋ชจ๋ํ * feat: common-๊ณตํต ์ด๋ ธํ ์ด์ ์ ์ * docs: ํ๋ก์ ํธ ์ค๋ช ๋ฐ ๋ชจ๋ ๋ณ Convention๊ณผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์ ์์ฑ * docs: ํ๋ก์ ํธ readme ์ฌ์์ฑ * docs: ํ๋ก์ ํธ ์๊ฐ README ์คํ์ ์์ * docs: PULL_REQUEST_TEMPLATE.md ์์ฑ Co-authored-by: jinlee1703 <[email protected]> * fix: ํ ํ๋ฆฟ ๊ฒฝ๋ก ์์ * feat: 7-bit error code enum ๋ฐ interface ์ ์ && causedBy record ์ ์ * rename: ๊ณตํต ์์ธ ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค ์ฃผ์ ์ถ๊ฐ * feat: CausedBy ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ && rename: CausedBy ๋ฉ์๋๋ณ ์ฃผ์ ์ถ๊ฐ * rename: Domain Code ์ฃผ์ ์์ * rename: Field Code ์ฃผ์ ์์ * rename: CausedBy ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ช valueOf -> of๋ก ์์ * fix: CausedBy code ์๋ฆฟ์ ๊ฒ์ฆ ๋ก์ง ์์ && test: CausedBy ๊ฐ์ฒด 6๊ฐ์ง ํ ์คํธ ์ผ์ด์ค ์์ฑ * rename: CausedBy ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฃผ์ ์์ * โจ JwtProvider ์ธํฐํ์ด์ค ๋ฐ AT, RT Provider ๊ตฌํ์ฒด ์ ์ (#6) * chore: common ๋ชจ๋์ spring-core ์์กด์ฑ ์ฃผ์ && infra ๋ชจ๋์ jwt ์์กด์ฑ ์ฃผ์ * feat: Auth ์์ ์ค์ * feat: JwtProvider ์ธํฐํ์ด์ค ์ ์ * feat: domain & field zero ์์ ์์ฑ * feat: Jwt ์์ธ ์์ ์ค์ * feat: Jwt ์์ธ ํด๋์ค * fix: ReasonCode Zero bit ์ถ๊ฐ * feat: JwtErrorCodeUtil ์์ฑ * chore: application.yml profile ๋ถ๋ฆฌ * feat: AT, RT Qualifier ๋ชฉ์ ์ปค์คํ ์ด๋ ธํ ์ด์ ์์ฑ * chore: jwt secret key & expiration time ํ๊ฒฝ๋ณ์ ์ฃผ์ * rename: provider annotation ๋ค์ด๋ฐ ๋ณ๊ฒฝ -> ์ ๋ต * feat: common ๋ชจ๋์ DateUtil ์ถ๊ฐ * feat: access token claim dto && provider ์์ฑ * test: AccessTokenProvider test ์์ฑ * fix: test given์ ์ถ์ฝ * refactor: AT Claims key ์์๊ฐ์ผ๋ก ๋ช ์์ ํ๋ ์ง์ * feat: refresh token dto && payload key ์์ํ * feat: refresh token provider ์์ฑ * test: ์๋ช ์กฐ์ ํ ํฐ ์๋ฌ ๊ฒ์ฆ * rename: getSubInfoFromToken -> getJwtClaimsFromToken ๋ฉ์๋๋ช ๋ณ๊ฒฝ * rename: JwtProvider ์ฃผ์ ์์ ๋ฐ ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * fix: ํ ํฐ ๋ง๋ฃ์ ์์ธ ํธ๋ค๋ง * test: ํ ํฐ ๋ง๋ฃ ์, true ๋ฐํ ๊ฒ์ฌ ํ ์คํธ ์ฝ๋ ์ถ๊ฐ * fix: isTokenExpired() ๋ฉ์๋ ์์ธ ํธ๋ค๋ง ๋ก์ง ์์ : ํ ์คํธ ์ฑ๊ณต * โจ JDBC & JPA & QueryDsl Configuration ์ค์ (#7) * chore: mysql & jpa & queryDsl gradle ์์กด์ฑ ์ถ๊ฐ * chore: queryDsl generated ๋๋ ํ ๋ฆฌ git ์ถ์ ์ ๊ฑฐ * chore: jdbc, jpa application.yml ์ค์ ์ถ๊ฐ * chore: extenal-api ๋ชจ๋ application.yml ๊ทธ๋ฃน ์ถ๊ฐ * chore: jpa ์ค์ profile ๋ถ๋ฆฌ && profile ๊ทธ๋ฃน ์ถ๊ฐ * chore: infra ๋ชจ๋ application.yml ๊ทธ๋ฃน ์ถ๊ฐ * feat: Jpa config * feat: QueryDsl config * chore: EnalbeJpaAuditing auditorAwareRef ์ค์ ์ ๊ฑฐ * fix: config ๋๋ ํ ๋ฆฌ ์์ * Conventional Commit์ ์ํ Git Hooks ์ค์ (#8) * chore: commit-lint ๊ด๋ จ ํจํค์ง ์ค์น * chore: .gitignore์ node_modules ์ถ๊ฐ * chore: commit convention ๋ฑ๋ก * chore: commit-lint ์ ์ฉ * โจ Redis Configuration ์ค์ (#9) * chore: infra ๋ชจ๋ ๋ด redis ์์กด์ฑ ์ฃผ์ (api) * chore: domain ๋ชจ๋ ๋ด redis ์์กด์ฑ ์ฃผ์ (implementation) * chore: redis ํ๊ฒฝ๋ณ์ ์ค์ * feat: Domain Redis Connection Bean Qualify Annotation ์์ฑ * feat: Domain Redis CacheManager Qualify Annotation ์์ฑ * feat: Domain Redis Template Qualify Annotation ์์ฑ * chore: domain ๋ชจ๋ redis config ์์ฑ * feat: Infra Redis CacheManager Qualify Annotation ์์ฑ * feat: SecurityUser Redis CacheManager Qualify Annotation ์์ฑ * feat: Oidc Redis CacheManager Qualify Annotation ์์ฑ * chore: infra ๋ชจ๋ cache config ์ค์ * โจ OpenAPI Swagger config ์ค์ (#10) * chore: external-api ๋ชจ๋ springdoc-openapi 2.4.0 ์์กด์ฑ ์ฃผ์ * chore: external-api ๋ชจ๋ ๋ด openapi ์ค์ ์ถ๊ฐ * chore: swagger config ์์ฑ * fix: application profile prod -> dev * โ๏ธ Reason Code Zero bit ์ ๊ฑฐ โ 500๋ฒ๋ Zero bit ์์ ์ถ๊ฐ (#11) * fix: reason code zero bit ์ ๊ฑฐ && 500๋ฒ๋ 0๋ฒ bit ์์ ์ถ๊ฐ * test: caused-by-test ์์ ์๋ฌ์ฝ๋ ์์ (ํต๊ณผ ํ์ธ) * fix: jwt-error-code ๋ณ๊ฒฝ๋ reason code๋ก ์์ * Swagger ๊ด๋ จ ํ๊ฒฝ ๋ณ์ ์คํ ์์ (#12) * โจ ์๋ต ๊ณตํตํ ๋ฐ ์ ์ญ ์์ธ ์ฒ๋ฆฌ (#14) * chore: test api directory .gitignore ๊ฒฝ๋ก ์ถ๊ฐ * feat: ์ฑ๊ณต ์๋ต ํด๋์ค ์ ์ * feat: error-response ๊ณตํต ์๋ต ํด๋์ค ์์ฑ * fix: success ์๋ต nocontent() ์๋ต null -> empty object * feat: method argument not valid ์ ์ญ ์์ธ ์ฒ๋ฆฌ * fix: reason 422 error type mismatch ์ฝ๋ ์ถ๊ฐ * feat: missing request header ์ ์ญ ์์ธ ์ฒ๋ฆฌ * feat: request json parsing ์คํจ ์ ์ญ ์์ธ ์ฒ๋ฆฌ * feat: missing request parameter ์ ์ญ ์์ธ ์ฒ๋ฆฌ * feat: ์กด์ฌํ์ง ์๋ url ์์ฒญ ์ ์ญ ์์ธ ์ฒ๋ฆฌ * feat: 500 internal server error ์ ์ญ ์์ธ ์ฒ๋ฆฌ * feat: npe & exception ์ ์ญ ์์ธ ์ฒ๋ฆฌ * fix: response status annotation ์ฒ๋ฆฌ * style: intellij code convention setting ์ถ๊ฐํ์ฌ reformat * โจ User Domain ์ค์ (#15) * feat: db, application ํ์ ํ๋ณํ ์ธํฐํ์ด์ค ์์ฑ * feat: code <-> enum ๋ณํ util ์์ฑ * feat: custom converter ๊ตฌํ์ ์ํ ์ถ์ ํด๋์ค ์์ฑ * style: api & domain package ๊ฒฝ๋ก ์์ * feat: create, update auditable ์ถ์ ํด๋์ค ์์ฑ * feat: role type enum & conveter ์ ์ * feat: visibility type enum & conveter ์ ์ * rename: visibility to profile-visibility ํด๋์ค๋ช ์์ * fix: converter ์์ฑ์ ์์ * feat: user entity ์์ฑ * feat: user jpa data repository ์์ฑ * fix: ์๋ฌ ์ฒด๊ณ 7์๋ฆฌ ์ -> 4์๋ฆฌ ์ * test: 4์๋ฆฌ์ ์๋ฌ ์ฒด๊ณ ๊ธฐ๋ฐ ํ ์คํธ ์ฝ๋ ์์ * fix: reason code 400๋ฒ๋ 4๋ฒ invalid request ์ถ๊ฐ * feat: user error code & exception ์ ์ * feat: user domain service ์์ฑ * feat: user domain service create ๋ฉ์๋ ์ถ๊ฐ * feat: user domain service exists ๋ฉ์๋ ์ถ๊ฐ * fix: jwt error code ๋ด์์ domain, field code ์ ๊ฑฐ * chore: query-dsl generated ๊ฒฝ๋ก .gitignore * fix: profile-visibility converter ์ค์ฃผ์ ์์ * fix: test api ์ญ์ * chore: ํจํค์ง ๊ฒฝ๋ก ์์ ์ผ๋ก ์ธํ test ํจํค์ง ๊ฒฝ๋ก ์์ * rename: caused by '7์๋ฆฌ ์๋ฌ์ฝ๋' ์ฃผ์ ์์ * โจ๏ธ ํ์๊ฐ์ API (#16) * feat: white space validator ์์ฑ * rename: not-white space ์ฃผ์ ์ถ๊ฐ * feat: ์ ํ๋ฒํธ ์ธ์ฆ ์์ฒญ dto ์์ฑ * rename: cerification -> verification ๋จ์ด ์์ * feat: refresh token redis entity ์์ฑ * feat: refresh token repository ์์ฑ * fix: refresh token ttl time unit seconds -> milliseconds * feat: refresh token service ๊ตฌํ * feat: ์ด๋ชจ์ง ์ ํจ์ฑ ๊ฒ์ฆ ์ด๋ ธํ ์ด์ ์์ฑ * feat: ํจ์ค์๋ ์ ํจ์ฑ ๊ฒ์ฆ ์ด๋ ธํ ์ด์ ์์ฑ * feat: ์ผ๋ฐ ํ์๊ฐ์ dto ์์ฑ * fix: ์ผ๋ฐ ํ์๊ฐ์ dto code ํ๋ ์ถ๊ฐ * feat: jwt tokens ํธ์ dto ํด๋์ค ์์ฑ * fix: refresh token ttl timeunit milliseconde -> seconds * feat: jwts ์์ฑ mapper ์ ์ * fix: refresh token provider primary bean ์ ๊ฑฐ * feat: cookie util ์์ฑ * style: jwts dto ํด๋์ค ํจํค์ง ๊ฒฝ๋ก ์์ * fix: jwt auth mapper ํ ํฐ ์์ฑ ๋ก์ง ์์ * feat: ํ์๊ฐ์ usecase ๊ตฌํ(์ธ์ฆ๋ฒํธ ๋ฏธํ์ธ) * feat: auth controller sign up api ๊ฐ๋ฐฉ * style: test ๋ชจ๋ ๋ด ๊ฒฝ๋ก ์์ * rename: sign-up dto ์ ํ๋ฒํธ ์์ ๋ฌธ์ ์์ * fix: phone pattern \n ์ ๊ฑฐ * fix: not empty -> not blank validation check ๋ณ๊ฒฝ * fix: cookie util max age int -> long * fix: auth controller cookie util ์์กด์ฑ ์ฃผ์ * test: auth controller 7๊ฐ์ง ์๋๋ฆฌ์ค ์ ํจ์ฑ ๊ฒ์ฌ * test: ํ๋ ๋๋ฝ ์๋๋ฆฌ์ค ์ถ๊ฐ && cookie ํค๋ ๊ฒ์ฆ ์์ * fix: jwt mapper์์ rt provider์ access claim -> refresh claim ์์ * Dockfile ์์ฑ (#17) * chore: .gitignore์ .env ํ์ผ ๊ฒฝ๋ก ์ถ๊ฐ * feat: dockerfile ์์ฑ * fix: dockerfile์ profile์ local์์ dev๋ก ์์ * โจ ์ผ๋ฐ ํ์๊ฐ์ ์ ํ๋ฒํธ ์ธ์ฆ API (#18) * feat: ์ธ์ฆ๋ฒํธ ์ก์ dto ์์ฑ * feat: ์ธ์ฆ๋ฒํธ ์ ์ก & ๊ฒ์ฆ API ์ค๊ณ * chore: domain ๋ชจ๋ redis unit test ๋ชฉ์ embedded-redis ์์กด์ฑ ์ถ๊ฐ * chore: redis test ๋ผ์ด๋ธ๋ฌ๋ฆฌ embedded -> container * test: redis container config ์์ฑ * chore: domain ๋ชจ๋ test application.yml ์์ฑ * chore: redis template bean primary ์ถ๊ฐ * feat: phone validation code(ํ์๊ฐ์ , ์์ด๋/๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ) ์์ ์ง์ * test: phone validation repository ํ ์คํธ ์์ฑ * feat: phone validation repository ์์ฑ * test: phone validation repository ์ญ์ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * feat: phone verification service ์์ฑ * feat: validation code converter ์์ฑ * feat: web config ์ค์ * feat: ์ ํ๋ฒํธ ์ธ์ฆ/๊ฒ์ฆ dto codetype ํ๋ ์ถ๊ฐ * fix: phone verification repository save ์, expires_at ๋ฐํ * fix: phone verification service create ๋ฉ์๋, expires_at ๋ฐํ * rename: read by phone error log ๋ฌธ๊ตฌ ์์ * feat: phone verification ์๋ฌ ์ฝ๋ ์ ์ * feat: phone verification ์๋ฌ ํด๋์ค ์ ์ * feat: sns dto ํด๋์ค ์ ์ธ * feat: sms provider ์ธํฐํ์ด์ค ์ ์ * rename: request time -> request at ๋ณ์๋ช ์์ * feat: infra module component scan ๋ชฉ์ ์ application ํด๋์ค ์์ฑ * feat: aws sms provider mock ๊ตฌํ์ฒด ์์ฑ * style: infra ์์ ํจํค์ง pennyway ์ถ๊ฐ -> ๋๋ ํ ๋ฆฌ ์ด๋ * rename: code -> phone-verificatio-code ํด๋์ค๋ช ์์ * fix: ์ฌ์ฉ์์๊ฒ code type ์ ๋ ฅ๋ฐ๋ ํ๋ & converter ์ ๊ฑฐ * fix: ์ธ์ฆ๋ฒํธ ๊ฒ์ฆ dto๋ด code ํ๋ ๋ณต๊ตฌ * feat: phone verification mapper ํด๋์ค ์ ์ * feat: ์ฝ๋ ๋ถ์ผ์น ์ error ๋ฐํํ๋๋ก ์์ * rename: saveCode -> sendCode * feat: ์ธ์ฆ๋ฒํธ ๊ฒ์ฆ ์๋ต dto ์์ฑ * rename: of -> value of * feat: auth use case ์ ํ๋ฒํธ ์ธ์ฆ ์ถ๊ฐ * fix: global exception handler๋ด global error exception status ์ฝ์ ๋ฉ์๋ ์์ * rename: send_time, expire_time -> send_at, expires_at ํ๋๋ช ์์ * fix: ์ฑ๊ณต ์๋ต ์ํ์ฝ๋ 2000000 -> 2000 ์์ * fix: hash table -> value && ttl ์ ์ฉ * feat: user find by phone ๋ฉ์๋ ์ถ๊ฐ * fix: ์ธ์ฆ๋ฒํธ ๊ฒ์ฆ ์ oauth user ์ฌ๋ถ ํ์ธ ํ๋ ์ถ๊ฐ * fix: user notify ํ๋ feed-comment-notify -> chat-notify ์์ * feat: user ๊ณ์ ์ฐ๋ helper class ์ ์ * feat: ์ ํ๋ฒํธ ์ธ์ฆ ์ฑ๊ณต ์ ttl rollback ๋ฉ์๋ ์ถ๊ฐ * fix: transaction ๋ด exception ๋ฐ์ ์ rollback -> sync helper์ transaction ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * fix: user auth use case ์์กด์ฑ ์ฃผ์ ๋ฐ ๋ถ๊ธฐ ์ฒ๋ฆฌ ๋ก์ง ์ถ๊ฐ * test: auth controller validation test ๊ฒฝ๋ก ์์ * rename: phone verification mapper ๋ฉ์๋ ์ฃผ์ ์ถ๊ฐ * test: user sync helper ํด๋์ค test ์์ฑ * fix: ์ด๋ฏธ ํ์๊ฐ์ ํ ์ ์ ์ธ ๊ฒฝ์ฐ, ์ธ์ฆ ์ฝ๋ cache ์ ๊ฑฐ * fix: verify-code-res ๊ธฐ์กด ์ฌ์ฉ์ ์กด์ฌํ ์ ๋ฐํ ํ๋ ์ถ๊ฐ * fix: user-sync-helper์์ oauth ๊ณ์ ์์ผ๋ฉด username ๋ฐํ * fix: auth user case ์ผ๋ฐ ํ์๊ฐ์ ์ด๋ ฅ ์๊ณ , oauth ๊ณ์ ์์ผ๋ฉด username ๋ฐํ * rename: phone verification repository remove() -> delete() * rename: phone-verification-code -> phone-verification-type * fix: web config ์ ๊ฑฐ * CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ (#19) * feat: ci workflow ์์ฑ * feat: cd workflow ์์ฑ * fix: mysql actions step ์ญ์ * fix: docker image ํ๊ทธ ์ ๊ฑฐ * fix: cd ํ์ดํ๋ผ์ธ trigger ๋ธ๋์น๋ช ์์ (develop->dev) * CD Workflow ์์ (#21) * feat: ci workflow ์์ฑ * feat: cd workflow ์์ฑ * fix: mysql actions step ์ญ์ * fix: docker image ํ๊ทธ ์ ๊ฑฐ * fix: cd ํ์ดํ๋ผ์ธ trigger ๋ธ๋์น๋ช ์์ (develop->dev) * fix: gradle build ๊ณผ์ ์ถ๊ฐ * fix: gradle build ๊ณผ์ ์ถ๊ฐ * fix: cd ํ์ดํ๋ผ์ธ ์์ ์์ * fix: cd ํ์ดํ๋ผ์ธ ์์ ์์ ์ฌํญ ์ญ์ * fix: gradlew ๊ถํ ์์ * fix: ํ ์คํธ ์คํจ ์ค๋ฅ ํด๊ฒฐ * โจ Spring Security ์ด๊ธฐ ์ค์ (+ Test case ์๋ฌ ๊ด๋ จ) (#22) * chore: external-api ๋ชจ๋ spring boot starter security ์์กด์ฑ ์ฃผ์ * chore: security config ์ค์ * chore: method security config ์ค์ * fix: ๊ธฐ์กด api ์ธ๊ฐ ๊ถํ is-anonymous๋ก ์ ํ * fix: security config ์ธ์ฆ, ์ธ๊ฐ ์์ธ ํํฐ ์ ๊ฑฐ (๋ก๊ทธ์ธ ์์ ์ ์ถ๊ฐ) * fix: user sync helper oauth ๋ฐํ ์์ * test: user sync helper ๋ฉ์๋ ๋ฐํ ํ์ ์์ * test: username ๋ฐํ ๊ฒ์ฆ ์ถ๊ฐ * fix: pennyway infra application @spring boot application ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * test: ์ฑ๊ณต ์๋ต ๊ฐ์ฒด code ๊ฐ 2000์ผ๋ก ์์ * chore: spring security test ์์กด์ฑ ์ฃผ์ * test: auth controller ์ฑ๊ณต ์๋ต set cookie ํค๋ ์กด์ฌ ์ฌ๋ถ ํ๋จ์ผ๋ก ์์ * chore: sub project test ๋ธ๋ญ ์ถ๊ฐ * feat: security user details & service ์ ์ * chore: local ํ๊ฒฝ ๋ด logging level ์ ๋ณด ์ถ๊ฐ * fix: user sync helper transaction ์ ๊ฑฐ * โจ ๋ก๊ทธ์ธ API (#23) * feat: ์ผ๋ฐ ๋ก๊ทธ์ธ ์์ฒญ dto ์์ฑ * feat: user repository find-by-username ๋ฉ์๋ ์ถ๊ฐ * feat: user service read-user-by-username ๋ฉ์๋ ๊ตฌํ * feat: ์ ์ ๋น๋ฐ๋ฒํธ ์์ธ ์ถ๊ฐ * feat: user sync helper read-user-if-valid ๋ฉ์๋ * feat: auth user case๋ด sign in ๋ฉ์๋ ์ถ๊ฐ * feat: sign in api ์ถ๊ฐ * test: sign in test case ์ถ๊ฐ * fix: sign in dto ์ ๊ทํํ์ ๊ฒ์ฌ ์ ๊ฑฐ * โ๏ธ ํ์๊ฐ์ API ๊ฐ์ (+ Domain Service Runtime ์์ธ ๋ฐ์ ์ ๊ฑฐ) (#24) * feat: sign up dto -> phone verification dto from ๋ฉ์๋ ์ถ๊ฐ * fix: helper ํด๋์ค ์ฑ ์๊ณผ ์ญํ ๋ถ๋ฆฌ * rename: user sync helper ๋ฉ์๋๋ช ๋ช ์์ ์ผ๋ก ์์ * fix: sign up dto password ์ํธํ ํ entity ์์ฑ * fix: ์ผ๋ฐ ํ์๊ฐ์ , ๋ก๊ทธ์ธ ์๋๋ฆฌ์ค helper ํด๋์ค ๋ถ๋ฆฌ * fix: ์ผ๋ฐ ํ์๊ฐ์ , oauth ๊ณ์ ์ฐ๋ ์๋๋ฆฌ์ค์ ๋ง๊ฒ dto ๋ถ๋ฆฌ ํ info ํด๋์ค๋ก ํตํฉ * fix: oauth ์ฐ๋ dto -> phone, code ํ๋ ์ถ๊ฐ * fix: sign up api ํ์๊ฐ์ ์์ฒญ ์ธ์ ์์ * fix: ์๋ช ํฌํผ ํด๋์ค ๋งค๊ฐ๋ณ์ ์์ * feat: user domain ๋น๋ฐ๋ฒํธ ์ ๋ฐ์ดํธ ๋ฉ์๋ ์ถ๊ฐ * fix: dto์์ ์ ์ ์์ฑ ์, password update at ๊ฐฑ์ * feat: ์ผ๋ฐ ํ์๊ฐ์ ๋์ฐ๋ฏธ ๋ฉ์๋ ๋ถ๊ธฐ ์ฒ๋ฆฌ * rename: helper, mapper ํด๋์ค ์ฌ์ง์ * fix: ์ ํ๋ฒํธ ์์ฒญ ์ฝ๋ ์ ์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์ ํ์ ๋ณ๊ฒฝ * rename: user general sign mapper ๋ฉ์๋ create -> save(์์ฑ ํน์ ์์ ๊ธฐ๋ฅ) * fix: sync with oauth dto์ to info ๋ฉ์๋ ์ธ์ ์ ๊ฑฐ * feat: ๊ธฐ์กด ์์ ๊ณ์ ์ฐ๋ api ์ถ๊ฐ && ์ธ์ฆ ์๋ต ์์ฑ ๋์ฐ๋ฏธ ๋ฉ์๋ ๋ถ๋ฆฌ * feat: ํ์๊ฐ์ ์๋๋ฆฌ์ค ๊ฐ์ * test: user sync mapper test ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์ * test: auth controller validation test ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์ * test: user general sign mapper test ๋ถ๋ฆฌ * fix: domain service layer ์์ธ ์ฒ๋ฆฌ ์ ๊ฑฐ * refactor: user sync mapper ์์ธ ์ฒ๋ฆฌ ๋ก์ง ์์ * refactor: user details service imple ์์ธ ์ฒ๋ฆฌ ๋ก์ง ์์ * refactor: user general sign mapper ์์ธ ์ฒ๋ฆฌ ๋ก์ง ์์ * refactor: user sync mapper์์ ๋น๊ฒ์ฌ ์์ธ ๋ฐ์ ์ ๊ฑฐ * fix: user sync mapper ์ ์ธ์ transaction ์ถ๊ฐ * refactor: auth use case ๋น๊ฒ์ฌ ์์ธ ํธ๋ค๋ง ์ ๊ฑฐ * test: test optional ๋ฐํ ์ ์ฉ * rename: user sync mapper ์ฃผ์ ์์ * โจ Jwt ์ธ์ฆ ํํฐ (#25) * feat: 403 ์๋ฌ ํธ๋ค๋ฌ ์์ฑ * feat: 401 ์๋ฌ ํธ๋ค๋ฌ ์์ฑ * feat: security config์ ์ธ์ฆ, ์ธ๊ฐ ํํฐ bean ๋ฑ๋ก * fix: ์ธ์ฆ, ์ธ๊ฐ ํํฐ ๋ก๊ทธ ๋ ๋ฒจ ์กฐ์ error -> warn * feat: jwt ์์ธ ํํฐ ์์ฑ * feat: forbedden token entity ์ ์ * feat: forbedden token repository ์์ฑ * feat: forbidden token service ์์ฑ * feat: jwt ์ธ์ฆ ํํฐ ์ถ๊ฐ * fix: user details service ๊ตฌํ์ ์ฃผ์ -> ์ธํฐํ์ด์ค ์ฃผ์ * chore: security filter config ์ค์ * chore: jwt security config ์ค์ * chore: security config ์ปค์คํ ์์ธ ํธ๋ค๋ฌ ์ค์ * feat: security user to string() ์ฌ์ ์ * chore: security config ์ค์ * fix: access denied exception import ๊ฒฝ๋ก ์์ * fix: token ํ์ฑ ์๋ฌ ํด๊ฒฐ * style: ์์ธ ๋ก๊ทธ ์์น ์์ * feat: global exception handler no-resource-found-exception ํธ๋ค๋ง * fix: security config ๋ถํ์ํ ์์กด์ฑ ์ฃผ์ ์ ๊ฑฐ * feat: refresh api ๊ฐ๋ฐฉ * fix: refresh token annotaion ๋น ์ด๋ฆ ์์ * feat: refresh token ํ์ทจ ์์ธ ์ถ๊ฐ * fix: refresh token ํ์ทจ ์๋๋ฆฌ์ค ํธ๋ค๋ง * fix: taken way token reason code 403์ ์ด์ ์ฝ๋๋ก ๋ณ๊ฒฝ * fix: jwt ์ธ์ฆ ํํฐ ๋ด ๋ฉ์๋ ๋ช ์์ final ๋งค๊ฐ๋ณ์ ์ ๊ฑฐ * ๐ Readme v0.0.2 (#26) * docs: erd ์ถ๊ฐ * docs: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์์ * docs: version ๊ด๋ฆฌ ์ค๋ช ์ถ๊ฐ * โ๏ธ Swagger + Security ์์ (#30) * rename: ๋ก๊ทธ์ธ ์์ฒญ dto @schema ์ถ๊ฐ * chore: server domain ํ๊ฒฝ ์ค์ external-api -> infra * chore: server domain property bean ๋ฑ๋ก * chore: application-infra server ๋ธ๋ญ ์์ * fix: swagger server url ํ๊ฒฝ๋ณ์ ๊ฒฝ๋ก ์์ * chore: cors ์ค์ ์ถ๊ฐ * refactor: cors ์ค์ ํ์ผ ๋ถ๋ฆฌ * rename: jwt security config -> security adpater config * chore: bcryptpasswordencoder -> passwordencoder * fix: ๋์ผํ ํด๋์ค๋ช ์ DTO @Schema name ์์ฑ ์ค์ * refactor: ์ด์ ํ๊ฒฝ ๋ณ security filter chain ์ค์ ๋ถ๋ฆฌ * chore: external api ๋ชจ๋ ๋ด jackson nullable module ์ข ์์ฑ ์ถ๊ฐ * refactor: security auth config ๋ถ๋ฆฌ * refactor: security config swagger endpoint ํ๋กํ ๋ณ ์ค์ ๋ถ๋ฆฌ * feat: simple granted authority ์ญ์ง๋ ฌํ ์ด์๋ก custom granted authority ํด๋์ค ์ ์ธ * chore: external-api ๋ด jackson config ์ค์ * fix: security user details ์ญ์ง๋ ฌํ ๋ฌธ์ ํด๊ฒฐ * fix: security config ๊ฐ๋ฐ ํ๊ฒฝ ์ต์ ์์ * fix: custom granted authority equals ์์ * chore: docker hub ๊ฒฝ๋ก ์์ * โจ ๋๋ค์ ์ค๋ณต๊ฒ์ฌ API (#31) * rename: auth controller '์ผ๋ฐ ํ์ ๊ฐ์ ' ์ ํ๋ฒํธ ์ธ์ฆ swagger ๋ฌธ์ ์ ๋ช ์ * feat: ๋๋ค์ ์ค๋ณต ๊ฒ์ฌ domain service ๋ฉ์๋ ์ถ๊ฐ * feat: username ์ค๋ณต ๊ฒ์ฌ api ๊ฐ๋ฐฉ * fix: ์ค๋ณต ๊ฒ์ฌ ์ฒดํฌ url์ anonymous endpoints์ ์ถ๊ฐ * fix: swagger endpoints์ read only public endpoints ๋ถ๋ฆฌ * fix: ๋๋ค์ ์ค๋ณต ๊ฒ์ฌ ์ธ๊ฐ ๊ธฐ์ค permit-all๋ก ๋ณ๊ฒฝ * rename: is-exist-nickname -> is-exist-username * rename: auth check controller ๋งค๊ฐ๋ณ์๋ช username์ผ๋ก ์์ * โจ OIDC ๊ธฐ๋ฅ ์ธํฐํ์ด์คํ (+ component scan์ ๋ํ ๊ณ ์ฐฐ) (#32) * chore: infra ๋ชจ๋ ๋ด feign ์์กด์ฑ ์ฃผ์ * feat: oidc dto ์ ์ * feat: oidc public key response ๊ฐ์ฒด ์ ์ * feat: oauth oidc client ์ธํฐํ์ด์ค ์ ์ * feat: oidc token parsing provider ์ ์ * feat: oidc provider ํ๊ฒฝ ๋ณ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ธํฐํ์ด์ค ์ ์ * rename: oidc ์นด๋ฉ์ผ์ด์ค๋ก ๋ณ๊ฒฝ * chore: provider ๋ณ jwks-uri ๋ฐ secret ํ๊ฒฝ๋ณ์ ์ฃผ์ * feat: apple, google, kakao oidc ํ๊ฒฝ ๋ณ์ ์ฃผ์ * feat: oidc configuration properties config ์ธํ * feat: default feign config ์ค์ * feat: common module ๋ด map utils ์์ฑ * rename: oidc cache manager ๋น ์ด๋ฆ ์คํ ์์ * fix: oidc properties ํ๋ final ๋ณ๊ฒฝ * fix: infra properties ์ค์ api ๋ชจ๋๋ก ์ด์ * feat: provider ๋ณ feign interface ์ ์ * chore: infra application ํจํค์ง ๊ฒฝ๋ก ์์ * chore: cache config @configuration ์ด๋ ธํ ์ด์ ์ฌ์ฝ์ * chore: infra config -> api ๋ชจ๋์์ ์ฌ์ฉํ infra ๋ชจ๋์ properties ๋ช ์ * feat: infra config maker ์ธํฐํ์ด์ค ๋ฐ ์ด๊ฑฐ ํ์ ์์ฑ * feat: infra ๋ชจ๋ confg import selector ์ ์ * feat: infra๋ฅผ ์์กดํ๋ ๋ชจ๋์์ ๋์ ์ผ๋ก ์ธํ๋ผ ๊ตฌ์ฑ์ ๋ช ์์ ์ผ๋ก ์ ํํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์์ฑ * feat: oidc ๋์ฐ๋ฏธ ํด๋์ค ์์ฑ * fix: cache config ํด๋์ค ๋ง์ปค ์ธํฐํ์ด์ค ๊ตฌํ ์ ๊ฑฐ * fix: client-secret -> secret ํ๋ ๋ณ๊ฒฝ * chore: feign config ์ค์ * fix: cache config @configuration ์ด๋ ธํ ์ด์ ๋ณต๊ตฌ * โจ OAuth OIDC ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ API (#33) * feat: provider enum ํด๋์ค ์ ์ * feat: provider converter ์ ์ * feat: oauth domain ์ ์ * feat: provider exception ์ ์ * feat: provider request converter ์ ์ * feat: web config์ provider converter ๋ฑ๋ก * chore: infra ๋ชจ๋ httpclient ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ถ๊ฐ * feat: oauth ๋ก๊ทธ์ธ&ํ์๊ฐ์ dto ์ ์ * rename: getter ๋ฉ์๋๋ช ์ค oidc ์๋ฌธ์ํ * fix: oauth ๋ก๊ทธ์ธ ์ oauth id ํ๋ ์ถ๊ฐ * fix: oauth oidc helper ๋ฉ์๋ ์ถ๊ฐ * rename: provider exception -> oauth exception * feat: oauth id ๋ถ์ผ์น ์์ธ ์ถ๊ฐ * feat: oauth repository ์ ์ * feat: oauth repository ์์ ์์ด๋ & ์ ๊ณต์ ํ์ ๋ฉ์๋ ์ ์ธ * feat: oauth domain service ์ ์ * rename: provider converter ์์ธ ์ด๋ฆ ์์ * rename: oauth service get -> read * style: oauth exception api ๋ชจ๋ -> domain ๋ชจ๋ ์ด์ * rename: oauth error code ์ฃผ์ ํฌ๋งท ๋ณ๊ฒฝ * feat: oauth ๋งคํผํด๋์ค - ๋ก๊ทธ์ธ ๋ถ๊ธฐ์ฒ๋ฆฌ * feat: oauth ๋ก๊ทธ์ธ use case ๊ตฌํ * feat: oauth ๋ก๊ทธ์ธ ์ปจํธ๋กค๋ฌ ์ ์ * fix: cache config ๋ด ๋ถํ์ํ ์ค์ ์ถ๊ฐ ์ ๊ฑฐ * chore: infra ๋ชจ๋ redis ํ๊ฒฝ ๋ณ์ ์ฃผ์ * rename: oauth controller ์ค์จ๊ฑฐ ๋ฌธ์ ์ค๋ช ์ถ๊ฐ * feat: oauth API ์ค๊ณ * fix: ์ ํ๋ฒํธ ์ธ์ฆ oauth provider ๊ตฌ๋ถ * fix: ์ ํ ๋ฒํธ ์ธ์ฆ ์ด๊ฑฐ ํ์ oauth provider ์ถ๋ก ๋ฉ์๋ static์ผ๋ก ๋ณ๊ฒฝ * fix: ์ ํ๋ฒํธ ์ธ์ฆ ์ฝ๋ ์๋ต ๊ฐ์ฒด general, oauth ์ ์ ํฉํ ๋ฆฌ ๋ถ๋ฆฌ * fix: oauth ๋ถ๊ธฐ ์๋๋ฆฌ์ค์ ๋ฐ๋ฅธ dto ๊ตฌ๋ถ * fix: oauth api ์ค๊ณ ์์ * fix: aouth use case์ verify code ๋ฉ์๋ ๋ฐํ ํ์ verify code res๋ก ์์ * rename: ์ธ์ฆ ์ฝ๋ ๊ฒ์ฆ dto ์์ฑ ๋ฉ์๋ ๋ณ๊ฒฝ * feat: oauth provider signup๋ ์ ๋ณด ์กด์ฌ ์ ๋ฐํํ๋ ์๋ฌ์ฝ๋ ์ถ๊ฐ * feat: ์ฌ์ฉ์ ์์ด๋ & provider ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ ๋๋ฉ์ธ ์๋น์ค ๋ฉ์๋ ์ถ๊ฐ * feat: oauth ํ์๊ฐ์ ์์ฒญ์ phone ๊ฒ์ฆ dto๋ก ๋ณํํ๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * fix: ์์ ํ์๊ฐ์ ์ phone, code ํ์ ์ ๋ ฅ ํ๋ ์ถ๊ฐ * feat: user sync mapper ํด๋์ค ๋ด oauth ํ์๊ฐ์ ๋ถ๊ธฐ ๊ฒฐ์ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth use case ๋ฉ์๋ ์์ฑ * feat: ์์ ํ์๊ฐ์ ๋ถ๊ธฐ ๋ฑ๋ก ๋ก์ง ๊ตฌํ * feat: ์์ ํ์๊ฐ์ Use case ์์ฑ * rename: oauth controller ์ฃผ์ ์ ๊ฑฐ * rename: oauth api 1, 3๋ฒ ์์ธํ ์ค๋ช ์ ์ํ swagger ์ด๋ ธํ ์ด์ ์ถ๊ฐ * style: ํ๋ก๊ทธ๋๋ฐ ์ฝ๋์ ๋ฌธ์ ์ฃผ์ ๋ถ๋ฆฌ * docs: ์ธ์ฆ ์ฝ๋ ๊ฒ์ฆ ์์ธ ๋ฌธ์ ์์ * fix: ํด๋ํฐ ๋ง๋ฃ ํน์ ๋ฏธ๋ฑ๋ก ์์ธ reason code 401->404 ๋ณ๊ฒฝ * docs: ์ ํ๋ฒํธ ์ธ์ฆ ์๋ต ํฌ๋งท ์์ * โจ External-api ๋ชจ๋ ํตํฉ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ (#34) * chore: test profile yml ์์ฑ * chore: external-api test ํจํค์ง logback-test.xml ์ถ๊ฐ * chore: testcontainer + redis, mysql ์์กด์ฑ ์ฃผ์ * chore: ํตํฉ ํ ์คํธ db ์ปจํ ์ด๋ ํ๊ฒฝ ์ ์ * chore: api ํตํฉ ํ ์คํธ ํ๋กํ resolver ์ ์ * chore: common ํจํค์ง application ํด๋์ค ์ ์ * chore: api ํตํฉ ํ ์คํธ base package classes ์ ์ * chore: api ํตํฉ ํ ์คํธ ์ด๋ ธํ ์ด์ ์ ์ * rename: api test application.yml -> application-test.yml * test: auth api ์ ํจ์ฑ ๊ฒ์ฌ profile locat -> test * test: api ํตํฉ ํ ์คํธ ์คํ ํ ์คํธ * test: ํตํฉ ํ ์คํธ ์ด๋ ธํ ์ด์ ์ profile=test ์ถ๊ฐ * chore: test application ํ์ผ ์ ๊ฑฐ * chore: ํ๊ฒฝ๋ณ์ ๊ธฐ๋ณธ๊ฐ ์ ์ * test: api ํ ์คํธ ํ๋กํ test -> local * chore: test ci gradlew test --peraller ์ต์ ์ถ๊ฐ * chore: external api db config @container ์ ๊ฑฐ * chore: application ํ์ผ ๋ด test ํ๋กํ ์ถ๊ฐ * test: api ํตํฉ ํ ์คํธ ํ๋กํ local -> test * test: ํ์๊ฐ์ ์ ์ ์๋๋ฆฌ์ค ํตํฉ ํ ์คํธ (๋์ ํ์ธ์ฉ) * ๐ OIDC signature ๊ฒ์ฆ์์ด header, payload ์ถ์ถ ๋ก์ง ์์ (#35) * rename: oauth oidc provider imple ์๋ฌ ๋ฉ์๋ ๋ช ์ * fix: token header, payload ์ถ์ถ ๋ฉ์๋ jjwt ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด ์ ๊ฑฐ * rename: get oidc token body ๋ฉ์๋ ๋ด aud ๋ก๊ทธ ์ ๊ฑฐ * fix: oidc provider log ์ ๊ฑฐ ๋ฐ get unsignedtoken() token ๋ง์ง๋ง์ . ์ ๊ฑฐ * โจ ์ธ์ฆ์ฝ๋ SMS ์ ์ก (#37) * chore: infra ๋ชจ๋ ๋ด aws sdk, sns ์์กด์ฑ ์ฃผ์ * chore: aws sns ํ๊ฒฝ๋ณ์ ์ค์ * chore: aws sns config ์ค์ * feat: sms dto์์ sms ์ ์ก์ ์ํ ์ ํ๋ฒํธ ํ์ฑ ๋ฉ์๋ ์ถ๊ฐ * rename: pheon ํ์ฑ ๋ฉ์๋๋ช ์์ * fix: sms request record ์ ๊ฑฐ * fix: sms dto response ๊ฐ์ฒด ์ ๊ฑฐ ๋ฐ ๋ถํ์ํ ํ๋ ์ ๋ณด ์ ๊ฑฐ * feat: phone ์ธ์ฆ event ๋ฑ๋ก * fix: sms dto to ๋ ์ฝ๋๋ช ๋ณ๊ฒฝ ๋ฐ code ํ๋ ์ถ๊ฐ * rename: phone verification event -> push code event * feat: push code ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก * rename: event๋ช ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์ * fix: ์ธ์ฆ ์ฝ๋ ์์ฑ ๋ก์ง sms provider -> mapper๋ก ๋ณ๊ฒฝ * chore: infra ํ๊ฒฝ ์ค์ ๊ธฐ๋ณธ๊ฐ null ์ ๊ฑฐ -> ๋๋ฏธ๊ฐ ์ฃผ์ * ๐ Swagger ์์ธ ์๋ต ๋ฌธ์ ๊ฐ์ (#39) * rename: oauth ์ ํ๋ฒํธ ์ธ์ฆ ์, existUser -> existsUser * rename: ์ธ์ฆ๋ฒํธ ๊ฒ์ฆ phone ํ๋ example์ ํ์ดํ ์ถ๊ฐ * feat: json view์ ์ ์ฉํ ๊ตฌ๋ถ์ฉ ํด๋์ค ์์ฑ * rename: error response ์๋ต ์ฝ๋ ์ค๋ช ์์ * fix: ๊ณตํต ์์ธ ํธ๋ค๋ฌ ์ฃผ์ & ์์ ์์ ๋ฐ 400 ์์ธ ํธ๋ค๋ฌ ์ถ๊ฐ * fix: auth api ๋ฌธ์ ์ฃผ์ ๋ถ๋ฆฌ ๋ฐ ์์ธ ๋ด์ฉ ์ถ๊ฐ * rename: ์ผ๋ฐ ํ์๊ฐ์ ์ธ์ฆ๋ฒํธ ๊ฒ์ฆ์์ ์ฑ๊ณต ์๋ต ์ฌ๋ถ์ ๋ฐ๋ฅธ ๋ถ๊ธฐ ์ด๋์ง์ ๋ช ์ * ๐ Google id token issuer mismatch ์ด์ ํด๊ฒฐ (#40) * fix: ๊ณต๊ฐํค ์๋ช ๊ฒ์ฆ ๋ฉ์๋์์ token ๋ก๊ทธ ์ถ๋ ฅ ์ ๊ฑฐ * fix: oauth oidc client properties ์ธํฐํ์ด์ค get issuer ๋ฉ์๋ ์ถ๊ฐ * chore: infra ๋ชจ๋ provider issuer ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ * fix: apple, kakao ํ๊ฒฝ get issuer ๋ฉ์๋ ์์ * chore: kakao, apple issuer ์ ๊ฑฐ * fix: iss ์ธ์์ get_jwks() -> get_issuer() ๋ฉ์๋๋ก ์ฝ์ * โ๏ธ User name ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ์ค ๋ณ๊ฒฝ (#44) * feat: get_unsigned_token_claims 500 error -> 401 error ๋ณํ * fix: oauth_usecase ๋ด payload ๋ก๊ทธ ๋ ๋ฒจ info -> debug * fix: name ํ๋ ์ ๊ท ํํ์ ๋ณ๊ฒฝ (ํ๊ธ 6์, ์์ด 10์) * fix: name ํ๋ ์ ๊ท ํํ์ ๋ณ๊ฒฝ (ํ๊ธ & ์์ด ์๋ฌธ์ 8์) * fix: name ํ๋ ํ๊ธ, ์๋ฌธ ์๋ฌธ์ 2~8์๋ก ์ ํ * test: ์ธ์ฆ ์ name ์์ธ ๋ฌธ๊ตฌ ์์ * โจ User, Oauth Entity Soft Delete ๋ฐ์ (#43) * feat: user domain soft delete์ where ์ถ๊ฐ * feat: oauth domain soft delete์ where ์ถ๊ฐ * chore: domain module ๋ด mysql testcontainer ์์กด์ฑ ์ถ๊ฐ * test: domain ๋ชจ๋ mysql container ํ๊ฒฝ ์ค์ * chore: logback ์ค์ ์์ * feat: user domain tostring ์ฌ์ ์ * feat: user domain service delete ๋ฉ์๋ ์ถ๊ฐ * test: soft delete ํ์ธ ํ ์คํธ * fix: oauth domain sql delete ์ฟผ๋ฆฌ ์์ * test: user soft delete test case ์ถ๊ฐ * โ๏ธ OAuth ๊ณ์ ์ฐ๋ ์คํจ ํด๊ฒฐ ๋ฐ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ (#45) * rename: user sync mapper ๋ถํ์ํ ์ฃผ์ ์ ๊ฑฐ * feat: oauth service create ๋ฉ์๋ ์ถ๊ฐ * feat: oauth sign mapper ๋ด์์ entity ์์ฑ ๋ฉ์๋ ํธ์ถ * rename: auth api ์ผ๋ฐ ํ์๊ฐ์ ์ด๋ ฅ ์กด์ฌ ์ ์์ธ ๋ฌธ์ ์ถ๊ฐ * rename: oauth api ์์ ๋ก๊ทธ์ธ ์ด๋ ฅ ์กด์ฌ ์ ์์ธ ๋ฌธ์ ์ถ๊ฐ * test: [2] ์์ ๋ก๊ทธ์ธ ์ด๋ ฅ์ด ์๋ ๊ฒฝ์ฐ, 200 ok๋ฅผ ๋ฐํํ๊ณ oauth ํ๋๊ฐ true๊ณ username ํ๋๊ฐ ์กด์ฌ * rename: ์์ ์ธ์ฆ ํ์๊ฐ์ , ๊ณ์ ์ฐ๋ ์ ์ฑ๊ณต ์๋ต ๋ฐํ ๋ฌธ์ ์ถ๊ฐ * test: [3-1] ์ผ๋ฐ ํ์๊ฐ์ ํ ์คํธ * test: [3-2] ์์ ๊ณ์ ์ฐ๋ ํ์๊ฐ์ ํ ์คํธ * test: ์ผ๋ฐ ํ์๊ฐ์ ์ ํ ๊ฒ์ฆ api ์์ธ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * test: url๋ณ๋ก inner ํด๋์ค๋ก ํ ์คํธ ๋ถ๋ฆฌ * test: auth test order ์ง์ * chore: test ํ๊ฒฝ์์ sql log ์ถ๋ ฅ ์ต์ true๋ก ๋ณ๊ฒฝ * test: oauth controller ํตํฉ ํ ์คํธ ๋ด๋ถ ํด๋์ค ๊ตฌ๋ถ * chore: wiremock ์์กด์ฑ ์ถ๊ฐ * test: feign mock test ์ ์ฉ (์ค์ ๋ก ์ฌ์ฉ์ ์ ํจ) * test: [1] ์์ ๋ก๊ทธ์ธ ํตํฉ ํ ์คํธ * fix: oauth link ์, ๊ธฐ์กด ๊ณ์ ์๋ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ * test: [4-1] ์์ ํ์๊ฐ์ ๊ณ์ ์ฐ๋ * feat: oauth entity tostring ์ฌ์ ์ * fix: oauth ํ์๊ฐ์ ์, ๊ธฐ์กด ๊ณ์ ์ด ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์์ธ ์ฒ๋ฆฌ * test: [4-2] ์์ ํ์๊ฐ์ * test: ์ ์ฅ๋ oauth ์ ๋ณด ์กฐํ ์ถ๊ฐ * โ๏ธ ์ธ์ฆ๋ฒํธ ์ ์ก api ํตํฉ (#46) * feat: ์ ํ๋ฒํธ ์ธ์ฆ ํ์ ์ ์ * feat: sms ์ธ์ฆ์ฝ๋ ์ ์ก api ๋ถ๋ฆฌ * feat: security config anonymous url์ /v1/phone ์ถ๊ฐ * docs: sms api swagger ์์ฑ * fix: send code param value ์ง์ * feat: phone verification error code 400 ๋ ๊ฐ์ง ๊ฒฝ์ฐ ์ถ๊ฐ * feat: send code ์, type == oauth์ด๋ฉด provider null์ผ ๋ ์์ธ ์ฒ๋ฆฌ * feat: verification type converter ์ถ๊ฐ * docs: ์ธ์ฆ์ฝ๋ swagger ์ type์ value ์์ * feat: verification type converter web config ๋ฑ๋ก * docs: ์์ ์ ํ๋ฒํธ ์์ * docs: ์ธ์ฆ, ์์ ์ธ์ฆ api deprecated ์ฒ๋ฆฌ * ๐ ๋ชจ๋ ๋ณ README.md ์ถ๊ฐ (#47) * chore: readme.md .gitignore ์ ๊ฑฐ * docs: external api readme ์ถ๊ฐ * docs: external api ํจํค์ง ๊ฒฝ๋ก ์์ * docs: infra ๋ชจ๋ readme ์ถ๊ฐ * docs: domain ๋ชจ๋ readme ์ถ๊ฐ * docs: common ๋ชจ๋ readme ์ถ๊ฐ * โจ ๋ก๊ทธ์์ API (#49) * feat: sign out use case ๊ตฌํ * feat: sign out api ๊ฐ๋ฐฉ * docs: user auth api swagger ๋ฌธ์์ sign out ์ถ๊ฐ * feat: sign out pre authorize ์ถ๊ฐ * fix: authorization header ํ์ฑ ์ถ๊ฐ * test: ์ ํจํ access token, ์ ํจํ refresh token ์๋๋ฆฌ์ค ๊ฒ์ฆ * test: 3๊ฐ์ง ํ ์คํธ ์๋๋ฆฌ์ค ์ถ๊ฐ ์์ฑ(์ ํจํ access token, ์ ํจํ์ง ์์ refresh token ์๋๋ฆฌ์ค ์คํจ) * fix: authorization header ํ์ฑ controller์์ ์ํ * refactor: ๋ก๊ทธ์์ ์ธ๋ถ๋ก์ง jwt auth helper๋ก ์ด๋ * test: ์ ํจํ access token์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ํจํ refresh token์ ์ ์กํ ์ ์คํจ * feat: ์์ ๊ถ ์๋ ํ ํฐ ์์ธ ์ถ๊ฐ * fix: ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ํจํ refresh token ์ญ์ ์์ฒญ ์ ์์ธ ์ฒ๋ฆฌ * rename: jwt auth helper์ remove_access_token_and_refresh_token ๋ฉ์๋ ์ฃผ์ ์์ * test: refresh token ttl ๋ณํ ๋ก์ง ์์ * docs: sign out swagger ์์ธ ์๋ต ์ถ๊ฐ * docs: sign out API ์์ธ ์ค๋ช ์ถ๊ฐ * refactor: jwt auth helper ๋ฉ์๋ ๋ถ๋ฆฌ * test: with_mock_user ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * fix: cookie ์ ๊ฑฐ ์๋ต ํค๋ ์ถ๊ฐ * fix: ์ธ์ฆ ํํฐ ๋ด refresh token ์ฒดํฌ ์ ๊ฑฐ * fix: cookie util delete cookie ๋ฉ์๋ ์์ & ์๋ต ํค๋์ ์ฟ ํค ์ ๊ฑฐ์ฉ ํค๋ ์ถ๊ฐ * test: refresh token ํ์ทจ ์๋๋ฆฌ์ค์ refresh ์ด์ token ์ ์ก ์๋๋ฆฌ์ค ์ถ๊ฐ * test: scenario 2-3 pre-condition ์์ * fix: sign out api์์ sevlet request, response param ์ ๊ฑฐ * โจ Device Token ๋ฑ๋ก/์์ /์ญ์ API (#51) * feat: device token entity ์ ์ * feat: user entity ๋ด device entity ์ญ๋ฐฉํฅ ๊ด๊ณ ์ง์ * feat: device entity ์ฐ๊ด๊ด๊ณ ๋์ฐ๋ฏธ ๋ฉ์๋ ์ถ๊ฐ * feat: device repository ์ ์ * fix: device repoistory ์์ ๋์์ cure -> list crud๋ก ๋ณ๊ฒฝ * feat: read_all_by_user_id() ๋ฉ์๋ repository ๋ด ์ ์ธ * feat: device domain service ์ถ๊ฐ * feat: user account controller ์ค๊ณ ๋ฐ ์ฝ๋ ์์ฑ * rename: controller -> api ๋ค์ด๋ฐ ์์ * feat: device dto ์ ์ * fix: user account api์ device dto import * fix: user account controller ๋ด use case import * fix: device entity ์์ฑ์์ user ์ถ๊ฐ, ์ฐ๊ด๊ด๊ณ ๋์ฐ๋ฏธ ๋ฉ์๋ ์ ๊ฑฐ, ํ ํฐ ์ ๋ฐ์ดํธ ๋ฉ์๋ ์ถ๊ฐ * fix: device dto to_entity ํ๋ผ๋ฏธํฐ์ user ์ถ๊ฐ * fix: device service save ๋ฉ์๋ ๋ฐํ๊ฐ void -> device * feat: device ๋ฑ๋ก use case ์ถ๊ฐ * refactor: device ๋ฑ๋ก usecase ๋ด, flag ๋ณ์ ์ ๊ฑฐ ํ optional๋ก ๋ถ๊ธฐ ์ ์ด * feat: device domain service์์ user_id์ token์ผ๋ก device ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * feat: use case ๋ด ์์ unregister_device ๋ฉ์๋ ์ ์ * test: ์ ๊ท ๋๋ฐ์ด์ค ๋ฑ๋ก ํ ์คํธ * test: ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋์ถ๋ device์์ ๋งคํ ๊ฒฐ๊ณผ ํ์ธ * refactor: register_device() ๋ฆฌํด๊ฐ long -> dto ๊ฐ์ฒด * feat: device custom exception ํด๋์ค ์ถ๊ฐ * fix: ๊ธฐ์กด ๋๋ฐ์ด์ค ํ ํฐ ๊ฐฑ์ ์, ๊ธฐ๊ธฐ ์ ๋ณด ๋ถ์ผ์น ์์ธ ์ฒ๋ฆฌ * rename: ์์ธ ์ํฉ ๋ก๊ทธ ์์ * test: ๊ธฐ์กด์ ๋ฑ๋ก๋ ๋๋ฐ์ด์ค ํ ํฐ์ด ์๋ ๊ฒฝ์ฐ, ๋๋ฐ์ด์ค ํ ํฐ์ ๊ฐฑ์ ํ๋ค * test: ์๋ฒ์์ ํ ํฐ์ ๋นํ์ฑํ ์ฒ๋ฆฌํ์ฌ ์กด์ฌํ์ง ์๋๋ฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋ณ๊ฒฝ ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ newToken์ผ๋ก ์ ๊ท ๋๋ฐ์ด์ค๋ฅผ ๋ฑ๋กํ๋ค * test: ์ฌ์ฉ์๊ฐ ์ ํจํ ํ ํฐ์ ๊ฐ์ง๊ณ ์์ง๋ง ๋ชจ๋ธ๋ช ์ด๋ OS๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ DEVICE_NOT_MATCH ์๋ฌ๋ฅผ ๋ฐํํ๋ค * feat: device entity ํ์ฑํ ์ฌ๋ถ ํ๋ ์ถ๊ฐ && ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * fix: device ์์ฑ์ -> ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก ์์ * fix: device ์์ฑ์ private๋ก ์ ๊ทผ ์ ํ * feat: device not found error code ์ถ๊ฐ * test: ํ์ฑํ ํ๋ ์๋๋ฆฌ์ค๋ก ํ ์คํธ ๋ณ๊ฒฝ * feat: device entity ํ์ฑํ ์ฌ๋ถ ๋ฉ์๋ ์ถ๊ฐ * feat: device entity ํ์ฑํ ๋ฉ์๋ ์ถ๊ฐ * fix: ํ์ฑํ ํ๋ ์กด์ฌ ์ดํ ์๋๋ฆฌ์ค๋ก usecase ์์ * test: ํ ํฐ ๋นํ์ฑํ ์ฟผ๋ฆฌ๋ฌธ ์์ * refactor: use case ์ถ์ํ ์์ค์ ์ํด ํ์ service layer ์ถ๊ฐ * style: ๋งค๊ฐ๋ณ์ ์์ ๋ณ๊ฒฝ * test: device_register_service ํ ์คํธ ์ผ์ด์ค ๋น ๋ฑ๋ก * rename: device request dto is_same_token() -> is_init_request() * refactor: ๋๋ฐ์ด์ค ์์ฑ ๋ก์ง ๊ตฌํ * test: ์ฌ์ฉ์ ID์ origin token์ ๋งค์นญ๋๋ ํ์ฑ ๋๋ฐ์ด์ค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋๋ฐ์ด์ค๋ฅผ ์ญ์ ํ๋ค * fix: device token id ๋์ device token ์์ฒด๋ฅผ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ก ์์ * fix: ๋๋ฐ์ด์ค ์ ๋ณด ์ ๊ฑฐ ์, ๋งค์นญ๋๋ ๋๋ฐ์ด์ค๊ฐ ์์ ๋ ์์ธ ์ข ๋ฅ ์์ * test: ๋๋ฐ์ด์ค ์ญ์ ์คํจ ํ ์คํธ * docs: device token api ์ค์จ๊ฑฐ ์๋ต ๋ฌธ์ ์์ฑ * docs: ๋๋ฐ์ด์ค ๋ฑ๋ก ์์ฒญ dto์ ํจ์๊ฐ ํ๋์ ํฌํจ๋๋ ํ์ ์ ๊ฑฐ * test: ์ ํจํ ํ ํฐ & ๋๋ฐ์ด์ค ์ ๋ณด๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋๋ฐ์ด์ค ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ * feat: device entity ๋ด model, os ์ ๋ณด ์์ ๋ฉ์๋ ์ถ๊ฐ * fix: ์ฌ์ฉ์ ๊ธฐ๊ธฐ ๋ณ๊ฒฝ ์, ๋น์ง๋์ค ๋ก์ง ์์ * docs: ๋๋ฐ์ด์ค ์ฅ์น ์ ๋ณด ๋ฏธ์ค ์์ธ ์ ๊ฑฐ * fix: ๋๋ฐ์ด์ค ํ ํฐ ํ์ฑ ์ฌ๋ถ ์กฐ๊ฑด๋ฌธ ๋ณ๊ฒฝ * fix: not_match_device ์๋ฌ ์ฝ๋ ์ ๊ฑฐ * feat: test์ฉ user ์์ ํด๋์ค * feat: @authentication_principal ํ์ ๋ณํ์ ์ํ ํ ์คํธ์ฉ ์ด๋ ธํ ์ด์ ์์ฑ * test: user ๋๋ฐ์ด์ค ์ ์ฅ ์์ฒญ ์, ์ฑ๊ณต ์๋ต ํฌ๋งท ํ ์คํธ * test: originToken์ ๋ํ ๋๋ฐ์ด์ค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ๋๋ฐ์ด์ค ์ ๋ณด ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ๋ฐ์ดํธํ๊ณ ๊ธฐ์กด ๋๋ฐ์ด์ค ์ ๋ณด๋ฅผ ๋ฐํํ๋ค * fix: device ์ ์ฅ ์, ๋งค์นญ ๋๋ฐ์ด์ค ๋ถ์ฌ ์ฌ๋ถ ํ๋จ ๋ก์ง ์ถ๊ฐ * rename: ํ ์คํธ [1-1] display name ์์ * test: device fixture์ผ๋ก ๋ณ๊ฒฝ * style: device register service ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * fix: oauth entity ๋ด provider converter ์ ์ (#52) * โจ ๋ฌธ์ํ๊ธฐ API (#36) * feat: question ์ํฐํฐ, repository ์์ฑ * feat: mail ๋ฐ์ก ๋ก์ง ์์ ์์ฑ * fix: http ๋ฉ์๋ ์์ * feat: question ์์ธ ์์ฑ * feat: question service ์์ฑ * feat: ๋ฌธ์ ๋ฐ์ก api ์์ฑ * fix: ๋ฌธ์ ๋ฐ์ก ๋ด์ฉ ์์ * feat: ํ์ํ ํ๊ฒฝ๋ณ์ ์ค์ * docs: swagger ๋ฌธ์ ์์ฑ ๋ฐ ๋ถ๋ฆฌ * fix: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๋ช ์ * docs: swagger parameter ์ ๊ฑฐ ๋ฐ schema ๋ด์ฉ ์์ * fix: ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ uri ์์ * fix: controller ๋ฉ์๋ ์ธ๊ฐ ๊ถํ ์์ * fix: dto ํ๋๋ณ schema ์์ฑ * fix: dto email ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ์ถ๊ฐ * fix: category(enum) ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ์ฒ๋ฆฌ * fix: restful ์์น์ ๋ฐ๋ฅธ request uri ์์ * fix: dto inner class ์ ๊ฑฐ * fix: transactional ์ด๋ ธํ ์ด์ ๋ณ๊ฒฝ * fix: email_error ์คํ์ ์์ * fix: ๊ณตํต ํ์ฉ endpoint ์ ์ธ * fix: createddate ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ entitylistners ์ถ๊ฐ * fix: domainservice ์ฐ๊ฒฐ * fix: swagger schema ์คํ์ ์์ ๋ฐ enum ์ค๋ช ์ ๊ฑฐ * fix: transactional ์ด๋ ธํ ์ด์ ์ถ๊ฐ * fix: @schema ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * fix: questioncategory enum converter ์ ์ฉ * fix: sendquestion ์๋ต nocontent๋ก ๋ณ๊ฒฝ * refactor: starter-mail ์์กด์ฑ ์ด๋ * refactor: starter-mail ์์กด์ฑ ๊ตฌ์ฑ ์์ฑ ๋ณ์ ์ด๋ * refactor: ๋ฉ์ผ๋ฐ์ก ๋ก์ง infra ๋ชจ๋ ์ด์ * fix: ์์ ๋ก๊ทธ ์ ๊ฑฐ * refactor: ์์กด์ฑ ์ฃผ์ ์ ์ํ mailconfig ์์ * refactor: transactionaleventlistener๋ฅผ ํ์ฉํ ๋ฉ์ผ๋ฐ์ก ์ด๋ฒคํธ์ฒ๋ฆฌ * test: ํ ์คํธ ์์ฑ * fix: mockbean ๋๋ฝ ์ค๋ฅ ์์ * fix: ํ ์คํ ๊ฐ ๋ก์ง ์์ ์ฃผ์์ฒ๋ฆฌ ๋ณต๊ตฌ * fix: ๋ถํ์ํ getter ์ ๊ฑฐ * fix: mainํธ๋ค๋ง log ์์ค ๋ณ๊ฒฝ * feat: admin_address ํ๊ฒฝ๋ณ์ ๊ธฐ๋ณธ๊ฐ ์ถ๊ฐ * fix: ๋ฉ์ผ ๋ฐ์ก ์ด๋ฒคํธ ์คํจ์ ๋ก๊ทธ ๋ ๋ฒจ ๋ณ๊ฒฝ * feat: swagger ์ฑ๊ณต ์๋ต ๋ช ์ * ๐ง ์ธ์ฆ ๊ธฐ๋ฅ ๋ฆฌํฉํ ๋ง (#53) * rename: user_general_sign_mapper -> service * refactor: is_sign_up_allowed() ๋ฉ์๋ general sign service๋ก ์ด๋ * rename: user_oauth_sign_mapper -> service * refactor: is_sign_up_allowed() ๋ฉ์๋ oauth sign service๋ก ์ด๋ * fix: user sign mapper ์ ๊ฑฐ * refactor: ์ผ๋ฐ ํ์๊ฐ์ ์๋น์ค ์กฐ๊ฑด๋ฌธ ๋ฉ์๋๋ก ๋ถ๋ฆฌ * fix: ์ผ๋ฐ ํ์๊ฐ์ ์ log ์ถ๊ฐ * refactor: user ์์ฑ ์ฝ๋๋ฅผ dto๋ก ์ด๋ * fix: oauth ํ์๊ฐ์ ์ log ์ถ๊ฐ * fix: log ์ ๋ณด ์์ * refactor: oauth ๋งคํ ๋ฉ์๋ ๋ถ๋ฆฌ * rename: ๋๋ฉ์ธ phone verification -> phone code * rename: phone_verification_mapper -> service * refactor: sms controller์์ service๊ฐ ์๋ usecase๋ฅผ ์์กดํ๋๋ก ์์ * style: ํ์๊ฐ์ ์ ์ธ์ฆ ์ฝ๋ ํ์ธ -> ์ธ์ฆ ์ฝ๋ ์ ๊ฑฐ -> ์์ ์ ๊ทผ ์์ผ๋ก ๋ณ๊ฒฝ * style: ์์ ํ์๊ฐ์ ์ ์ธ์ฆ ์ฝ๋ ํ์ธ -> ์ธ์ฆ ์ฝ๋ ์ ๊ฑฐ -> ์์ ์ ๊ทผ ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ์์ ํ์๊ฐ์ ์ ์กฐ๊ฑด๋ฌธ ๋ฉ์๋ ๋ช ์์ ์ผ๋ก ๋ณ๊ฒฝ * feat: ์ฌ์ฉ์ sync ๋ชฉ์ dto ํด๋์ค ์ ์ * rename: user sync dto ์ฃผ์ ์ถ๊ฐ * feat: user sync dto ํธ์์ฉ ๋์ฐ๋ฏธ ๋ฉ์๋ ์์ฑ * refactor: oauth_sign_service ๋ด pair -> dto๋ก ๋ณํ * refactor: general_sign_service ๋ด pair -> dto๋ก ๋ณํ * rename: user sync dto์ is sign up allowed ํ๋ ์ฃผ์ ์ถ๊ฐ * refactor: auth_use_case pair -> dto * refactor: oauth_use_case pair -> dto * refactor: oauth signup ์ ํจ์ฑ ๊ฒ์ฌ ๋ฆฌํฉํ ๋ง * test: test์์ pair -> user_sync_dto ์๋ต์ผ๋ก ๋ณ๊ฒฝ * rename: user_oauth_sign_service is_sign_up_allowed() ๋ก๊ทธ ์ถ๊ฐ * fix: pk๋ก user select ํ๋๋ก ํ์ฌ query ํ์ ์ ์ฝ * โจ ์ฌ์ฉ์ ๋ณธ์ธ ํ๋กํ ์กฐํ API (#55) * feat: get_my_account api ์์ฑ * feat: user_profile_dto ์ ์ * feat: get_my_account() use case ์ถ๊ฐ * rename: account_api requirement_security ์ฃผ์ ์ ๊ฑฐ * fix: local time serializaer format ์ถ๊ฐ * fix: profile_visibility @jsonvalue ๋ฉ์๋ ์์ * fix: ์์ ๊ณ์ ์ธ ๊ฒฝ์ฐ password_updated_at ํ๋ ์ง๋ ฌํ ์ ์ธ * docs: ์ฌ์ฉ์ ๊ณ์ ์กฐํ ์ฑ๊ณต ์๋ต swagger ๋ฌธ์ํ * docs: localdatetime ์๋ต ํฌ๋งท ์์ * feat: ์ฌ์ฉ์ ์๋ต fe ํธ์์ฉ ํ๋ is_oauth_account ์ถ๊ฐ * โจ ๋ก๊ทธ์ธ ์ํ ํ์ธ API (#56) * feat: user token ๊ฒ์ฆ api ์ค๊ณ * style: user_auth_controller & usecase & test ๋ชจ๋ auth ํจํค์ง๋ก ์ด์ * test: user_auth_usecase test ์์ฑ * test: pre-condition ์ค์ * test: ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ api 4๊ฐ์ง ์๋๋ฆฌ์ค ์์ฑ * fix: get_auth_state์์ authorization ํค๋ ๋งค๊ฐ๋ณ์ ์ถ๊ฐ ๋ฐ ์์ธ ์ฒ๋ฆฌ * test: controller์์ ๋๊ฒจ์ฃผ๋ ๋ฐ์ดํฐ์ ๋ง๊ฒ given ์์ * fix: auth_header๊ฐ ๋น์๊ฑฐ๋ bearer๋ก ์์ํ์ง ์์ ์, ์์ธ ์ฒ๋ฆฌ -> ๋น๋ก๊ทธ์ธ ์ ์ ์๋ต * feat: is_sign_in ๊ตฌํ * rename: is_signed_in() -> is_sign_in() * refactor: auth_header ์ถ์ถ ๋ก์ง controller -> usecase๋ก ์ด์ * test: token ์ ๋์ฌ bearer ์ถ๊ฐ * test: access token์ ๋ณด๋ธ ์๋๊ฐ ํ์คํ ๋๋ ๊ฒ์ฆ ์คํจ ์ ์์ธ์ฒ๋ฆฌ * fix: is_token_expired() -> get_jwt_claims() ์์ธ ํธ๋ค๋ง ๋ก์ง ์์ * fix: /v1/auth url ์ธ๊ฐ ๊ถํ permit_all๋ก ์์ * docs: get_auth_state() swagger ์ฃผ์ ์ถ๊ฐ * feat: sigin state record ์ ์ * fix: state dto ๋ถ๋ฆฌ * test: is_sign_in ๋ฐํ ํ์ dto๋ก ์์ * feat: jwt_claims value๋ฅผ ์ป๊ธฐ ์ํ ํธ์์ฉ ๋ฉ์๋ ์ถ๊ฐ * fix: is_sign_in() ๋ฐํ ํ์ dto๋ก ๋ณ๊ฒฝ * test: given() ์ธ์ ๋ด์ any()๋ก ์์ * rename: get_claim_value() ์ฃผ์ ์ถ๊ฐ * docs: ์ฑ๊ณต ์๋ต schema๋ก ์์ * fix: ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ฌ๋ถ ์ธ๊ฐ ๊ถํ is_authenticated()๋ก ์์ * fix: auth_state_dto is_sign_in ํ๋ ์ ๊ฑฐ * fix: controller authorization ํค๋ ํ์๊ฐ์ผ๋ก ์์ * fix: usecase ๋ด is_sign_in false ์ฒ๋ฆฌ ๋ก์ง ์ ๊ฑฐ * test: jwt_auth_helper mock -> ์ค์ ๊ฐ์ฒด ์์ฑ * docs: auth state dto id ํ๋ ์ค๋ช ์์ * test: security filter์์ ๊ฑธ๋ฌ์ง๋ ํ ์คํธ ์ผ์ด์ค ์ ๊ฑฐ * fix: is_sign_in log ๋ ๋ฒจ debug -> info * style: web_sucurity ์ธ์ฆ/์ธ๊ฐ ๊ฒฝ๋ก ์์ ํด๋์ค ๋ถ๋ฆฌ * fix: /v1/auth ์ธ๊ฐ ๊ถํ authenticated๋ก ๋ณ๊ฒฝ * test: jwt_auth_helper ์ค์ ์ธ์คํด์ค ์ฃผ์ * fix: get_claims_value ๋ก์ง ์์ * ๏ฟฝ์ผ๋ฐ ํ์ ์์ด๋ ์ฐพ๊ธฐ API ๊ตฌํ (#48) * refactor: auth-check-controller request-mapping๊ฐ ๋ณ๊ฒฝ * refactor: auth-check controller์ api ๋ถ๋ฆฌ * feat: ์์ด๋ ์ฐพ๊ธฐ api ์์ฑ * feat: ์์ด๋ ์ฐพ๊ธฐ api ์ ์ฒด ํ์ฉ * feat: ์์ด๋ ์ฐพ๊ธฐ api ๊ตฌํ * fix: sysout ์ ๊ฑฐ * fix: ์์ด๋ ์ฐพ๊ธฐ api ์ ๊ทผ ๊ถํ ๋ณ๊ฒฝ * feat: ์์ด๋ ์ฐพ๊ธฐ api ์๋ต ๊ฐ์ฒด ์์ ๋ฐ dto ์ ์ * fix: auth-find-mapper ํด๋์ค ์ ์ ๋ฐ ์กด์ฌํ์ง ์๋ ๋ฒํธ ์์ธ ์ฒ๋ฆฌ * feat: ์กด์ฌํ์ง ์๋ ์์ด๋ error-code ์ ์ * feat: ๊ณ์ ์ฐพ๊ธฐ ๊ด๋ จ ์ปค์คํ ์๋ฌ ์ ์ * fix: ์ผ๋ฐ ํ์์ด ์๋ ํด๋ํฐ ๋ฒํธ ์กฐํ ์ not-found ์์ธ ์ฒ๋ฆฌ * test: ์์ด๋ ์ฐพ๊ธฐ ์ ์กด์ฌํ์ง ์๋ ํด๋ํฐ ๋ฒํธ ์์ธ ์ฒ๋ฆฌ ์ผ์ด์ค ์์ฑ * test: ์์ด๋ ์ฐพ๊ธฐ ์ oauth ์ฌ์ฉ์ ํด๋ํฐ ๋ฒํธ ์์ธ ์ฒ๋ฆฌ ์ผ์ด์ค ์์ฑ * test: ์์ด๋ ์ฐพ๊ธฐ ์ ํด๋ํฐ ๋ฒํธ ์กฐํ ์ฑ๊ณต ์ผ์ด์ค ์์ฑ * test: ์์ด๋ api ์ฑ๊ณต ํ ์คํธ ์ผ์ด์ค ์์ฑ * test: ์์ด๋ api ์์ฒญ ์คํจ ํ ์คํธ ์ผ์ด์ค ์์ฑ * rename: auth-find-error-code์ ์กด์ฌํ์ง ์๋ ํด๋ํฐ์ ๋ํ ์์ ๋ณ๊ฒฝ * rename: ์์ด๋ ์ฐพ๊ธฐ api ํ ์คํธ๋ช ์์ * docs: ์์ด๋ ์ฐพ๊ธฐ api swagger ๋ฌธ์ ๊ตฌ์ฒดํ * fix: ์์ด๋ ์ฐพ๊ธฐ api์ ํด๋ํฐ ๋ฒํธ not-null ์ค์ * fix: ์์ด๋ ์ฐพ๊ธฐ ์ ์ฒ๋ฆฌ ์์ธ๋ฅผ user-error-exception์ผ๋ก ๋ณ๊ฒฝ * rename: auth-find-mapper์์ auth-find-service๋ก ๋ณ๊ฒฝ * fix: ์์ด๋ ์ฐพ๊ธฐ endpoint security ์์ * fix: ์์ด๋ ์ฐพ๊ธฐ flow ์์ * fix: auth-check-controller์ ํ ์คํธ ๋จ์ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์ด๋ ธํ ์ด์ ์์ * fix: oauth entity ๋ด provider converter ์ ์ (#52) * fix: ์์ด๋ ์ฐพ๊ธฐ api์์ phone param์ not-blank๋ก ๋ณ๊ฒฝ * fix: ์์ด๋ ์ฐพ๊ธฐ ์คํจ์ ๋ฐ๋ฅธ ์์ธ ๋ก๊ทธ ๋ ๋ฒจ ๋ฐ ์๋น์ค ํจํค์ง ๋ณ๊ฒฝ * fix: auth-find-service ์ด๋ ธํ ์ด์ ์ service๋ก ์์ * fix: ์์ด๋ ์ฐพ๊ธฐ ์ ์ธ์ฆ ์ฝ๋ ๊ฒ์ฆ ๋ฐ ์บ์ ์ ๊ฑฐ ๋ก์ง ์ถ๊ฐ * fix: ์์ด๋ ์ฐพ๊ธฐ ์ ์ธ์ฆ ์ฝ๋ ๊ฒ์ฆ ๋ฐ ์บ์ ์ ๊ฑฐ ๋ก์ง ์ถ๊ฐ * docs: ์์ด๋ ์ฐพ๊ธฐ ๋ก์ง ์ฃผ์ ๋ฐ api response ์ถ๊ฐ * fix: ์์ด๋ ์ฐพ๊ธฐ api query์ code ์ถ๊ฐ * feat: phone-verification-dto์ verify-code-req์ of ๋ฉ์๋ ์ถ๊ฐ * refactor: ์์ด๋ ์ฐพ๊ธฐ ๋ก์ง์ ์ฝ๋ ๊ฒ์ฆ ๋ฐ ์ญ์ ๋ก์ง์ usecase๋ก ์ด๋ * test: ์์ด๋ ์ฐพ๊ธฐ api์ query์ code ์ถ๊ฐ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ๋ณ๊ฒฝ * test: ์์ด๋ ์ฐพ๊ธฐ api์ query์ code ์ถ๊ฐ์ ๋ฐ๋ฅธ result-actions ๊ฐ์ฒด ๋งค๊ฐ๋ณ์ ์ถ๊ฐ * refactor: ์ธ์ฆ์ฝ๋ ๊ด๋ จ ํจํค์ง ๋ฐ ํด๋์ค๋ช ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ์์ * fix: required-args-constructor import๋ฌธ ์ถ๊ฐ --------- Co-authored-by: JaeSeo Yang <[email protected]> * โ๏ธ ์ธ์ฆ๋ฒํธ ์ ์ก API ํตํฉ์ ๋ฐ๋ฅธ Deprecated API ์ญ์ (#57) * docs: ๋ก๊ทธ์ธ ์ํ ํ์ธ api swagger ๋ฌธ์ ์์ * fix: auth_controller send code api ์ ๊ฑฐ * fix: oauth_controller send code api ์ ๊ฑฐ * โจ OIDC ์ ์ฑ ์์ id token์ nonce ํ๋ ์ถ๊ฐ (#58) * docs: ๋ก๊ทธ์ธ ์ํ ํ์ธ api swagger ๋ฌธ์ ์์ * fix: auth_controller send code api ์ ๊ฑฐ * fix: oauth_controller send code api ์ ๊ฑฐ * fix: oauth_oidc_provider nonce ๊ฒ์ฆ ๊ตฌ๋ฌธ ์ถ๊ฐ * fix: oauth ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์์ฒญ ์ nonce ํ๋ ์ถ๊ฐ * fix: service ๋ก์ง ๋ด nonce ์ธ์ ์ ๋ฌ * fix: sign_up_req oauth_info dto์ nonce ํ๋ ์ถ๊ฐ * test: oauth controller ํ ์คํธ nonce ์์ * fix: oauth_use_case ์์ํ ์คํจ -> @transactional ์ถ๊ฐ * fix: send_code api ํตํฉ pr์์ ์ ๊ฑฐํ์ง ์์ use case ๋ด send code ๋ฉ์๋ ์ ๊ฑฐ * โจ ์ฌ์ฉ์ ์์ด๋/์ด๋ฆ ์์ API (#59) * test: ์ฌ์ฉ์ ๊ณ์ api ๋ด๋ถ ํด๋์ค๋ก ๋ถ๋ฆฌ * test: ์ฌ์ฉ์ ์ด๋ฆ ์์ controller unit pre-condition ์์ฑ * test: ์ด๋ฆ ์์ ์์ฒญ controller unit test case ์์ฑ * fix: ์ผ๋ฐ ํ์๊ฐ์ ๊ณ์ ์ด ์๋ ์์ธ ์์ ์ถ๊ฐ : 4004 * feat: ์ด๋ฆ ๋ณ๊ฒฝ ์์ฒญ dto ์ ์ * feat: put_name() controller ๋ฉ์๋ ์ถ๊ฐ * feat: update_name() usecase ์ถ๊ฐ ๋ฐ void ํ์ ์ ๋ง๊ฒ ํ ์คํธ ์ฝ๋ given ์์ * test: 422 ์์ ์๋ฌ ์ฝ๋ ์์ * test: ์ฌ์ฉ์ ๊ณ์ usecase ๊ธฐ์กด test ๋ด๋ถ ํด๋์ค๋ก ๋ถ๋ฆฌ * test: ์ผ๋ฐ ํ์๊ฐ์ ์ ์ pre-condition ์ ๊ฑฐ * test: ์ด๋ฆ ์์ usecase test case ์์ฑ * feat: ์ฌ์ฉ์ ์ด๋ฆ ์์ ๋ก์ง ๊ตฌํ * feat: user ๋๋ฉ์ธ ์ด๋ฆ ์์ ๋ฉ์๋ ์ถ๊ฐ * test: user_account_use_case_test ์์ ์ง์ * fix: ๋๋ฐ์ด์ค ๋นํ์ฑํ em.create_query() -> ๋ฉ์๋ ํธ์ถ (๊ธฐ์กด ๋ฐฉ์ ์๋ฌ ๋ฐ์) * test: ์ฌ์ฉ์ ๋๋ค์ ์์ controller unit test ์์ฑ * feat: ์ฌ์ฉ์ ์์ด๋ ๋ณ๊ฒฝ ์์ฒญ dto ์์ฑ * feat: ์ฌ์ฉ์ ์์ด๋ ๋ณ๊ฒฝ ์์ฒญ api ์์ฑ * feat: ์ฌ์ฉ์ ์์ด๋ ๋ณ๊ฒฝ ์์ฒญ usecase ์์ฑ * feat: ์ฌ์ฉ์ ์์ด๋ ๋ณ๊ฒฝ service ๋ก์ง ๊ตฌํ * test: nickname -> username * test: ํ ์คํธ ์ฝ๋์์ entitymanager ์ฃผ์ ์ ๊ฑฐ * refactor: user account use case ์ฌ์ฉ์ ์กฐํ ๋ฉ์๋ ๋ถ๋ฆฌ * fix: ์ด๋ฆ ๋ฐ ์์ด๋ ์์ ์์ฒญ ๋ฉ์๋ put -> patch * test: put ์์ฒญ patch๋ก ๋ณ๊ฒฝ * โจ ์ฌ์ฉ์ ์๋ฆผ ์ค์ API (#60) * feat: notify setting update ๋ฉ์๋ ์ถ๊ฐ * feat: notification ํ์ฑํ api ์ถ๊ฐ * feat: notification ๋นํ์ฑํ api ์ถ๊ฐ * feat: notification ํ์ฑํ/๋นํ์ฑํ usecase ์ถ๊ฐ * refactor: user account use case ์ฌ์ฉ์ ์กฐํ ๋ฉ์๋ ๋ถ๋ฆฌ * rename: notify -> flag * feat: ์ฌ์ฉ์ ์๋ฆผ ์ค์ service ๋ก์ง ๊ตฌํ * feat: ์ฌ์ฉ์ ์๋ฆผ ์ค์ ์๋ต dto ์ ์ * feat: use case ์๋ต์ dto ๋ฐ์ * feat: notify type converter ์ ์ * feat: web_config์ notify_type_converter ๋ฑ๋ก * fix: invalid_notify_type 400 -> 422 ๋ณ๊ฒฝ * docs: notify api ์๋ต swagger ๋ฌธ์ ์์ฑ * test: user_account_use_case_test ๋น ๋ฑ๋ก * fix: ์๋ฆผ ์ค์ api ๋ฉ์๋ ๋ณ๊ฒฝ put -> patch * ๐ ์์ด๋ ์ฐพ๊ธฐ API ์์ฒญ ์ ํด๋ํฐ ๋ฒํธ ๋ฐ ์ธ์ฆ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ INTERNAL_SERVER_ERROR ํด๊ฒฐ (#61) * test: ์์ด๋ ์ฐพ๊ธฐ api ์์ฒญ ์ ํด๋ํฐ ๋ฒํธ ๋ฐ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ง ์์ ์ผ์ด์ค ์ถ๊ฐ * fix: ์์ด๋ ์ฐพ๊ธฐ api์ query-string ์ ํจ์ฑ ๊ฒ์ฆ์ ์ํ ์ธ์ ์์ * fix: ์์ด๋ ์ฐพ๊ธฐ api ์ธ์๊ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ usecase ๋ฐ service ๋ฉ์๋ ์ธ์ ์์ * fix: of ๋ฉ์๋ ์ญ์ * โจ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ/๋ณ๊ฒฝ API (#62) * test: ํ์ฌ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ api ๊ตฌํ * feat: ์ผ๋ฐ ํ์๊ฐ์ ์๋ ์ ์ ์์ธ ์ฝ๋ ์ถ๊ฐ * feat: ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ์์ฒญ dto ์ ์ * fix: ๋ฏธํ์๊ฐ์ ๊ณ์ ์ค๋ฅ 400 -> 403 * feat: ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ controller ์ ์ * test: use case ์์ ๊ตฌํ ๋ฐ ํ ์คํธ ํต๊ณผ ํ์ธ * test: ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ use case ํ ์คํธ ์ผ์ด์ค ์์ฑ * feat: ํจ์ค์๋ ์ํธํ helper ํด๋์ค ์ ์ * feat: use case์ ํจ์ค์๋ helper class ์์กด์ฑ ์ฃผ์ * test: ํจ์ค์๋ ํฌํผ ํด๋์ค ์์กด์ฑ ์ฃผ์ * feat: mock -> mockbean ์์ * fix: password_encoder final ํ์ ์ ์ถ๊ฐ * test: ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ ์์ controller unit test ์์ฑ * feat: reason coe 400๋ฒ๋ 5๋ฒ ๋นํธ client_error ์ถ๊ฐ * feat: ๋์ผํ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์์ฒญ ์๋ฌ ์ฝ๋ ์ถ๊ฐ * feat: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์์ฒญ dto ์ ์ * feat: ๋น๋ฐ๋ฒํธ ์์ controller ๊ตฌํ * feat: ์์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ usecase ์์ฑ && controller unit test ํต๊ณผ ํ์ธ * feat: ๋น๋ฐ๋ฒํธ ์์ usecase ๋ฐ service ๊ตฌํ * feat: password encoder helper ํด๋์ค์ ๋ฌธ์์ด ์ธ์ฝ๋ฉ ๊ฒ์ฆ ๋ฉ์๋ ์ ๊ฑฐ * test: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ usecase unit test ์์ฑ * feat: use case ์์ธ ๋ก๊ทธ ์ถ๊ฐ * test: ๋์ผ ๋น๋ฐ๋ฒํธ ์์ฒญ ์ given ์ ์ถ๊ฐ * test: given ์ฌ์ฉ์ ์์ฑ @before_each ํตํฉ * fix: ๊ธฐ์กด๊ณผ ๋์ผํ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ์กฐ๊ฑด์ ์์ * test: ์ ์ ์ ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์์ฒญ given(is_same_password) ์กฐ๊ฑด ๋ถ๋ฆฌ * โจ External Api Controller ๋ก๊น ์ ์ํ AOP ๊ตฌํ (#64) * feat: external-api-log-aspect ๊ตฌํ * fix: authorization && set-cookie && cookie ํค๋๋ debug ๋ชจ๋๋ก ๋ก๊น * fix: request argument๊ฐ null์ธ ๊ฒฝ์ฐ ์ ์ธ * feat: request header log ์ด๋ ธํ ์ด์ ์์ฑ * fix: cookie, authorization ๋ฌธ์์ด ์์กด ์ ๊ฑฐ * fix: request header log ์ด๋ ธํ ์ด์ ์ธ์ฆ ํค๋ ์ ๊ฑฐ * fix: controller์ request header log default value ์ ๊ฑฐ * ๐ RTR ์ค๋์ ๊ฒ์ฆ (์๋ฌด ๋ฌธ์ ์์๋ค..) (#66) * feat: redis ๋จ์ ํ ์คํธ ํธ์์ฉ ์ด๋ ธํ ์ด์ ์์ฑ * test: refresh token service ๋จ์ ํ ์คํธ ์์ฑ * test: refresh token service ํ ์คํธ์ ๋ถํ์ํ ์์กด์ฑ ์ ๊ฑฐ * fix: jwt_auth_helper claims ์ถ์ถ ๋ฉ์๋ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ && ๋ก๊ทธ ๊ฐฑ์ * test: jwt_auth_helper refresh ํ ์คํธ * test: refresh token service ๋จ์ ํ ์คํธ ํ์ทจ ์๋๋ฆฌ์ค ํต๊ณผ ํ์ธ * test: jwt_auth_helper ๋จ์ ํ ์คํธ ํ์ทจ ์๋๋ฆฌ์ค ํต๊ณผ ํ์ธ * refactor: refresh token ์์ฑ์ด ํต๊ณผ๋๋ฉด access token ์์ฑํ๋๋ก ์์ * test: ํ์ทจ ์๋๋ฆฌ์ค ํ ์คํธ given ์์ * docs: refresh api ์ค์จ๊ฑฐ ์๋ฌ ์๋ต ๊ฐ์ * โจ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์์ ๊ณ์ ์ฐ๋ API (#67) * feat: ์์ ๊ณ์ ์ฐ๋ api ์ ์ * fix: request param ์ถ๊ฐ dto ์ ์ -> sign_in_req.oauth dto ํ์ฉ * docs: ์์ ๊ณ์ ์ฐ๋ api ์์ธ ์ค๋ช ์ค์จ๊ฑฐ ์ถ๊ฐ * feat: ์์ ๊ณ์ ์ฐ๋ usecase ์์ฑ * feat: user_oauth_sign_server ์กฐ๊ฑด๋ถ user ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * fix: user_oauth_sign_server ์กฐ๊ฑด๋ถ user ์กฐํ ๋ฉ์๋ -> user_sync_dto ๋ฐํ ๋ฉ์๋๋ก ์์ * fix: ์์ ๊ณ์ ์ฐ๋ usecase ๋ถํ์ ์์กด์ฑ ์ ๊ฑฐ * test: user_auth_user_case ๋จ์ ํ ์คํธ ์ถ๊ฐ ์์กด์ฑ ์ฃผ์ * fix: already_signup_oauth error code 400 -> 409 * docs: 409 ์๋ฌ ์๋ต swagger ๋ฐ์ * fix: already_signup error code 400 -> 409 * docs: ์ผ๋ฐ ํ์๊ฐ์ ์ ํ๋ฒํธ ์ธ์ฆ 409 ์๋ฌ ์๋ต swagger ๋ฐ์ * test: ์ธ์ฆ๋ ์ฌ์ฉ์์ ์์ ๊ณ์ ์ฐ๋ api ํตํฉ ํ ์คํธ * docs: ์์ ๊ณ์ ์ฐ๋ api ์ค์จ๊ฑฐ 409 ์์ธ ์ถ๊ฐ * test: ๊ธฐ์กด already_sign_up 400 ์๋ฌ ์์ ์๋ต 409๋ก ์์ * style: user_oauth_sign_service is_link_allowed() ๋ฉ์๋ ์์ ๋ณ๊ฒฝ * fix: like-oauth api post -> put ์์ฒญ์ผ๋ก ์์ * fix: oauth entity @sql_restriction ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * feat: user_id์ provider๋ก oauth ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * fix: user_sync_dto ์ฐ๋ํ๊ธฐ ์ํ oauth ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ๋ฐ๋ ๋ด๋ถ record ์ถ๊ฐ * fix: ์ฌ์ฉ์ ์ฐ๋ dto user entity -> ์ง์ ํ๋๋ฅผ ํ๋ผ๋ฏธํฐ ์ฃผ์ ํ๋๋ก ์์ * fix: ํ์๊ฐ์ ์ด๋ ฅ ๊ฐ๋ฅ user_sync_dto ์์ฑ์ฉ ํธ์ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth entity soft deleted ์ฌ๋ถ ํ์ธ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth entity soft delete ์ทจ์ ๋ฉ์๋ ์ถ๊ฐ * fix: oauth sync dto ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋ด oauth null ์ฒ๋ฆฌ ๋ก์ง ์ถ๊ฐ * feat: user_sync_dto ๊ธฐ์กด oauth ์ ๋ณด ์กด์ฌ์ฌ๋ถ ํ๋จ์ฉ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth_service id๋ก oauth ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth_error_code not_found ์ถ๊ฐ * fix: soft delete๋ oauth ์กด์ฌ ์๋๋ฆฌ์ค ๋ฐ์ํ์ฌ oauth sign service ์์ * refactor: oauth sign service ํด๋์ค save_user ๋ถ๊ธฐ ์ฒ๋ฆฌ ์ค์ฒฉ if๋ฌธ ์ ๊ฑฐ * fix: general_sign_service user_sync_dto ์ธ์ ์ถ๊ฐ * feat: oauth domain service delete ๋ฉ์๋ ์ถ๊ฐ * feat: soft delete๋ oauth ๋ฑ๋ก ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * feat: soft delete๋ oauth ์ฌํ์ฑํ ์, oauth_id ํ๋ given ์ ์์ * fix: oauth entity revert_delete ์ํ ์กฐ๊ฑด๋ฌธ ์์ * fix: oauth revert ์, ์ฌ์ฉ์๊ฐ ์ ์กํ oauth_id๋ก ์ ๋ฐ์ดํธ * ๐ OAuth ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์ Soft Delete ์ ์ฑ ๋ฐ์ ๊ฒ์ฌ (#69) * test: ๊ฐ์ provider๋ก Oauth ๋ก๊ทธ์ธ ์ด๋ ฅ์ด soft delete ๋์์ผ๋ฉด ์ฑ๊ณต ์๋ต์ ๋ฐํํ๋ค * test: ์์ ํ์๊ฐ์ ์ soft delete๋ oauth ์ ๋ฐ์ดํธ ์ฌ๋ถ ํ ์คํธ ์ถ๊ฐ * fix: ์์ ํ์๊ฐ์ dto ํ๋๋ก oauth_id ์ถ๊ฐ * fix: oauth_oidc_helper oauth_id ๋ฉ๊ฐ๋ณ์ ์ถ๊ฐ * fix: get_payload() ์ฌ์ฉํ๋ usecase์์ oauth_id ์ธ์ ์ ๋ฌ * test: get_payload() ์ฌ์ฉํ๋ test์์ oauth_id ์ธ์ ์ ๋ฌ * test: user auth controller ํตํฉ ํ ์คํธ์์ soft delete ํ ์คํธ ์ expected_oauth_id ์์ * โจ ์ธ์ฆ๋ ์ฌ์ฉ์์ OAuth ์ฐ๋ ํด์ง API (#70) * feat: ์์ ๋ก๊ทธ์ธ ์ฐ๋ ํด์ api ์ ์ * feat: user oauth sign service & usecase ๋ก์ง ๊ตฌํ * feat: oauth_error_code cannot_unlink_oauth ์๋ฌ ์ฝ๋ ์ถ๊ฐ * feat: user๊ฐ ์ฐ๋ํ oauth ๋ชจ๋ ์ ๋ณด ์กฐํ ๋ชฉ์ domain service ๋ฉ์๋ ์ถ๊ฐ * test: oauth ์ฐ๋ ํด์ ํ ์คํธ ์ผ์ด์ค ์์ฑ * test: ์ธ๊ฐ ๊ถํ์ ์ํด @with_security_mock_user ์ด๋ ธํ ์ด์ ์ผ๋ก ์์ * refactor: service์ unlink() -> read_oauth_for_unlink()๋ก ์์ * docs: ์์ ๊ณ์ ์ฐ๋ ํด์ 409 ์๋ฌ ์๋ต ๋ฌธ์ ์ถ๊ฐ * test: ํ ์คํธ ์ผ์ด์ค ์์น ์ด๊ด * โ๏ธ ๋ง์ด ํ๋กํ ์กฐํ ์, ์์ ๊ณ์ ์ฐ๋ ์ ๋ณด ์ถ๊ฐ (#72) * feat: ์ ์ ์กฐํ usecase์์ delete๋์ง ์์ oauth ๊ณ์ ์ ๋ณด ์กฐํ ์ถ๊ฐ * feat: oauth account ์ ๋ณด๋ฅผ ๋ด์ dto ์ ์ * feat: dto binding์ ์ํ user_profile_mapper ์์ฑ * test: user_account_use_case_test oauth_service mock bean ์ฃผ์ * fix: user_profile_dto oauth_account ํ๋ nullable ์ ๊ฑฐ * fix: is_oauth_user ํ๋ -> is_general_sign_up ํ๋๋ก ์์ * โจ ์ฌ์ฉ์ ๊ณ์ ์ญ์ API (#73) * feat: ๊ณ์ ์ญ์ controller ๋จ์ ํ ์คํธ * feat: ์ฌ์ฉ์ ๊ณ์ ์ญ์ controller ๊ตฌํ * feat: ์ ์ ์ญ์ use case -> ์ปดํ์ผ ์๋ฌ ํด๊ฒฐ ๋ชฉ์ ์์ ๊ตฌํ * test: oauth_service mock bean -> autowired * feat: oauth repository ๋ฒํฌ ์ฐ์ฐ ์ญ์ ๋ฉ์๋ ์ถ๊ฐ * feat: oauth service ์ฌ์ฉ์ ์์ด๋๋ก ์ฐ๊ด ๊ด๊ณ์ oauth ์ ๋ณด ์ ๊ฑฐ ๋ฉ์๋ ์ถ๊ฐ * feat: ์ฌ์ฉ์ ์ญ์ ์๋น์ค ์ถ๊ฐ * test: user delete service ๋น ์ถ๊ฐ * feat: user domain ๋ฒํฌ ์ฐ์ฐ ์ญ์ ๋ฉ์๋ ์ถ๊ฐ * fix: user ์์ํ ์ ๊ฑฐ * fix: delete ์, ์์ํ ๋ user -> user_id ๊ธฐ๋ฐ์ผ๋ก ์ ๊ฑฐ * fix: ์ปจํธ๋กค๋ฌ @delete_mapping ์ถ๊ฐ * docs: ๊ณ์ ์ญ์ api ์ฃผ์ ์ฌํญ ์ถ๊ฐ * โจ ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ API (#71) * feat: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ฒฝ๋ก ์ค๊ณ * feat: ๋น๋ฐ๋ฒํธ ๋ด๋ถ๋ก์ง ์์ฑ * fix: @operation ์คํ์ ์์ * fix: dto ๊ตฌ์กฐ ๋ณ๊ฒฝ * docs: service ์ฃผ์ ์์ฑ * docs: authcheckapi ์์ฑ * fix: ๋ณ๊ฒฝ๋ ๋ฉค๋ฒ๋ณ์ ๋ฐ์ ๋ฐ ํ ์คํธํ์ผ๋ช ๋ณ๊ฒฝ * fix: ๋์ผ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ ์์ฒญ์คํจ ์์ * feat: ๋น๋ฐ๋ฒํธ ์ธ์ฆ api ๋ถ๋ฆฌ * feat: ํ ์คํธ์ฝ๋ ์์ฑ * docs: swagger ์์ธ์๋ต ์์ฑ * fix: ํ ์คํธ์ฝ๋ userfixture ์ฌ์ฉ ๋ฐ log.debug์ฌ์ฉ * fix: preauthorize ๋ฐ @validated ๋๋ฝ ๋ฐ์ * feat: ๋ฒํธ ์ธ์ฆ ํ code ์บ์ ttl ์ฐ์ฅ * docs: swagger 404 ์๋ฌ์ฝ๋ ์์ * fix: service ๋ก์ง ๋ฉ์๋ ๋ถ๋ฆฌ * fix: authfindservicetest์ ๋ณ๊ฒฝ๋ ๋ฉ์๋๋ช ๋ฐ์ * โจ ์ง์ถ ๊ด๋ฆฌ ์์ญ Domain ์ ์ (#74) * feat: ์๋น ์์ด์ฝ ํ์ ์ ์ * feat: ์ง์ถ ์์ด์ฝ ์ปจ๋ฒํฐ ์ ์ * fix: ledger -> spending ํจํค์ง๋ช ์์ * feat: ์ง์ถ entity ์ ์ * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ entity ์ ์ * feat: ์ง์ถ entity์ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ entity ์ฐ๊ด๊ด๊ณ ๋งคํ * rename: spending_category -> spending_custom_category ์์ * feat: ์ง์ถ ๋ฐ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ repository ์ธํฐํ์ด์ค ์์ฑ * feat: ์ง์ถ domain service ์์ฑ * feat: ์ง์ถ ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ domain service ์์ฑ * feat: ์ง์ถ ๋ชฉํ ๊ธ์ก entity, repository, domain service ์ ์ * rename: spending icon -> spending category * rename: package ์ด๋ฆ amount -> target * ๐ ์ฌ์ฉ์ ์ญ์ ์๋๋ฆฌ์ค ๊ฐ์ (#75) * test: ์ฌ์ฉ์ ์ญ์ ์, ๋๋ฐ์ด์ค ์ ๋ณด๋ CASCADE๋ก ์ญ์ ๋์ด์ผ ํ๋ค * test: ํ ์คํธ display name ์ค๋ช ์์ * โจ QueryDsl ํ์ฅ Repository ๋ฐ Util ์ ์ (#76) * feat: query dsl extended repository ์ธํฐํ์ด์ค ์ ์ธ * feat: jpa query๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ํจ์ํ ์ธํฐํ์ด์ค ์ถ๊ฐ * docs: @see ์ถ๊ฐ * feat: query dsl extended repository ์ธํฐํ์ด์ค ๊ตฌํ์ฒด ์ ์ * feat: extended repository๋ฅผ ์ ์ฉํ๊ธฐ ์ํ factory ์ ์ * chore: extended bean repository factory config ๋ฑ๋ก * feat: query dsl util ์ถ๊ฐ * refactor: repository ๋ด๋ถ ๋ฉ์๋๋ฅผ query dsl util์์ ์ํ * feat: slice ์ ํธ ์ถ๊ฐ * docs: util ํด๋์ค ๋ฒ์ ์ฃผ์ ์ถ๊ฐ * rename: extended repository -> query dsl repository * feat: extended repository ํตํฉ ์ธํฐํ์ด์ค ์ ์ธ * rename: query dsl repository factory -> extended repository factory * fix: user repository ์์ jpa repository -> extended repository * test: extended repository ์ฌ์ฉ๋ฒ ๊ณต์ ๋ฅผ ์ํ ํ ์คํธ ์ผ์ด์ค * docs: query_dsl_search_repository sort ์ฌ์ฉ๋ฒ ์์ * fix: query dsl util ๋ด cast_to_query_dsl ์ค๋ณต ์ ์ ์ ๊ฑฐ * rename: query_dsl_util null handling ๋ฉ์๋ ์ค๋ช ์์ * rename: query_dsl_search_repository_impl ํด๋์ค ๋ ๋ฒจ ์ฃผ์ ์ ๊ฑฐ && query_dsl_util ์ฃผ์ ์์ * โจ ๋น์ ๋ชฉํ ๊ธ์ก ์ค์ API (#77) * docs: ๋น์ ๋ชฉํ ๊ธ์ก ๋ฑ๋ก/์์ swagger ์์ฑ * test: ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฌ ์๋ต ํ ์คํธ ์ผ์ด์ค ์์ฑ * test: param ์ ํจ์ฑ ๊ฒ์ฌ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * test: param null์ธ ๊ฒฝ์ฐ 400 ํ ์คํธ ์ถ๊ฐ * feat: handler_method_validation_exception ์ ์ญ ์์ธ ํธ๋ค๋ฌ ์ถ๊ฐ * feat: target_amount_usecase ํด๋์ค ์์ฑ * feat: target amount domain delete ์ฟผ๋ฆฌ ์์ ๋ฐ delete_at ํ๋ ์ ๊ฑฐ, amount ์์ ๋ฉ์๋ ์ถ๊ฐ * fix: amount ํ์ wrapper -> primitive ํ์ ์ผ๋ก ์์ * refactor: @request_param -> dto๋ก ๋ฆฌํฉํ ๋ง * test: expected 400 -> 422 ์๋ฌ๋ก ์์ * docs: update_param_req swagger ๋ฌธ์ ์์ฑ * feat: target amount ์๋ฌ ์ฝ๋ ๋ฐ ์์ธ ์์ฑ * test: ๋น์์ ํด๋นํ๋ ์์ฒญ์ธ์ง ๊ฒ์ฆํ๋ ํ ์คํธ ์ถ๊ฐ * feat: ๋น์์ด ์๋ ์ ์์ธ์ฒ๋ฆฌ * feat: ๋น์ ๋ชฉํ ๊ธ์ก ์กฐํ domain service ๋ฉ์๋ ์ถ๊ฐ * rename: domain service์ repository ๋ฉ์๋ ๋ช ์์ * rename: save -> create * test: ๋น์ ๋ชฉํ ๊ธ์ก ๋ฑ๋ก ํตํฉ ํ ์คํธ ์์ฑ * refactor: target_amount_save_service ๋ถ๋ฆฌ * test: displayname 400 -> 422 ์๋ฌ๋ก ์์ * rename: ํจํค์ง๋ช ledge -> ledger * fix: put mapping value ์ถ๊ฐ * style: if๋ฌธ ์ค๊ดํธ ์ถ๊ฐ * โจ ์๋ณ ์ฌ์ฉ์ ์ง์ถ ๋ด์ญ ์กฐํ API (#78) * docs: ์ง์ถ ๋ด์ญ ์กฐํ ์ค์จ๊ฑฐ ๋ฌธ์ ์์ฑ * feat: ์ง์ถ(spending) ์ปจํธ๋กค๋ฌ ์์ฑ * fix: ํจํค์ง๋ช ledge -> ledger * rename: at_month -> at_year_and_month ๋ฉ์๋๋ช ์์ * feat: spending entity get_day() ๋ฉ์๋ ์ถ๊ฐ * feat: ์ง์ถ ๋ด์ญ ์กฐํ dto ์ ์ * feat: ์๋ณ ์ง์ถ ๋ด์ญ ์กฐํ usecase ๊ตฌํ * rename: save -> create_spending() * fix: ์ง์ถ๋ด์ญ jpa repository -> extended repository * feat: spending domain service ๋ด read_spendings() ์ถ๊ฐ * chore: querydsl-core ์์กด์ฑ api๋ก ์์ * chore: querydsl-jpa ์์กด์ฑ api๋ก ์์ * fix: spending ์กฐํ ์ query dsl ๋ฉ์๋ ์ฌ์ฉ * test: ์ง์ถ ๋ด์ญ ํ ์คํธ๋ฅผ ์ํ batch fixture ์ ์ * test: ์๋ณ ์ง์ถ ๋ด์ญ ์กฐํ ํตํฉ ํ ์คํธ ์์ฑ * fix: spending_fixture query ์์ * fix: spending_fixture query category ๋๋ค ์์ * fix: dto validation ์ถ๊ฐ * refactor: spending search service ๋ถ๋ฆฌ * refactor: spending mapper ๋ถ๋ฆฌ * refactor: spending_mapper ๋ด๋ถ ๋ฉ์๋ ๋ถ๋ฆฌ * rename: spending mapper calculate ๋ฉ์๋ ์ฃผ์ ์ถ๊ฐ * docs: spending search res dto ์ค์จ๊ฑฐ ๋ฌธ์ ์์ฑ * docs: ์ง์ถ ๋ด์ญ ์กฐํ api ์ค์จ๊ฑฐ ๋ฌธ์ 200 ์๋ต ํฌ๋งท ์ถ๊ฐ * test: ์๋ณ ์ง์ถ ๋ด์ญ ์กฐํ ์ํ ์๊ฐ ์ธก์ * feat: ์ง์ถ entity sql_restriction ์ถ๊ฐ * โจ ์ฌ์ฉ์ ์ปค์คํ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ๋ฑ๋ก API (#79) * feat: ๊ณตํต๋ ์นดํ ๊ณ ๋ฆฌ ์ ๋ณด๋ฅผ ๋ฐํํ๊ธฐ ์ํ dto * feat: spending entity get_category() ๋ถ๊ธฐ ์ฒ๋ฆฌ ๋ฉ์๋ ์ถ๊ฐ * fix: get_category type์ ๋ง์ถ์ด ๊ธฐ์กด ์ฝ๋ ํ์ ๋ณํ * fix: custom category์ธ ๊ฒฝ์ฐ๋ฅผ ํธ๋ค๋ง ํ๊ธฐ ์ํ is_custom ํ๋ ์ถ๊ฐ * fix: ์ฌ์ฉ์ ์ ์/์๋น์ค ์ ๊ณต ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ฅธ dto ์ ๋ณด ์์ * fix: category icon ํ๋ ํ์ spending_category๋ก ์์ * docs: api ์ค์จ๊ฑฐ ๋ฌธ์ ์์ฑ * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ dto ์ ์ * refactor: spending category api ๋ถ๋ฆฌ * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์ถ๊ฐ use case ์์ฑ * test: ์ ํจํ์ง ์์ ์นดํ ๊ณ ๋ฆฌ๋ช ์ ์ ๋ ฅํ๋ฉด 422 Unprocessable Entity ์๋ฌ ์๋ต์ ๋ฐํํ๋ค * fix: name ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ @not_empty -> @not_blank * test: controller unit test ์ ํจ์ฑ ๊ฒ์ฌ ์ถ๊ฐ * feat: icon other ๊ฐ ์์ธ ์ฒ๋ฆฌ * feat: spending exception ์ ์ && other ์์ด์ฝ ์์ธ ์ฒ๋ฆฌ * test: other icon ์ ๋ ฅ ์์ธ์ฒ๋ฆฌ ํ ์คํธ * rename: save -> create_spending_custom_category * fix: spending_custom_category ํ ์ด๋ธ๋ช ์์ * docs: param query object ์ค์จ๊ฑฐ ์์์ ์ ๋ณด์ด๋๋ก ์ฒ๋ฆฌ * docs: ์ฑ๊ณต ์๋ต ์คํค๋ง ์ถ๊ฐ * docs: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์๋ต icon ํ๋ ์์ ์์ && ์๋ต key๊ฐ ์ถ๊ฐ * โจ ์ง์ถ ๋ด์ญ ๋ฑ๋ก API (#81) * test: ์๋น ๋ด์ญ ๋ฑ๋ก controller unit test * feat: ์ง์ถ ๋ฑ๋ก dto ์์ฑ * feat: dto ๋ด to_entity() ๋ฉ์๋ ์ ์ * test: given() ์ถ๊ฐ ๋ฐ mockmvc csrf ์ฒ๋ฆฌ * test: 101์๋ฆฌ ๋๋ค ๋ฌธ์์ด ์์ฑ ๋ฐฉ๋ฒ ์์ * feat: ์์ฒญ icon์ด other์ด๋ฉด์, category_id๊ฐ -1์ธ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ * fix: to_spending_search_res_individual private -> public * feat: ๋์ํ๋๋ก usecase ์ง์ถ ์์ฑ ์ฝ๋ ์์ฑ * feat: ์ง์ถ entity ๋ด ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ ๋งคํ ๋ฉ์๋ ๋ฐ ์์ฑ์ ์ ํจ์ฑ ๊ฒ์ฌ ์ถ๊ฐ * feat: custom_category not_found ์์ธ ์ถ๊ฐ * feat: spending_custom_category ์กฐํ domain service ๋ฉ์๋ ์ถ๊ฐ * rename: ์๋ฌ ์๋ต ์์ธํ * fix: category_info ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ๋ด is_custom ํ๋จ ์ค๋ํซ ์์ * test: request์ categoryId๊ฐ -1์ธ ๊ฒฝ์ฐ, spendingCustomCategory๊ฐ null์ธ Spending์ ์์ฑํ๋ค * test: request์ categoryId๊ฐ -1์ด ์๋ ๊ฒฝ์ฐ, spendingCustomCategory๋ฅผ ์ฐธ์กฐํ๋ Spending์ ์์ฑํ๋ค * test: ๊ธฐ์กด ์นดํ ๊ณ ๋ฆฌ์ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ, icon ์ ๋ณด๋ฅผ other๋ก ์์ * fix: category ์ ๋ณด ์์ธํ ์๋ต์ผ๋ก ๋ณ๊ฒฝ * feat: request์ category_id, icon ์กฐํฉ ๊ฒ์ฆ * fix: ์๋น์ค/์ฌ์ฉ์ ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ฅธ to_entity() ๋ถ๋ฆฌ * refactor: spending_save_service ๋ถ๋ฆฌ * refactor: ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ์ํด request ๋ด custom_category ์์ฒญ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๋ฉ์๋ ์ถ๊ฐ * test: ์์ ๊ฒ์ฆ ์๋๋ฆฌ์ค ํ ์คํธ ์ถ๊ฐ * fix: is_custom_category ๋ ผ๋ฆฌ ๋ถ์ ์ฐ์ฐ ์ถ๊ฐ * feat: ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ ์์ ์ ๊ทผ ๊ด๋ฆฌ ๋งค๋์ ์์ฑ * feat: ์ฌ์ฉ์ id์ ์ปค์คํ id๊ฐ ์ผ์นํ๋ ์ปค์คํ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ๊ฒ์ฌ ๋ฉ์๋ ์ถ๊ฐ * feat: ์์ ๊ฒ์ฆ ์ธ๊ฐ ๋ก์ง controller ๋ฐ์ * docs: ์ง์ถ ๋ด์ญ ์ถ๊ฐ api ๋ฌธ์ ์์ฑ * docs: swagger ์์ธ ์๋ต ์ถ๊ฐ * test: usecase์ ๋ํ ํ ์คํธ๋ก ์์ * โจ ์ฌ์ฉ์ ์ ์ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์กฐํ API (#82) * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์กฐํ controller ๋ฉ์๋ ์ถ๊ฐ * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์กฐํ usecase ์์ฑ * feat: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์กฐํ domain service ์ถ๊ฐ * fix: ์ํ ๊ฒ์ฌ๋ฅผ ์ํ ์กฐ๊ฑด๋ฌธ ์์ฑ์๋ก ์ด๋ * rename: icon -> category * feat: category converter ํ๋์ ์ ์ * docs: ์ง์ถ ์นดํ ๊ณ ๋ฆฌ ์กฐํ swagger ๋ฌธ์ ์์ฑ * โ๏ธ QueryDsl ํ์ฅ Repository์ Dto ๋ถ๋ณ์ฑ ๋ณด์ฅ์ ์ํ ๋ถ๊ธฐ ์ฒ๋ฆฌ (#84) * feat: query dsl extended repository dto ๋ถ๋ณ์ ์ ์ง๋ฅผ ์ํด linked_hash_map ์๋ฃ ๊ตฌ์กฐ ๋ถ๊ธฐ ์ฒ๋ฆฌ * test: hash map ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * rename: query_handler ์ฌ์ฉ ๋ชฉ์ ์ ๋ด์ ์ฃผ์ ์์ * test: ํ ์คํธ์ฉ dto @to_string() ์์ฑ * docs: ์ ์ฒด ๋ณด๊ธฐ ๊ทธ๋ฃน ์ถ๊ฐ (#87) * ๐ ์ฌ์ฉ์ ๊ณ์ ์ญ์ ํ ๋์ผํ OAuth ํ์๊ฐ์ ์ดํ ๋ก๊ทธ์ธ ์๋ฌ ํด๊ฒฐ (#85) * fix: oauth_id, provider๋ก oauth ์กฐํ ์, deleted_at is null ์กฐ๊ฑด where ์ ์ถ๊ฐ * rename: ๋ฉ์๋์ deleted_at์ด null์ธ ๊ฒฝ์ฐ๋ง ์กฐํํจ์ ์ฃผ์์ผ๋ก ๋ช ์ * fix: user_oauth_sign_service read_user ์ is_deleted ์ฒดํฌ ์ ๊ฑฐ * test: domain service deleted_at ์ฒ๋ฆฌ ๋์ -> assert_true ๋์ assert_null * test: oauth repository query ์ ์ ๋์ ํ์ธ * โ๏ธ ํ ์คํธ ์์ฑ ์ `@AuthenticatePrincipal` ์ด๋ ธํ ์ด์ ๋์ (#86) * feat: ์ธ์ฆ ํํฐ์์ token ํ์ฑ ํ id๊ฐ ๋ก๊น * feat: @with_security_mock_user ๋์ .with(user())๋ก ์ฌ์ฉ์ ์ธ์ฆ ๋์ฒด * fix: security_user_details get_password() ๋น๊ฒ์ฌ ์์ธ ๋ฐ์ ์ ๊ฑฐ -> null ๋ฐํ * test: user_auth_controller ํตํฉ ํ ์คํธ ๋ฉ์๋ ์์ ๋ฐ seucurity mock user ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * refactor: ํตํฉํ ์คํธ ํจํค์ง๋ฅผ controller -> integration์ผ๋ก ์์ * test: ํ ์คํธ ๋ฉ์๋ ์์ ์ง์ ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * โจ ์ฌ์ฉ์ ๋ /์ ๋ณ ์ง์ถ ์ดํฉ ๋ฐ ๋ชฉํ ๊ธ์ก ์กฐํ API (#88) * feat: ๋ชฉํ ๊ธ์ก ์กฐํ ์์ฒญ ํ๋ผ๋ฏธํฐ dto ์ถ๊ฐ * feat: ๋ชฉํ ๊ธ์ก ์กฐํ ์๋ต dto ์ ์ * fix: date ์ฟผ๋ฆฌ validation ์ถ๊ฐ * feat: controller ๋จ์ผ ๋ฐ ์ ์ฒด ๋ด์ญ ์กฐํ * feat: domain module ์ฌ์ฉ์ ๋ /์ ๋ณ ์ด ์ง์ถ ๊ธ์ก์ ๋ฐํํ๋ dto ์ ์ * feat: spending custom repository ์ ์ && ์ฌ์ฉ์์ ํน์ ๋ /์ ์ด ์ง์ถ ๊ธ์ก ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * feat: ์ฌ์ฉ์ ๋ /์ ์ง์ถ ๊ธ์ก ์กฐํ usecas ๋ฐ์ * fix: target_amount_usecase ๋ชฉํ ๊ธ์ก ๋ฆฌ์คํธ ์กฐํ ๋ฐ ๋งคํผ ํด๋์ค ์ฌ์ฉ * feat: domain service ๋ด user_id๋ก ๋ชฉํ ๊ธ์ก ์ค์ ์ด๋ ฅ ์กฐํ * fix: ๋ชฉํ ๊ธ์ก ๋ฐ ์ด ์ง์ถ ๊ธ์ก ์กฐํ dto ์ด๋ฆ ๋ฐ ํ๋ ์์ * fix: ์ ์ฒด ์๋น ๊ธ์ก ์กฐํ optional ใ ์ฒ๋ฆฌ * feat: ๋ชฉํ ๊ธ์ก ์์ธ ์ ๋ณด๋ฅผ ์ํ ๋ด๋ถ dto ์ ์ * fix: dto null guard ๊ตฌ๋ฌธ ์ถ๊ฐ * feat: to_with_total_spending_res mapper ๋ฉ์๋ ์ถ๊ฐ * feat: to_with_total_spendings_res mapper ๋ฉ์๋ ์ถ๊ฐ * fix: ๋ ์ง ๋ฒ์ ๊ณ์ฐ์ ์์ * feat: target_amount entity to_string() ์ ์ * refactor: entity -> dto ๋งคํ์ ์ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ list -> map์ผ๋ก ๋ณ๊ฒฝ * refactor: target_amount_mapper ํจ์ ๋ถ๋ฆฌ ๋ฐ ๋ฉ์๋ ๋ช ์ผ๋ถ ์์ * rename: target_amount_info dto ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฃผ์ ์ถ๊ฐ * rename: with_total_spending_res diff_amount ํ๋ notnull ์กฐ๊ฑด ์ถ๊ฐ * feat: view type ์ด๊ฑฐ ํ์ ์ ์ * feat: view_type_converter ์ ์ ๋ฐ web_config ๋ฑ๋ก * fix: ๋จ์ผ ์กฐํ ์ path_parameter๋ก date ๋ฐ๋๋ก ์์ * fix: view_type ์ ๊ฑฐ * docs: controller ์ค์จ๊ฑฐ ๋ฌธ์ ์์ฑ * fix: use_case ๋ด ๋ถํ์ํ ์ข ์์ฑ ์ ๊ฑฐ * test: user_fixture ์ฌ์ฉ์ ๊ฐ์ ์ผ ์ง์ ํ์ฌ ์ ์ฅํ๋ ๋ฉ์๋ ์ถ๊ฐ * fix: spending_fixture ์๋น์ผ ๋๋ค ์์ฑ ๋ก์ง ์์ * test: target_amount fixture ์ ์ * test: user created_at ํ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฉ์๋๋ก ์์ * test: ์ฌ์ฉ์ ์์์ ๋ /์ ์ง์ถ ์ดํฉ ๋ฐ ๋ชฉํ ๊ธ์ก ์กฐํ ํ ์คํธ * fix: ์์์ ๋ /์ ์กฐํ ์ group by ์ ์ถ๊ฐ * fix: ๋ชจ๋ ๊ธฐ๋ก ์กฐํ ์ฟผ๋ฆฌ์์ sort ์กฐ๊ฑด ์์ * chore: domain.yml ํ ์คํธ ํ๊ฒฝ์์ jdbc ๋ก๊ทธ debug๋ก ์ค์ * test: month ๊ธธ์ด ๊ณ์ฐ ๋ก์ง ์์ * fix: mapper ๋ด์์ month_length ๊ธธ์ด ๊ณ์ฐ ๋ก์ง ์์ * test: user_account_use_case_test jpa_query_factory mock bean ์ฃผ์ * chore: jpa_query_factory ํ ์คํธ ํ๊ฒฝ ์ค์ ์ฉ ๋น ๋ฑ๋ก * test: jpa_query_factory ๋น ์ฃผ์ * fix: target_amount_mapper @required_args_contstructor ์ ๊ฑฐ * โจ ๋น์ ๋ชฉํ ๊ธ์ก ์ญ์ API (#90) * feat: target_amount delete controller ์ ์ * feat: target_amount 404 ์๋ฌ ์ฝ๋ ์ถ๊ฐ * feat: target_amount ์ญ์ usecase ์ถ๊ฐ * feat: target_amount ์ญ์ domain service ๋ฉ์๋ ์ถ๊ฐ * refactor: target amount ์กฐํ ๋ก์ง ์์ * docs: ์ญ์ api swagger ์์ฑ * fix: is_allocated_amount ๋ ผ๋ฆฌ ๋ถ์ ์ ๊ฑฐ * docs: ์ค์จ๊ฑฐ ํ๋ผ๋ฏธํฐ ์ฃผ์ ์ถ๊ฐ * fix: parameter in import ์ถ๊ฐ * โจ ์ง์ถ ๋ด์ญ ์์ธ ์กฐํ API (#89) * feat: ์์ธ์กฐํ controller ์์ฑ * feat: ์กด์ฌํ์ง ์๋ ์ง์ถ ๋ด์ญ ์๋ฌ์ฝ๋ ์ถ๊ฐ * feat: ์ ๊ทผํ ์ ์๋ ์ง์ถ ๋ด์ญ ์๋ฌ์ฝ๋ ์ถ๊ฐ * feat: ์ง์ถ๋ด์ญ ๊ฐ๋ณ ์กฐํ ๋ฉ์๋ ์ถ๊ฐ * feat: spendingsearchservice ์์ฑ * feat: usecase ์์ฑ * docs: swagger ๋ฌธ์ ์์ฑ * fix: ์ปจ๋ฒค์ ์ ๋ง์ถ์ด ์๋ต key ์์ * feat: ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ spendingmanager ์์ฑ * refactor: ๊ธฐ์กด usecase์ ์ธ๊ฐ ๋ก์ง ์ ๊ฑฐ * refactor: searchservice ๋ก์ง usecase๋ก ์ด๋ * fix: ์คํ์ ๋ฐ ์๋ชป๋ ํ๋ผ๋ฏธํฐ ์์ ์์ * fix: ์๋ชป๋ ๋ก๊ทธ ์ ๊ฑฐ * fix: 403 ์๋ฌ ๋ฌธ์ ๋ฐ ์ฝ๋ ์ญ์ --------- Co-authored-by: JaeSeo Yang <[email protected]> * ๐ ์ง์ถ ๋ด์ญ ์กฐํ ์๋ต ๋ฐ ์ค์จ๊ฑฐ ๋ฒ๊ทธ ํฝ์ค (#92) * docs: ์ง์ถ ๋ด์ญ ์กฐํ @parameter type header -> query && ์ง์ถ๋ด์ญ ์์ธ ์กฐํ @parameter ์ถ๊ฐ * fix: ์๋น ๋ด์ญ ์กฐํ ์, ์ ์๋น ๊ธ์ก ์ดํฉ ๋ฐ์ดํฐ ์ ๊ฑฐ * fix: ์๋ต ํค spendings -> spending * โจ Firebase Cloud Messaging ๊ธฐ๋ณธ ์ค์ (#94) * chore: firebase build ์ข ์์ฑ ์ถ๊ฐ * chore: fcm_config import selector group ์ค์ * chore: external-api infra_config์์ fcm_config ๋น ์ค์บ * chore: firebase admin key ํ๊ฒฝ๋ณ์ ๋ฑ๋ก * feat: fcm_config ์ ์ * chore: firebase admin-key .gitignore ๋ฑ๋ก * fix: fcm_config ์คํ ํ๊ฒฝ์์ test ์ ๊ฑฐ * rename: fcm config @profile todo ์ฃผ์ ์ถ๊ฐ * chore: cd pipeline ๋ด fcm admin sdk json ํ์ผ ์์ฑ step ์ถ๊ฐ * chore: cd pipeline json ์ฝ์ ๋์ ํ์ธ * chore: json name, dir ์์ฑ ๋ถ๋ฆฌ * chore: resource firebase ๋๋ ํ ๋ฆฌ .gitkeep ์์ฑ ๋ฐ .gitignore ๋ฒ์ ์์ * chore: feature ๋ธ๋์น cd ๊ฐ์ง ์ ๊ฑฐ * โจ ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๋ก๊ทธ๋ฅผ ์ํ Interceptor ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ (#95) * feat: ๋ก๊ทธ์ธ ๋ก๊ทธ redis entity ์ ์ * feat: ๋ก๊ทธ redis repository ์์ฑ * fix: sign event log repository crud -> list_crud ์์์ผ๋ก ๋ณ๊ฒฝ * feat: sign_event_log_service ์ ์. cr ์์ ๋ง ์ํ * feat: sign_in_log ๋ณตํฉํค ํด๋์ค ์ค์ * feat: sign_in_log entity ์ ์ * feat: sign_in_log repo & service ํด๋์ค ์์ฑ * feat: web_mvc_config sign_event_log_interceptor ๋ฑ๋ก * refactor: jwt_claims_parser_util ๋ถ๋ฆฌ * feat: ip_address_header type ์ ์ * feat: ip_address_header converter ์ ์ * feat: sign_in_log entity์ app_version, ip_address_header ํ๋ ์ถ๊ฐ * fix: sign_event_log app_version, ip_addr_header ํ๋ ์ถ๊ฐ * feat: sign_event interceptor ์ ์ * fix: sign_in_log_id ํด๋์ค ์ง๋ ฌํ ๊ตฌํ * fix: sign_in_log entity์ @entity ์ ์ธ * test: web_mvc_config ๋ด service ์์กด์ฑ ๋ฌธ์ ๋ก ์ธํ controller unit test ์คํจ ํด๊ฒฐ * fix: interceptor response auth header ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ ์ถ๊ฐ * โจ S3 ์ ์ ํ์ผ ์ ๋ก๋๋ฅผ ์ํ Presigned-URL ๋ฐ๊ธ API ๊ตฌํ (#97) * chore: s3 ๊ด๋ จ ์์กด์ฑ ์ถ๊ฐ * feat: s3-client ๋น ์์ฑ์ ์ํ s3-config ํด๋์ค ์ ์ธ * feat: s3-presigner ๋น ์ ์ธ * feat: s3 presigned-url ๋ฐ๊ธ์ ์ํ provider ์ ์ธ ๋ฐ ๋ฐ๊ธ ๋ฉ์๋ ์ ์ธ * fix: s3 ์ ๊ทผ์ ์ํ credentials ์ ์ธ ๋ฐ ์ ์ฉ * feat: s3 presigned-url ๋ฐ๊ธ์ ์ํ api ๋ช ์ธ ์ ์ * feat: s3์ object key ์์ฑ์ ์ํ uuid util ํด๋์ค ์ ์ * feat: presigned-url ๋ฐ๊ธ์ ์ํ dto ์ ์ธ ๋ฐ api ์์ * feat: object-key ์์ฑ์ ์ํ ํ ํ๋ฆฟ ๋ฐ ํ์ ์ ์ธ * fix: s3-bucket-name ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ ๋ฐ ๊ด๋ จ ๋ก์ง ์์ * feat: presigned-url ๋ฐ๊ธ์ ์ํ service ๋ฐ usecase ์ ์ * fix: storage-usecase ํจํค์ง ์ด๋ * fix: storage-controller ์ ๊ทผ ๊ถํ ์์ * fix: storage ๊ด๋ จ ์์ธ ๋ฐ ์๋ฌ ์ฝ๋ ์ ์ธ ๋ฐ ์์ธ ์ฒ๋ฆฌ ๋ก์ง ์์ * test: presigned-url ๋ฐ๊ธ์ ์ํ api ํ ์คํธ ๋ก์ง ์์ฑ * chore: presgined-url response-dto description ์ญ์ * fix: user error-code์ ์ค๋ณต๋ ์ฝ๋ ์ ๊ฑฐ * fix: presgined-url ๋ฐ๊ธ ์์ฒญ ์ chat-id ์์ฑ ์ญ์ ๋ฐ aws-s3-provider ์ฃผ์ ๊ตฌ์ฒดํ * docs: swagger ์๋ต ๊ตฌ์ฒดํ * refactor: object-key ์์ฑ์ ์ํ url-generator ์ ์ * refactor: object-key ์์ฑ์ ์ํ url-generator ์ ์ฉ * docs: aws-s3-provider ๋ฉ์๋๋ค์ ๋งค๊ฐ๋ณ์ ๊ด๋ จ ์ค๋ช ์ถ๊ฐ * fix: s3 ๊ด๋ จ ์์ธ ์์น ์์ * fix: presigned-url ๋ฐ๊ธ api swagger ์๋ต์์ ์ฝ๋ ์ ๊ฑฐ * fix: presigned-url ๋ฐ๊ธ์ ์ํ dto๋ช ๋ณ๊ฒฝ * test: storage-controller ํ ์คํธ profile ์์ * fix: presigned-url ๋ฐ๊ธ์ ์ํ dto๋ช ๋ณ๊ฒฝ * fix: presigned-url ๋ฐ๊ธ์ ์ํ dto๋ช ๋ณ๊ฒฝ * test: ํ ์คํธ๋ฅผ ์ํ user ์ค์ ๋ณ๊ฒฝ * test: exclude-filters ์ถ๊ฐ * โจ ์ง์ถ ๋ด์ญ ์ญ์ API (#96) * feat: ์ญ์ api ์์ฑ * docs: swagger ๋ฌธ์ ์์ฑ * fix: ์ธ์ฆ ์ฒ๋ฆฌ ์ด๋์ ์ํ ํ๋ผ๋ฏธํฐ์์ * docs: ์ง์ถ ์ญ์ swagger 403 ์์ธ ์ถ๊ฐ * test: ์ญ์ ํ ์คํธ์ฝ๋ ์์ฑ * feat: fixture ๋ฉ์๋ ์ถ๊ฐ ๋ฐ ์ญ์ ํ ์คํธ์ฝ๋ assertion ์ถ๊ฐ * feat: fixturefixture ์์ ๋ณ๊ฒฝ * โจ ์ง์ถ ๋ด์ญ ์์ API (#93) * fix: usecase๋จ์ ํ์์๋ ํ๋ผ๋ฏธํฐ ์ ๊ฑฐ * feat: ์ง์ถ๋ด์ญ ์์ controller ์์ฑ * feat: usecase ์์ฑ * feat: spending ์ ๋ฐ์ดํธ ๋ฉ์๋ ์์ฑ ๋ฐ service ์์ฑ * feat: swagger docs ์์ฑ * feat: spending.update ๋ฉ์๋๋ฅผ customcategory ํฌํจํด ์ ๋ฐ์ดํธ ํ๋๋ก ์์ * docs: ์ง์ถ ๋ด์ญ ์์ฑ๊ณผ ์ค๋ณต๋ ์๋ฌ์๋ต ์ ๊ฑฐ * feat: ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ ์ฌ๋ถ ๋ถ๊ธฐ ๋ก์ง ๊ณ ๋ คํด ๋ก์ง ์ฌ์์ฑ * refactor: ๋ถํ์ํ userํ๋ ์ ๊ฑฐ๋ฅผ ์ํด req dto toentity ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ ํ ๋ฆฌํฉํ ๋ง * test: spendingupdateservice ํ ์คํธ ์์ฑ * test: ์ง์ถ๋ด์ญ ์์ธ ์กฐํ ๋ฐ ์์ ํตํฉํ ์คํธ ์์ฑ * fix: ์๋ชป ์์ฑ๋ fixture๋ฉ์๋ ์ ๊ฑฐ * test: spendingfixture ์์๊ฐ์ผ๋ก ๋ณ๊ฒฝ * feat: ํตํฉํ ์คํธ ํผ๋๋ฐฑ ๋ฐ์ * fix: ์ถฉ๋ resolve ํ ์๋ฌ ์์ * โจ Redisson์ ํ์ฉํ ๋ถ์ฐ ๋ฝ(Distributed Lock) ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ํ ์คํธ (#98) * chore: domain ๋ชจ๋ ๋ด redission ์์กด์ฑ ์ถ๊ฐ * feat: redisson config ์ค์ * feat: ๋ถ์ฐ๋ฝ ์ปค์คํ ์ด๋ ธํ ์ด์ ์์ฑ * feat: spring spel ์ปค์คํ ํ์ ์ ํธ ํด๋์ค ์์ฑ * fix: ๋ถ์ฐ๋ฝ ์ปค์คํ ์ด๋ ธํ ์ด์ need_same_transaction ํ๋ ์ถ๊ฐ * rename: need_same_transaction ์ฃผ์ ์ถ๊ฐ * feat: transaction propagation ๋ ๋ฒจ ์ง์ ์ถ์ ํฉํ ๋ฆฌ ์์ฑ * rename: need_same_transaction -> new ์์ * fix: redisson_call_new_transaction timout ๋ฐ ์ฃผ์ ์์ * rename: unit -> timeunit ์ด๋ฆ ์์ * feat: ๋ถ์ฐ๋ฝ aop ํด๋์ค ๊ตฌํ * fix: redis_connection_factory & redis_cache_manager ๋น @primary ๋ฑ๋ก * test: redisson ์ค์ ์ ์ํ test container redis password ์ค์ ์ถ๊ฐ * test: test container domain ๋ชจ๋ redis password ์ถ๊ฐ * test: domain ๋ชจ๋ db & redis testcontainer config ์ค์ * test: ๋ถ์ฐ ๋ฝ ํ ์คํธ์ฉ ๋๋ฏธ entity ์ ์ * test: ๋ถ์ฐ ๋ฝ ํ ์คํธ์ฉ ๋๋ฏธ service ๊ตฌํ * test: ๋ถ์ฐ๋ฝ ํ ์คํธ ์์ฑ * fix: return null ์์ * rename: ๋ฝ ํด์ ์์ ๋ก๊ทธ ์ถ๊ฐ * test: aop unit test ์ ์ฉ * fix: test_jpa_config query_dsl bean conditional ์ต์ ์ ์ฉ * test: ๋๋ฉ์ธ ๋ชจ๋ ํตํฉ ํ ์คํธ ์ด๋ ธํ ์ด์ ์์ฑ * fix: redis_config scan ๊ฒฝ๋ก ์ง์ * chore: could not safely identify store assignment for repository ์ด์ ์ ๊ฑฐ * test: @domain_integration_test ํ๊ฒฝ ์ถ๊ฐ * test: test_coupon_repository ์ ์ฉ * test: test_coupone service & repository profile test ์ง์ * test: ๋ถ์ฐ ๋ฝ์ด ์๋ ํ ์คํธ ์ผ์ด์ค ์ถ๊ฐ * test: jwt_auth_helper @redis_unit_test ์ด๋ ธํ ์ด์ ์ ๊ฑฐ * test: test_jpa_config_conditional_on_missing_bean ๋ฉ์๋์ @bean ์ถ๊ฐ * fix: query_dsl_config @primary ์ง์ * fix: lock ํ๋ ๋๊ธฐ์๊ฐ ์ฐ์ฅ * Batch: โจ Batch ๊ธฐ์ด ์ธํ ๋ฐ CD ํ์ดํ๋ผ์ธ ์์ (์์ ๋ PR ์ปจ๋ฒค์ ๊ด๋ จ ๋ด์ฉ ํฌํจ) (#99) * chore: batch module ์์ฑ * chore: batch ๋ชจ๋ application ํด๋์ค ์์ฑ * chore: batch ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ * chore: external-api docker script ์์น ์์ * chore: batch docker script ์์ฑ * chore: java build ์ ๋น๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ * chore: api cd gradlew parallel ์ต์ ์ถ๊ฐ && ํ์ผ๋ช ์์ * chore: cd ์คํฌ๋ฆฝํธ external-api docker ๊ฒฝ๋ก ์์ * chore: batch cd ์คํฌ๋ฆฝํธ ์ถ๊ฐ * fix: batch application ํด๋์ค main ํจ์ ์ถ๊ฐ * chore: tag & release ์๋ํ actions ์คํฌ๋ฆฝํธ ์์ฑ * chore: docker image ๊ฒฝ๋ก ์์ * chore: batch module ์์ฑ * chore: batch ๋ชจ๋ application ํด๋์ค ์์ฑ * chore: batch ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ * chore: external-api docker script ์์น ์์ * chore: batch docker script ์์ฑ * chore: java build ์ ๋น๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ * chore: api cd gradlew parallel ์ต์ ์ถ๊ฐ && ํ์ผ๋ช ์์ * chore: cd ์คํฌ๋ฆฝํธ external-api docker ๊ฒฝ๋ก ์์ * chore: batch cd ์คํฌ๋ฆฝํธ ์ถ๊ฐ * fix: batch application ํด๋์ค main ํจ์ ์ถ๊ฐ * chore: tag & release ์๋ํ actions ์คํฌ๋ฆฝํธ ์์ฑ * chore: docker image ๊ฒฝ๋ก ์์ * rename: ํ๊ทธ ๋ฐ ๋ฆด๋ฆฌ์ฆ ์๋ํ ํ์ดํ๋ผ์ธ ์ฃผ์ ์ถ๊ฐ * chore: cd ํ์ดํ๋ผ์ธ ๋ฒ์ ์ ๋ณด ์ถ์ถ step ์ถ๊ฐ * release: api v1.0.0 ์ถ๋ * release: api-v1.0.0 (#100) * fix: ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์ด๋ฏธ์ง ๋น๋ ๋ฒ์ ์ถ๊ฐ * Api: ๐ ํ๊ทธ ์์ฑ & ๋ฆด๋ฆฌ์ฆ ์๋ํ ํ์ดํ๋ผ์ธ ํ ๋ฐฐํฌ workflows call (#101) * fix: ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์ด๋ฏธ์ง ๋น๋ ๋ฒ์ ์ถ๊ฐ * rename: run ์ด๋ฆ call-external-api-deploy๋ก ๋ณ๊ฒฝ * chore: api & batch ๋ชจ๋ workflow_call trigger ์ถ๊ฐ * chore: tag ์ ๋ณด inputs.tags๋ก ์์ * test: ํ๊ทธ ์์ฑ ํธ๋ฆฌ๊ฑฐ opened ์ถ๊ฐ * test: merged ์กฐ๊ฑด์ ์์ ์ ๊ฑฐ * fix: call ์ธ์ ์ ๋ฌ ์ version -> tag ์์ * rename: batch cd ํ์ดํ๋ผ์ธ ์ด๋ฆ ์์ * chore: workflow_dispatch ์ ๊ฑฐ * chore: reuse workflow ํธ์ถ ์ secret key ์์ ์ต์ ์ถ๊ฐ * chore: pr ๋ณํฉ ์กฐ๊ฑด๋ฌธ ์ถ๊ฐ * Api: ๐ object-key์ depth ์์ ์ ์ํ ํ ํ๋ฆฟ ์์ (#102) * Api: โ๏ธ ๋ชฉํ ๊ธ์ก ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ API ์คํ ๋ณ๊ฒฝ (#103) * fix: ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์ด๋ฏธ์ง ๋น๋ ๋ฒ์ ์ถ๊ฐ * fix: target_amount entity is_read ํ๋ ์ถ๊ฐ * fix: target_amount 409 ์์ธ ์ฝ๋ ์ถ๊ฐ * fix: target-amount is_exists ๋ฉ์๋ ์ถ๊ฐ ๋ฐ query_dsl impl ๊ตฌํ * rename: exists ์คํ ์์ & tx read_only ์ต์ ์ถ๊ฐ * fix: target_amount id & user_id ์กฐ๊ฑด๋ฌธ ํ์ ๋ฉ์๋ ์ถ๊ฐ * fix: target_amount id, user_id exists ๋ฉ์๋ ์ถ๊ฐ * rename: ๋งค๊ฐ๋ณ์ ์์ ๋ณ๊ฒฝ * fix: target_amount dto query param์ ์ํ ํด๋์ค๋ช , ํ๋ ์ ๋ณด, ๋ฌธ์ ์์ * docs: target amount api spec ์์ * fix: api ์คํ์ ๋ง๊ฒ controller ์์ ๋ฐ ์์ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ * fix: target_amount_info dto is_read ํ๋ ์ถ๊ฐ * fix: target-amount ์์ฑ use case ๋ถ๋ฆฌ * fix: find_by_id ์ user_id ์กฐ๊ฑด๋ฌธ ์ ๊ฑฐ * fix: target_amount update ๋ฐํ ๊ฐ ์์ ๋ฐ date ๊ธฐ๋ฐ ํ์ -> target_amount_id ๊ธฐ๋ฐ ํ์์ผ๋ก ์์ * fix: authenticated_principal ์ฃผ์ ํ์์๋ ๊ณณ์์ ์ ๊ฑฐ * fix: target_amount_save_service ์ ๊ฑฐ * fix: target_amount ์์ฑ ์ ๋ถ์ฐ ๋ฝ ์ ์ฉ * style: distributed_lock ์ด๋ ธํ ์ด์ ์์น ์์ * fix: ๋ถ์ฐ๋ฝ prefix ๋ฌธ์์ด ๊ด๋ฆฌ ํด๋์ค ๋ถ๋ฆฌ * style: update_target_amount ํ ๋น๋ฌธ ์ถ๊ฐ * docs: target_amount patch ์๋ต ๋ฐ์ดํฐ ์์ * fix: lock prefix ์์ * test: target-amount ํตํฉ ํ ์คํธ ํ์ผ ํต์ผ ๋ฐ jdbc bulk query ์์ * fix: target_amount entity ๋น์ ๋ฐ์ดํฐ ํ์ธ ๋ฉ์๋ ์ถ๊ฐ * fix: update, delete ์ ๋น์ ๋ฐ์ดํฐ ์ฌ๋ถ ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ * fix: target_amount to_string() year, month ์ ๋ณด ์ถ๊ฐ * test: target_amount ๋ ์ง ๋ณ๊ฒฝ ํ cache ์ ๊ฑฐ * test: ๋ชฉํ ๊ธ์ก ์์ฑ ์์ฒญ ํ ์คํธ * fix: target_amount ๋ถ์ฐ ๋ฝ ํค spel ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ * test: target_amount ์ญ์ ํ ์คํธ ์ผ์ด์ค ์์ฑ * rename: target_amount ๋ฐ์ดํฐ ์์ฑ ์ ๋ก๊ทธ ์ ๊ฑฐ * rename: json ๋ด๋ถ target_amount ํ๋๋ช -> target_amount_detail ์์ * fix: target_amount ์์ฑ ์์ฒญ์์ ๋น์ ์์ฒญ ํ๋จ ๋ก์ง ์์ * test: put -> patch ์ด๋ฆ ์์ * test: target_amount controller unit test ์์ * fix: success response key ์์์ฒ๋ฆฌ * fix: use case ๋ด ๋ถํ์ํ create ํธ์ถ ์ ๊ฑฐ * rename: date_param dto schema ์คํ ์์ * test: ํน์ ๋ /์์ ๋ํ target_amount๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ 404 not found ์๋ฌ ์๋ต์ ๋ฐํํ๋ค * fix: target_amount use case not found ์ ์์ธ ์ฒ๋ฆฌ * docs: target api ์กฐํ ์ 404 ์์ธ ๋ฌธ์ํ * docs: target_amount ์์ ๋ฐ ์ญ์ ๋ฌธ์ ์์ฑ * fix: lock key์ date์์ day ์ธ์ ์ ๊ฑฐ * fix: ๋ฌธ์ํ๊ธฐ ์๋ต์๋ ๊ฐ์ ์ ์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ (#106) * docs: ๐ Readme-v0.0.3 (#108) * fix: ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์ด๋ฏธ์ง ๋น๋ ๋ฒ์ ์ถ๊ฐ * docs: root readme ์์ * docs: external-api ๋ชจ๋ docs ์์ * feat: โจ ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ์์ฒญ API ๊ตฌํ (#105) * feat: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ์์ฒญ dto ์ ์ * feat: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ์์ฒญ api ์ค๊ณ * feat: user entity์ profile-image-url ์์ ๋ก์ง ์ถ๊ฐ * feat: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก์ ์ํ usecase ์ ์ * feat: s3 ํ์ผ ์กด์ฌ ์ฌ๋ถ ๋ฐํ ๋ก์ง ๊ตฌํ * feat: storage ์ ์ฅ ์คํจ ์ ์๋ฌ์ฝ๋ ์ ์ * feat: s3 ํ์ผ ๋ณต์ฌ ๋ก์ง ๊ตฌํ * feat: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ์ ์ฅ api ๊ตฌํ * feat: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ์๋ณธ ์ ์ฅ ์ storage-class ์ ์ฉ * fix: ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง์ ์ํ storage-class ์์ * docs: ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก swagger ์๋ต ์ผ์ด์ค ์ถ๊ฐ * test: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก api ํ ์คํธ ์ฝ๋ ์์ฑ * test: user-account-usecase์ aws-s3-provider mockbean ์ ์ฉ * fix: ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ๋ฉ์๋ put์ผ๋ก ๋ณ๊ฒฝ * docs: ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ์ฑ๊ณต ์ ์์ ์๋ต ์ ๊ฑฐ * docs: ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก swagger parameter ์ ๊ฑฐ * fix: request dto validate ์ด๋ ธํ ์ด์ ์ถ๊ฐ ๋ฐ tab-character ์ ๊ฑฐ * rename: s3 ํ์ผ ์กด์ฌ ์ฌ๋ถ ๋ฉ์๋๋ช ์์ * fix: ํ๋กํ ์ด๋ฏธ์ง dto์ regex ํจํด ๊ฒ์ฆ ๋ก์ง ์ถ๊ฐ * test: ํ ์คํธ ์ผ์ด์ค ์ด๋ฏธ์ง ๊ฒฝ๋ก ์์ * fix: ํ๋กํ ์ด๋ฏธ์ง ๋ฑ๋ก ์์ฒญ dto ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ญ์ * refactor: ์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง ๊ฒฝ๋ก prefix ํ๊ฒฝ๋ณ์ ์ฒ๋ฆฌ * refactor: s3 object-key regex ์์๋ก ๋ถ๋ฆฌ * feat: s3 object-key regex ํด๋์ค ๋ถ๋ฆฌ ๋ฐ ์ ์ ๋ณ์๋ก ์ ์ธ * fix: โ๏ธ ์ฌ์ฉ์ ๋ก๊ทธ ๊ด๋ฆฌ ์ ์ฑ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ Device API ์์ (#104) * fix: ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์ด๋ฏธ์ง ๋น๋ ๋ฒ์ ์ถ๊ฐ * fix: device entity os & model ํ๋ ์ ๊ฑฐ * fix: device token dto model, os ํ๋ ์ ๊ฑฐ * fix: device_dto to_entity() ๋ฉ์๋ ๋ณต๊ตฌ * fix: device update ๋ฉ์๋ ํธ์ถ ์, activate ์ํ๋ก ๋ณ๊ฒฝ * fix: device ๋ฑ๋ก ๋น์ง๋์ค ๋ก์ง ์์ * test: device controller unit test์์ model, os ์ ๊ฑฐ * fix: device_fixture model, os ํ๋ ์ ๊ฑฐ * rename: fixture token ๋ณ๊ฒฝ ์์๋ช ์์ * fix: device entity ์กฐํ ์ ํ์ฑํ ์กฐ๊ฑด ์ถ๊ฐ * fix: device usecase ํ ์คํธ ์๋๋ฆฌ์ค ์์ * fix: device ์ฟผ๋ฆฌ ์๋ ์กฐ๊ฑด๋ฌธ ์์ * test: origin_token์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ new_token ๋ฑ๋ก * fix: @sql_restriction ์ ๊ฑฐ * test: ์์ ์์ฒญ & ๊ธฐ์กด ํ ํฐ ์์ ์, ์์ ํ ํฐ์ผ๋ก ์ ๊ท ๋ฑ๋ก ํ ์คํธ * fix: device_register_service ๋ก์ง ์์ * fix: device_dto new_token ํ๋ ์ ๊ฑฐ * test: device controller unit test ์์ * fix: device ์๋ต ๊ฐ์ฒด ์์ฑ ์ ์์ฒญ ํ ํฐ์ด ์๋ ์๋ฒ ํ ํฐ์ ์๋ต์ผ๋ก ์ฌ์ฉ * fix: device_register_service ์ ๊ฑฐ && ๋ก์ง ๋จ์ํ * fix: ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ํ ํฐ์ด ์๋ฒ์์ ๋นํ์ฑํ ์ํ์ผ ๋ ์์ธ์ฒ๋ฆฌ * test: test case ์์ฒญ ์์ * rename: device -> device_token์ผ๋ก ์์ * rename: device_token entity to_string ์์ * rename: device token put ์์ฒญ ์๋ต key ์์ * docs: device put api ์ค์จ๊ฑฐ ์์ * fix: device controller ๊ฒฝ๋ก ์์ * test: device_token controller unit test ๋ณ๊ฒฝ๋ url ๋ฐ ์๋ต ํฌ๋งท ๋ฐ์ * test: device_fixture -> device_token_fixture * test: ๋จ์ผ token์ ๋ํ ์๋๋ฆฌ์ค๋ก ํ ์คํธ ์์ ๋ฐ ๋นํ์ฑํ ํ ํฐ ์์ฒญ ์๋ฌ ์ผ์ด์ค ์ถ๊ฐ * fix: register_device_token ํ์ฌ๋ ํจํด ์ ์ฉ * fix: device_token_unregister ํ์ฌ๋ ํจํด ์ ์ฉ * test: device token ๋จ์ ํ ์คํธ ๋ถ๋ฆฌ * test: device_token_unregister_service_test ๋ถ๋ฆฌ * fix: user_account_use_case ํ์ฌ๋ ํจํด ์ ์ฉ * test: user_account_usecase unit test ๋ถ๋ฆฌ * fix: device entity os & model ํ๋ ์ ๊ฑฐ * fix: device token dto model, os ํ๋ ์ ๊ฑฐ * fix: device_dto to_entity() ๋ฉ์๋ ๋ณต๊ตฌ * fix: device update ๋ฉ์๋ ํธ์ถ ์, activate ์ํ๋ก ๋ณ๊ฒฝ * fix: device ๋ฑ๋ก ๋น์ง๋์ค ๋ก์ง ์์ * test: device controller unit test์์ model, os ์ ๊ฑฐ * fix: device_fixture model, os ํ๋ ์ ๊ฑฐ * rename: fixture token ๋ณ๊ฒฝ ์์๋ช ์์ * fix: device entity ์กฐํ ์ ํ์ฑํ ์กฐ๊ฑด ์ถ๊ฐ * fix: device usecase ํ ์คํธ ์๋๋ฆฌ์ค ์์ * fix: device ์ฟผ๋ฆฌ ์๋ ์กฐ๊ฑด๋ฌธ ์์ * test: origin_token์ ๋ํ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ new_token ๋ฑ๋ก * fix: @sql_restriction ์ ๊ฑฐ * test: ์์ ์์ฒญ & ๊ธฐ์กด ํ ํฐ ์์ ์, ์์ ํ ํฐ์ผ๋ก ์ ๊ท ๋ฑ๋ก ํ ์คํธ * fix: device_register_service ๋ก์ง ์์ * fix: device_dto new_token ํ๋ ์ ๊ฑฐ * test: device controller unit test ์์ * fix: device ์๋ต ๊ฐ์ฒด ์์ฑ ์ ์์ฒญ ํ ํฐ์ด ์๋ ์๋ฒ ํ ํฐ์ ์๋ต์ผ๋ก ์ฌ์ฉ * fix: device_register_service ์ ๊ฑฐ && ๋ก์ง ๋จ์ํ * fix: ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ํ ํฐ์ด ์๋ฒ์์ ๋นํ์ฑํ ์ํ์ผ ๋ ์์ธ์ฒ๋ฆฌ * test: test case ์์ฒญ ์์ * rename: device -> device_token์ผ๋ก ์์ * rename: device_token entity to_string ์์ * rename: device token put ์์ฒญ ์๋ต key ์์ * docs: device put api ์ค์จ๊ฑฐ ์์ * fix: device controller ๊ฒฝ๋ก ์์ * test: device_token controller unit test ๋ณ๊ฒฝ๋ url ๋ฐ ์๋ต ํฌ๋งท ๋ฐ์ * test: device_fixture -> device_token_fixture * test: ๋จ์ผ token์ ๋ํ ์๋๋ฆฌ์ค๋ก ํ ์คํธ ์์ ๋ฐ ๋นํ์ฑํ ํ ํฐ ์์ฒญ ์๋ฌ ์ผ์ด์ค ์ถ๊ฐ * fix: register_device_token ํ์ฌ๋ ํจํด ์ ์ฉ * fix: device_token_unregister ํ์ฌ๋ ํจํด ์ ์ฉ * test: device token ๋จ์ ํ ์คํธ ๋ถ๋ฆฌ * test: device_token_unregister_service_test ๋ถ๋ฆฌ * fix: user_account_use_case ํ์ฌ๋ ํจํด ์ ์ฉ * test: user_account_usecase unit test ๋ถ๋ฆฌ * fix: user_profile_update_dto merge conflict * fix: โ๏ธ ์ฌ์ฉ์ ์ ์ ์ง์ถ ์นดํ ๊ณ ๋ฆฌ `โฏ` ์์ด์ฝ ๋ฐ์ (#107) * rename: ์ปค์คํ ์นดํ ๊ณ ๋ฆฌ ์์ 0->custom, 12->other ์์ * style: spending key ์์ํ * docs: spending category api ์์ ์์ฒญ ํ๋ผ๋ฏธํฐ other ์ถ๊ฐ * fix: spending_controller ...์์ด์ฝ validation ์ฒดํฌ * fix: spending_category_dto validation ์ถ๊ฐ * fix: spending entity ์์ฑ์ validation ์ถ๊ฐ * fix: spending_category_dto validation ์ถ๊ฐ * test: spending category ๋ฑ๋ก ์ other -> custom ๊ฑฐโฆ
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
์์ ์ด์
์์ ์ฌํญ
๋ฆฌ๋ทฐ์ด๊ฐ ์ค์ ์ ์ผ๋ก ํ์ธํด์ผ ํ๋ ๋ถ๋ถ
๋ฐ๊ฒฌํ ์ด์