Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* 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 ๊ฑฐโฆ
- Loading branch information