Skip to content

Commit

Permalink
๐ŸŽ‡ Release v1.0.0 (#159)
Browse files Browse the repository at this point in the history
* 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
4 people authored Aug 27, 2024
1 parent 8e0adc4 commit 741ab52
Show file tree
Hide file tree
Showing 459 changed files with 27,712 additions and 2 deletions.
18 changes: 18 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## ์ž‘์—… ์ด์œ 


<br/>

## ์ž‘์—… ์‚ฌํ•ญ


<br/>

## ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ค‘์ ์ ์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„


<br/>

## ๋ฐœ๊ฒฌํ•œ ์ด์Šˆ


89 changes: 89 additions & 0 deletions .github/workflows/create-tag-and-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Tag and Release

on:
pull_request:
types: [ closed ]

jobs:
extract-info:
# PR์ด merge ๋˜์—ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰ (merge๊ฐ€ ์•„๋‹Œ close๋Š” ์ œ์™ธ)
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
repository-projects: write
outputs:
module: ${{ steps.module_prefix.outputs.module }}

steps:
- name: Checkout PR
uses: actions/checkout@v4

# PR ์ œ๋ชฉ์œผ๋กœ ๋ถ€ํ„ฐ ๋ชจ๋“ˆ๋ช… ์ถ”์ถœ (ex. Api, Batch, Admin, Socket)
- name: extract PR info
id: module_prefix
run: |
PR_TITLE="${{ github.event.pull_request.title }}"
echo "PR title : $PR_TITLE"
if [[ "$PR_TITLE" =~ ^(Api|Batch|Admin|Socket|Ignore): ]]; then
PREFIX="${BASH_REMATCH[1]}"
echo "Prefix: $PREFIX"
echo "module=$PREFIX" >> $GITHUB_OUTPUT
else
echo "PR title does not match the pattern"
exit 1
fi
release:
needs: extract-info
if: ${{ needs.extract-info.outputs.module != 'Ignore' }} # Ignore๋กœ ์‹œ์ž‘ํ•˜๋Š” PR์€ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘๋‹จ
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
repository-projects: write

outputs:
tag: ${{ steps.tag_version.outputs.new_tag }}

steps:
- name: version and tag
id: tag_version
uses: mathieudutour/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
default_bump: patch
release_branches: main,dev.*
custom_release_rules: release:major, feat:minor:Features, refactor:minor:Refactoring, fix:patch:Bug Fixes, hotfix:patch:Hotfixes, docs:patch:Documentation, style:patch:Styles, perf:patch:Performance Improvements, test:patch:Tests, ci:patch:Continuous Integration, cd:patch:Continuous Deployment, chore:patch:Chores, revert:patch:Reverts
tag_prefix: '${{ needs.extract-info.outputs.module }}-v'

# ์ถ”์ถœ๋œ ๋ฒ„์ „ ๋ฐ ๋ณ€๊ฒฝ ์ด๋ ฅ ๋กœ๊ทธ ์ถœ๋ ฅ
- name: check output
run: |
echo "new_tag : ${{ steps.tag_version.outputs.new_tag }}"
echo "change_log : ${{ steps.tag_version.outputs.changelog }}"
# GitHub Release ์ƒ์„ฑ
- name: Create a GitHub release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}

call-external-api-deploy:
needs: [ extract-info, release ]
if: ${{ needs.extract-info.outputs.module == 'Api' }}
uses: ./.github/workflows/deploy-external-api.yml
secrets: inherit
with:
tags: ${{ needs.release.outputs.tag }}

call-batch-deploy:
needs: [ extract-info, release ]
if: ${{ needs.extract-info.outputs.module == 'Batch' }}
uses: ./.github/workflows/deploy-batch.yml
secrets: inherit
with:
tags: ${{ needs.release.outputs.tag }}
77 changes: 77 additions & 0 deletions .github/workflows/deploy-batch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Continuous Deployment - Batch

on:
workflow_call:
inputs:
tags:
description: '๋ฐฐํฌํ•  Batch ๋ชจ๋“ˆ ํƒœ๊ทธ ์ •๋ณด (Batch-v*.*.*)'
required: true
type: string

permissions:
contents: read

jobs:
deployment:
runs-on: ubuntu-20.04

steps:
# 1. Compare branch ์ฝ”๋“œ ๋‚ด๋ ค ๋ฐ›๊ธฐ
- name: Checkout PR
uses: actions/checkout@v3
with:
ref: ${{ github.event.push.base_ref }}

# 2. ๋ฒ„์ „ ์ •๋ณด ์ถ”์ถœ (ํƒœ๊ทธ ์ •๋ณด์—์„œ *.*.*๋งŒ ์ถ”์ถœ)
- name: Get Version
id: get_version
run: |
RELEASE_VERSION_WITHOUT_V="$(cut -d'v' -f2 <<< ${{ inputs.tags }})"
echo "VERSION=$RELEASE_VERSION_WITHOUT_V" >> $GITHUB_OUTPUT
# 3. ์ž๋ฐ” ํ™˜๊ฒฝ ์„ค์ •
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# 4. FCM Admin SDK ํŒŒ์ผ ์ƒ์„ฑ
- name: Create Json
uses: jsdaniell/[email protected]
with:
name: ${{ secrets.FIREBASE_ADMIN_SDK_FILE }}
json: ${{ secrets.FIREBASE_ADMIN_SDK }}
dir: ${{ secrets.FIREBASE_ADMIN_SDK_DIR }}

# 5. Build Gradle
- name: Build Gradle
run: |
chmod +x ./gradlew
./gradlew :pennyway-batch:build --parallel --stacktrace --info -x test
shell: bash

# 6. Docker ์ด๋ฏธ์ง€ build ๋ฐ push
- name: docker build and push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t pennyway/pennyway-batch:${{ steps.get_version.outputs.VERSION }} ./pennyway-batch
docker build -t pennyway/pennyway-batch:latest ./pennyway-batch
docker push pennyway/pennyway-batch:${{ steps.get_version.outputs.VERSION }}
docker push pennyway/pennyway-batch:latest
# 7. AWS SSM์„ ํ†ตํ•œ Run-Command (Docker ์ด๋ฏธ์ง€ pull ํ›„ docker-compose๋ฅผ ํ†ตํ•œ ์‹คํ–‰)
- name: AWS SSM Send-Command
uses: peterkimzz/aws-ssm-send-command@master
id: ssm
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
instance-ids: ${{ secrets.AWS_DEV_INSTANCE_ID }}
working-directory: /home/ubuntu
command: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker system prune -a -f
docker pull pennyway/pennyway-batch
docker-compose up -d
99 changes: 99 additions & 0 deletions .github/workflows/deploy-external-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Continuous Deployment - External API

on:
workflow_call:
inputs:
tags:
description: '๋ฐฐํฌํ•  Api ๋ชจ๋“ˆ ํƒœ๊ทธ ์ •๋ณด (Api-v*.*.*)'
required: true
type: string
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
tags:
description: 'Test scenario tags'
required: false
type: boolean
environment:
description: 'Environment to run tests against'
type: environment
required: false

permissions:
contents: read

jobs:
deployment:
runs-on: ubuntu-20.04

steps:
# 1. Compare branch ์ฝ”๋“œ ๋‚ด๋ ค ๋ฐ›๊ธฐ
- name: Checkout PR
uses: actions/checkout@v3
with:
ref: ${{ github.event.push.base_ref }}

# 2. ๋ฒ„์ „ ์ •๋ณด ์ถ”์ถœ (ํƒœ๊ทธ ์ •๋ณด์—์„œ *.*.*๋งŒ ์ถ”์ถœ)
- name: Get Version
id: get_version
run: |
RELEASE_VERSION_WITHOUT_V="$(cut -d'v' -f2 <<< ${{ inputs.tags }})"
echo "VERSION=$RELEASE_VERSION_WITHOUT_V" >> $GITHUB_OUTPUT
# 3. ์ž๋ฐ” ํ™˜๊ฒฝ ์„ค์ •
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# 4. FCM Admin SDK ํŒŒ์ผ ์ƒ์„ฑ
- name: Create Json
uses: jsdaniell/[email protected]
with:
name: ${{ secrets.FIREBASE_ADMIN_SDK_FILE }}
json: ${{ secrets.FIREBASE_ADMIN_SDK }}
dir: ${{ secrets.FIREBASE_ADMIN_SDK_DIR }}

# 5. Build Gradle
- name: Build Gradle
run: |
chmod +x ./gradlew
./gradlew :pennyway-app-external-api:build --parallel --stacktrace --info -x test
shell: bash

# 6. Docker ์ด๋ฏธ์ง€ build ๋ฐ push
- name: docker build and push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t pennyway/pennyway-was:${{ steps.get_version.outputs.VERSION }} ./pennyway-app-external-api
docker build -t pennyway/pennyway-was:latest ./pennyway-app-external-api
docker push pennyway/pennyway-was:${{ steps.get_version.outputs.VERSION }}
docker push pennyway/pennyway-was:latest
# 7. AWS SSM์„ ํ†ตํ•œ Run-Command (Docker ์ด๋ฏธ์ง€ pull ํ›„ docker-compose๋ฅผ ํ†ตํ•œ ์‹คํ–‰)
- name: AWS SSM Send-Command
uses: peterkimzz/aws-ssm-send-command@master
id: ssm
env:
VERSION: ${{ steps.get_version.outputs.VERSION }}
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
instance-ids: ${{ secrets.AWS_DEV_INSTANCE_ID }}
working-directory: /home/ubuntu
command: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker system prune -a -f
docker pull pennyway/pennyway-was
chmod +x deploy.sh
bash -x ./deploy.sh
19 changes: 19 additions & 0 deletions .github/workflows/open-api-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Code Review

permissions:
contents: read
pull-requests: write

on:
pull_request:
types: [ opened ]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: anc95/ChatGPT-CodeReview@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPEN_API_KEY }}
LANGUAGE: Korean
51 changes: 51 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Continuous Integration

on:
pull_request:
branches: [ "dev" ]
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
tags:
description: 'Test scenario tags'
required: false
type: boolean
environment:
description: 'Environment to run tests against'
type: environment
required: false

permissions:
contents: read

jobs:
testing:
runs-on: ubuntu-20.04

steps:
# 1. Compare branch ์ฝ”๋“œ ๋‚ด๋ ค ๋ฐ›๊ธฐ
- name: Checkout PR
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}

# 2. ์ž๋ฐ” ํ™˜๊ฒฝ ์„ค์ •
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# 3. Gradle Test ์‹คํ–‰
- name: Test with Gradle
run: |
chmod +x ./gradlew
./gradlew --info --parallel test
Loading

0 comments on commit 741ab52

Please sign in to comment.