Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

๐Ÿ“‘ Readme v0.0.2 #26

Merged
merged 3 commits into from
Mar 29, 2024
Merged

๐Ÿ“‘ Readme v0.0.2 #26

merged 3 commits into from
Mar 29, 2024

Conversation

psychology50
Copy link
Member

์ž‘์—… ์ด์œ 

  • BE WAS repository ๋ฌธ์„œ ์ตœ์‹ ํ™”

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

  • ERD ์ถ”๊ฐ€
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ์ˆ˜์ •
  • ์‚ฌ์šฉ ์ค‘์ธ Infra ํ•ญ๋ชฉ ์ถ”๊ฐ€
  • ์˜ค๊ธฐ์ž… ์†Œ์ฃผ์ œ ์ˆ˜์ •

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

  • ์˜คํƒˆ์ž ์žˆ๋Š” ์ง€ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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

  • ์—†์Œ

@psychology50 psychology50 added the documentation Improvements or additions to documentation label Mar 29, 2024
@psychology50 psychology50 self-assigned this Mar 29, 2024
Copy link
Member

@asn6878 asn6878 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค :)

@psychology50 psychology50 merged commit 6334e72 into dev Mar 29, 2024
1 check passed
@psychology50 psychology50 deleted the docs/update-readme branch March 29, 2024 05:07
psychology50 added a commit that referenced this pull request Aug 27, 2024
* chore: init project

* feat: ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆํ™”

* feat: common-๊ณตํ†ต ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜

* docs: ํ”„๋กœ์ ํŠธ ์„ค๋ช… ๋ฐ ๋ชจ๋“ˆ ๋ณ„ Convention๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ž„์‹œ ์ž‘์„ฑ

* docs: ํ”„๋กœ์ ํŠธ readme ์žฌ์ž‘์„ฑ

* docs: ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ README ์˜คํƒˆ์ž ์ˆ˜์ •

* docs: PULL_REQUEST_TEMPLATE.md ์ž‘์„ฑ

Co-authored-by: jinlee1703 <[email protected]>

* fix: ํ…œํ”Œ๋ฆฟ ๊ฒฝ๋กœ ์ˆ˜์ •

* feat: 7-bit error code enum ๋ฐ interface ์ •์˜ && causedBy record ์ •์˜

* rename: ๊ณตํ†ต ์˜ˆ์™ธ ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์„ ์ถ”๊ฐ€

* feat: CausedBy ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ && rename: CausedBy ๋ฉ”์„œ๋“œ๋ณ„ ์ฃผ์„ ์ถ”๊ฐ€

* rename: Domain Code ์ฃผ์„ ์ˆ˜์ •

* rename: Field Code ์ฃผ์„ ์ˆ˜์ •

* rename: CausedBy ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ช… valueOf -> of๋กœ ์ˆ˜์ •

* fix: CausedBy code ์ž๋ฆฟ์ˆ˜ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜์ • && test: CausedBy ๊ฐ์ฒด 6๊ฐ€์ง€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* rename: CausedBy ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ฃผ์„ ์ˆ˜์ •

* โœจ JwtProvider ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ AT, RT Provider ๊ตฌํ˜„์ฒด ์ •์˜ (#6)

* chore: common ๋ชจ๋“ˆ์— spring-core ์˜์กด์„ฑ ์ฃผ์ž… && infra ๋ชจ๋“ˆ์— jwt ์˜์กด์„ฑ ์ฃผ์ž…

* feat: Auth ์ƒ์ˆ˜ ์„ค์ •

* feat: JwtProvider ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

* feat: domain & field zero ์ƒ์ˆ˜ ์ž‘์„ฑ

* feat: Jwt ์˜ˆ์™ธ ์ƒ์ˆ˜ ์„ค์ •

* feat: Jwt ์˜ˆ์™ธ ํด๋ž˜์Šค

* fix: ReasonCode Zero bit ์ถ”๊ฐ€

* feat: JwtErrorCodeUtil ์ž‘์„ฑ

* chore: application.yml profile ๋ถ„๋ฆฌ

* feat: AT, RT Qualifier ๋ชฉ์  ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* chore: jwt secret key & expiration time ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฃผ์ž…

* rename: provider annotation ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ -> ์ „๋žต

* feat: common ๋ชจ๋“ˆ์— DateUtil ์ถ”๊ฐ€

* feat: access token claim dto && provider ์ž‘์„ฑ

* test: AccessTokenProvider test ์ž‘์„ฑ

* fix: test given์ ˆ ์ถ•์•ฝ

* refactor: AT Claims key ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ๋ช…์‹œ์  ํ•„๋“œ ์ง€์ •

* feat: refresh token dto && payload key ์ƒ์ˆ˜ํ™”

* feat: refresh token provider ์ž‘์„ฑ

* test: ์„œ๋ช… ์กฐ์ž‘ ํ† ํฐ ์—๋Ÿฌ ๊ฒ€์ฆ

* rename: getSubInfoFromToken -> getJwtClaimsFromToken ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ

* rename: JwtProvider ์ฃผ์„ ์ˆ˜์ • ๋ฐ ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* fix: ํ† ํฐ ๋งŒ๋ฃŒ์‹œ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง

* test: ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ, true ๋ฐ˜ํ™˜ ๊ฒ€์‚ฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€

* fix: isTokenExpired() ๋ฉ”์„œ๋“œ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง ๋กœ์ง ์ˆ˜์ • : ํ…Œ์ŠคํŠธ ์„ฑ๊ณต

* โœจ JDBC & JPA & QueryDsl Configuration ์„ค์ • (#7)

* chore: mysql & jpa & queryDsl gradle ์˜์กด์„ฑ ์ถ”๊ฐ€

* chore: queryDsl generated ๋””๋ ‰ํ† ๋ฆฌ git ์ถ”์  ์ œ๊ฑฐ

* chore: jdbc, jpa application.yml ์„ค์ • ์ถ”๊ฐ€

* chore: extenal-api ๋ชจ๋“ˆ application.yml ๊ทธ๋ฃน ์ถ”๊ฐ€

* chore: jpa ์„ค์ • profile ๋ถ„๋ฆฌ && profile ๊ทธ๋ฃน ์ถ”๊ฐ€

* chore: infra ๋ชจ๋“ˆ application.yml ๊ทธ๋ฃน ์ถ”๊ฐ€

* feat: Jpa config

* feat: QueryDsl config

* chore: EnalbeJpaAuditing auditorAwareRef ์„ค์ • ์ œ๊ฑฐ

* fix: config ๋””๋ ‰ํ† ๋ฆฌ ์ˆ˜์ •

* Conventional Commit์„ ์œ„ํ•œ Git Hooks ์„ค์ • (#8)

* chore: commit-lint ๊ด€๋ จ ํŒจํ‚ค์ง€ ์„ค์น˜

* chore: .gitignore์— node_modules ์ถ”๊ฐ€

* chore: commit convention ๋“ฑ๋ก

* chore: commit-lint ์ ์šฉ

* โœจ Redis Configuration ์„ค์ • (#9)

* chore: infra ๋ชจ๋“ˆ ๋‚ด redis ์˜์กด์„ฑ ์ฃผ์ž… (api)

* chore: domain ๋ชจ๋“ˆ ๋‚ด redis ์˜์กด์„ฑ ์ฃผ์ž… (implementation)

* chore: redis ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

* feat: Domain Redis Connection Bean Qualify Annotation ์ƒ์„ฑ

* feat: Domain Redis CacheManager Qualify Annotation ์ƒ์„ฑ

* feat: Domain Redis Template Qualify Annotation ์ƒ์„ฑ

* chore: domain ๋ชจ๋“ˆ redis config ์ž‘์„ฑ

* feat: Infra Redis CacheManager Qualify Annotation ์ƒ์„ฑ

* feat: SecurityUser Redis CacheManager Qualify Annotation ์ƒ์„ฑ

* feat: Oidc Redis CacheManager Qualify Annotation ์ƒ์„ฑ

* chore: infra ๋ชจ๋“ˆ cache config ์„ค์ •

* โœจ OpenAPI Swagger config ์„ค์ • (#10)

* chore: external-api ๋ชจ๋“ˆ springdoc-openapi 2.4.0 ์˜์กด์„ฑ ์ฃผ์ž…

* chore: external-api ๋ชจ๋“ˆ ๋‚ด openapi ์„ค์ • ์ถ”๊ฐ€

* chore: swagger config ์ž‘์„ฑ

* fix: application profile prod -> dev

* โœ๏ธ Reason Code Zero bit ์ œ๊ฑฐ โ†’ 500๋ฒˆ๋Œ€ Zero bit ์ƒ์ˆ˜ ์ถ”๊ฐ€ (#11)

* fix: reason code zero bit ์ œ๊ฑฐ && 500๋ฒˆ๋Œ€ 0๋ฒˆ bit ์ƒ์ˆ˜ ์ถ”๊ฐ€

* test: caused-by-test ์˜ˆ์ƒ ์—๋Ÿฌ์ฝ”๋“œ ์ˆ˜์ • (ํ†ต๊ณผ ํ™•์ธ)

* fix: jwt-error-code ๋ณ€๊ฒฝ๋œ reason code๋กœ ์ˆ˜์ •

* Swagger ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜คํƒ€ ์ˆ˜์ • (#12)

* โœจ ์‘๋‹ต ๊ณตํ†ตํ™” ๋ฐ ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (#14)

* chore: test api directory .gitignore ๊ฒฝ๋กœ ์ถ”๊ฐ€

* feat: ์„ฑ๊ณต ์‘๋‹ต ํด๋ž˜์Šค ์ •์˜

* feat: error-response ๊ณตํ†ต ์‘๋‹ต ํด๋ž˜์Šค ์ž‘์„ฑ

* fix: success ์‘๋‹ต nocontent() ์‘๋‹ต null -> empty object

* feat: method argument not valid ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* fix: reason 422 error type mismatch ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: missing request header ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: request json parsing ์‹คํŒจ ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: missing request parameter ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” url ์š”์ฒญ ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: 500 internal server error ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: npe & exception ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* fix: response status annotation ์ฒ˜๋ฆฌ

* style: intellij code convention setting ์ถ”๊ฐ€ํ•˜์—ฌ reformat

* โœจ User Domain ์„ค์ • (#15)

* feat: db, application ํƒ€์ž… ํ˜•๋ณ€ํ™˜ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

* feat: code <-> enum ๋ณ€ํ™˜ util ์ž‘์„ฑ

* feat: custom converter ๊ตฌํ˜„์„ ์œ„ํ•œ ์ถ”์ƒ ํด๋ž˜์Šค ์ž‘์„ฑ

* style: api & domain package ๊ฒฝ๋กœ ์ˆ˜์ •

* feat: create, update auditable ์ถ”์ƒ ํด๋ž˜์Šค ์ž‘์„ฑ

* feat: role type enum & conveter ์ •์˜

* feat: visibility type enum & conveter ์ •์˜

* rename: visibility to profile-visibility ํด๋ž˜์Šค๋ช… ์ˆ˜์ •

* fix: converter ์ƒ์„ฑ์ž ์ˆ˜์ •

* feat: user entity ์ƒ์„ฑ

* feat: user jpa data repository ์ƒ์„ฑ

* fix: ์—๋Ÿฌ ์ฒด๊ณ„ 7์ž๋ฆฌ ์ˆ˜ -> 4์ž๋ฆฌ ์ˆ˜

* test: 4์ž๋ฆฌ์ˆ˜ ์—๋Ÿฌ ์ฒด๊ณ„ ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* fix: reason code 400๋ฒˆ๋Œ€ 4๋ฒˆ invalid request ์ถ”๊ฐ€

* feat: user error code & exception ์ •์˜

* feat: user domain service ์ž‘์„ฑ

* feat: user domain service create ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: user domain service exists ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: jwt error code ๋‚ด์—์„œ domain, field code ์ œ๊ฑฐ

* chore: query-dsl generated ๊ฒฝ๋กœ .gitignore

* fix: profile-visibility converter ์˜ค์ฃผ์ž… ์ˆ˜์ •

* fix: test api ์‚ญ์ œ

* chore: ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •์œผ๋กœ ์ธํ•œ test ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •

* rename: caused by '7์ž๋ฆฌ ์—๋Ÿฌ์ฝ”๋“œ' ์ฃผ์„ ์ˆ˜์ •

* โœจ๏ธ ํšŒ์›๊ฐ€์ž… API (#16)

* feat: white space validator ์ž‘์„ฑ

* rename: not-white space ์ฃผ์„ ์ถ”๊ฐ€

* feat: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์š”์ฒญ dto ์ž‘์„ฑ

* rename: cerification -> verification ๋‹จ์–ด ์ˆ˜์ •

* feat: refresh token redis entity ์ž‘์„ฑ

* feat: refresh token repository ์ž‘์„ฑ

* fix: refresh token ttl time unit seconds -> milliseconds

* feat: refresh token service ๊ตฌํ˜„

* feat: ์ด๋ชจ์ง€ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* feat: ํŒจ์Šค์›Œ๋“œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* feat: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… dto ์ž‘์„ฑ

* fix: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… dto code ํ•„๋“œ ์ถ”๊ฐ€

* feat: jwt tokens ํŽธ์˜ dto ํด๋ž˜์Šค ์ƒ์„ฑ

* fix: refresh token ttl timeunit milliseconde -> seconds

* feat: jwts ์ƒ์„ฑ mapper ์ •์˜

* fix: refresh token provider primary bean ์ œ๊ฑฐ

* feat: cookie util ์ž‘์„ฑ

* style: jwts dto ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •

* fix: jwt auth mapper ํ† ํฐ ์ƒ์„ฑ ๋กœ์ง ์ˆ˜์ •

* feat: ํšŒ์›๊ฐ€์ž… usecase ๊ตฌํ˜„(์ธ์ฆ๋ฒˆํ˜ธ ๋ฏธํ™•์ธ)

* feat: auth controller sign up api ๊ฐœ๋ฐฉ

* style: test ๋ชจ๋“ˆ ๋‚ด ๊ฒฝ๋กœ ์ˆ˜์ •

* rename: sign-up dto ์ „ํ™”๋ฒˆํ˜ธ ์˜ˆ์‹œ ๋ฌธ์ž ์ˆ˜์ •

* fix: phone pattern \n ์ œ๊ฑฐ

* fix: not empty -> not blank validation check ๋ณ€๊ฒฝ

* fix: cookie util max age int -> long

* fix: auth controller cookie util ์˜์กด์„ฑ ์ฃผ์ž…

* test: auth controller 7๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

* test: ํ•„๋“œ ๋ˆ„๋ฝ ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”๊ฐ€ && cookie ํ—ค๋” ๊ฒ€์ฆ ์ˆ˜์ •

* fix: jwt mapper์—์„œ rt provider์— access claim -> refresh claim ์ˆ˜์ •

* Dockfile ์ž‘์„ฑ (#17)

* chore: .gitignore์— .env ํŒŒ์ผ ๊ฒฝ๋กœ ์ถ”๊ฐ€

* feat: dockerfile ์ž‘์„ฑ

* fix: dockerfile์˜ profile์„ local์—์„œ dev๋กœ ์ˆ˜์ •

* โœจ ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ API (#18)

* feat: ์ธ์ฆ๋ฒˆํ˜ธ ์†ก์‹  dto ์ž‘์„ฑ

* feat: ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก & ๊ฒ€์ฆ API ์„ค๊ณ„

* chore: domain ๋ชจ๋“ˆ redis unit test ๋ชฉ์  embedded-redis ์˜์กด์„ฑ ์ถ”๊ฐ€

* chore: redis test ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ embedded -> container

* test: redis container config ์ž‘์„ฑ

* chore: domain ๋ชจ๋“ˆ test application.yml ์ž‘์„ฑ

* chore: redis template bean primary ์ถ”๊ฐ€

* feat: phone validation code(ํšŒ์›๊ฐ€์ž…, ์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ) ์ƒ์ˆ˜ ์ง€์ •

* test: phone validation repository ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* feat: phone validation repository ์ž‘์„ฑ

* test: phone validation repository ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* feat: phone verification service ์ž‘์„ฑ

* feat: validation code converter ์ž‘์„ฑ

* feat: web config ์„ค์ •

* feat: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ/๊ฒ€์ฆ dto codetype ํ•„๋“œ ์ถ”๊ฐ€

* fix: phone verification repository save ์‹œ, expires_at ๋ฐ˜ํ™˜

* fix: phone verification service create ๋ฉ”์„œ๋“œ, expires_at ๋ฐ˜ํ™˜

* rename: read by phone error log ๋ฌธ๊ตฌ ์ˆ˜์ •

* feat: phone verification ์—๋Ÿฌ ์ฝ”๋“œ ์ •์˜

* feat: phone verification ์—๋Ÿฌ ํด๋ž˜์Šค ์ •์˜

* feat: sns dto ํด๋ž˜์Šค ์„ ์–ธ

* feat: sms provider ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

* rename: request time -> request at ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •

* feat: infra module component scan ๋ชฉ์ ์˜ application ํด๋ž˜์Šค ์ž‘์„ฑ

* feat: aws sms provider mock ๊ตฌํ˜„์ฒด ์ž‘์„ฑ

* style: infra ์ƒ์œ„ ํŒจํ‚ค์ง€ pennyway ์ถ”๊ฐ€ -> ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™

* rename: code -> phone-verificatio-code ํด๋ž˜์Šค๋ช… ์ˆ˜์ •

* fix: ์‚ฌ์šฉ์ž์—๊ฒŒ code type ์ž…๋ ฅ๋ฐ›๋Š” ํ•„๋“œ & converter ์ œ๊ฑฐ

* fix: ์ธ์ฆ๋ฒˆํ˜ธ ๊ฒ€์ฆ dto๋‚ด code ํ•„๋“œ ๋ณต๊ตฌ

* feat: phone verification mapper ํด๋ž˜์Šค ์ •์˜

* feat: ์ฝ”๋“œ ๋ถˆ์ผ์น˜ ์‹œ error ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •

* rename: saveCode -> sendCode

* feat: ์ธ์ฆ๋ฒˆํ˜ธ ๊ฒ€์ฆ ์‘๋‹ต dto ์ž‘์„ฑ

* rename: of -> value of

* feat: auth use case ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์ถ”๊ฐ€

* fix: global exception handler๋‚ด global error exception status ์‚ฝ์ž… ๋ฉ”์„œ๋“œ ์ˆ˜์ •

* rename: send_time, expire_time -> send_at, expires_at ํ•„๋“œ๋ช… ์ˆ˜์ •

* fix: ์„ฑ๊ณต ์‘๋‹ต ์ƒํƒœ์ฝ”๋“œ 2000000 -> 2000 ์ˆ˜์ •

* fix: hash table -> value && ttl ์ ์šฉ

* feat: user find by phone ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: ์ธ์ฆ๋ฒˆํ˜ธ ๊ฒ€์ฆ ์‹œ oauth user ์—ฌ๋ถ€ ํ™•์ธ ํ•„๋“œ ์ถ”๊ฐ€

* fix: user notify ํ•„๋“œ feed-comment-notify -> chat-notify ์ˆ˜์ •

* feat: user ๊ณ„์ • ์—ฐ๋™ helper class ์ •์˜

* feat: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์„ฑ๊ณต ์‹œ ttl rollback ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: transaction ๋‚ด exception ๋ฐœ์ƒ ์‹œ rollback -> sync helper์˜ transaction ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* fix: user auth use case ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€

* test: auth controller validation test ๊ฒฝ๋กœ ์ˆ˜์ •

* rename: phone verification mapper ๋ฉ”์„œ๋“œ ์ฃผ์„ ์ถ”๊ฐ€

* test: user sync helper ํด๋ž˜์Šค test ์ž‘์„ฑ

* fix: ์ด๋ฏธ ํšŒ์›๊ฐ€์ž…ํ•œ ์œ ์ €์ธ ๊ฒฝ์šฐ, ์ธ์ฆ ์ฝ”๋“œ cache ์ œ๊ฑฐ

* fix: verify-code-res ๊ธฐ์กด ์‚ฌ์šฉ์ž ์กด์žฌํ•  ์‹œ ๋ฐ˜ํ™˜ ํ•„๋“œ ์ถ”๊ฐ€

* fix: user-sync-helper์—์„œ oauth ๊ณ„์ • ์žˆ์œผ๋ฉด username ๋ฐ˜ํ™˜

* fix: auth user case ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ด๋ ฅ ์—†๊ณ , oauth ๊ณ„์ • ์žˆ์œผ๋ฉด username ๋ฐ˜ํ™˜

* rename: phone verification repository remove() -> delete()

* rename: phone-verification-code -> phone-verification-type

* fix: web config ์ œ๊ฑฐ

* CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• (#19)

* feat: ci workflow ์ž‘์„ฑ

* feat: cd workflow ์ž‘์„ฑ

* fix: mysql actions step ์‚ญ์ œ

* fix: docker image ํƒœ๊ทธ ์ œ๊ฑฐ

* fix: cd ํŒŒ์ดํ”„๋ผ์ธ trigger ๋ธŒ๋žœ์น˜๋ช… ์ˆ˜์ •(develop->dev)

* CD Workflow ์ˆ˜์ • (#21)

* feat: ci workflow ์ž‘์„ฑ

* feat: cd workflow ์ž‘์„ฑ

* fix: mysql actions step ์‚ญ์ œ

* fix: docker image ํƒœ๊ทธ ์ œ๊ฑฐ

* fix: cd ํŒŒ์ดํ”„๋ผ์ธ trigger ๋ธŒ๋žœ์น˜๋ช… ์ˆ˜์ •(develop->dev)

* fix: gradle build ๊ณผ์ • ์ถ”๊ฐ€

* fix: gradle build ๊ณผ์ • ์ถ”๊ฐ€

* fix: cd ํŒŒ์ดํ”„๋ผ์ธ ์ž„์‹œ ์ˆ˜์ •

* fix: cd ํŒŒ์ดํ”„๋ผ์ธ ์ž„์‹œ ์ˆ˜์ • ์‚ฌํ•ญ ์‚ญ์ œ

* fix: gradlew ๊ถŒํ•œ ์ˆ˜์ •

* fix: ํ…Œ์ŠคํŠธ ์‹คํŒจ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

* โœจ Spring Security ์ดˆ๊ธฐ ์„ค์ • (+ Test case ์—๋Ÿฌ ๊ด€๋ จ) (#22)

* chore: external-api ๋ชจ๋“ˆ spring boot starter security ์˜์กด์„ฑ ์ฃผ์ž…

* chore: security config ์„ค์ •

* chore: method security config ์„ค์ •

* fix: ๊ธฐ์กด api ์ธ๊ฐ€ ๊ถŒํ•œ is-anonymous๋กœ ์ œํ•œ

* fix: security config ์ธ์ฆ, ์ธ๊ฐ€ ์˜ˆ์™ธ ํ•„ํ„ฐ ์ œ๊ฑฐ (๋กœ๊ทธ์ธ ์ž‘์—… ์‹œ ์ถ”๊ฐ€)

* fix: user sync helper oauth ๋ฐ˜ํ™˜ ์ˆ˜์ •

* test: user sync helper ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… ์ˆ˜์ •

* test: username ๋ฐ˜ํ™˜ ๊ฒ€์ฆ ์ถ”๊ฐ€

* fix: pennyway infra application @spring boot application ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* test: ์„ฑ๊ณต ์‘๋‹ต ๊ฐ์ฒด code ๊ฐ’ 2000์œผ๋กœ ์ˆ˜์ •

* chore: spring security test ์˜์กด์„ฑ ์ฃผ์ž…

* test: auth controller ์„ฑ๊ณต ์‘๋‹ต set cookie ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋‹จ์œผ๋กœ ์ˆ˜์ •

* chore: sub project test ๋ธ”๋Ÿญ ์ถ”๊ฐ€

* feat: security user details & service ์ •์˜

* chore: local ํ™˜๊ฒฝ ๋‚ด logging level ์ •๋ณด ์ถ”๊ฐ€

* fix: user sync helper transaction ์ œ๊ฑฐ

* โœจ ๋กœ๊ทธ์ธ API (#23)

* feat: ์ผ๋ฐ˜ ๋กœ๊ทธ์ธ ์š”์ฒญ dto ์ž‘์„ฑ

* feat: user repository find-by-username ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: user service read-user-by-username ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

* feat: ์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ ์˜ˆ์™ธ ์ถ”๊ฐ€

* feat: user sync helper read-user-if-valid ๋ฉ”์„œ๋“œ

* feat: auth user case๋‚ด sign in ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: sign in api ์ถ”๊ฐ€

* test: sign in test case ์ถ”๊ฐ€

* fix: sign in dto ์ •๊ทœํ‘œํ˜„์‹ ๊ฒ€์‚ฌ ์ œ๊ฑฐ

* โœ๏ธ ํšŒ์›๊ฐ€์ž… API ๊ฐœ์„  (+ Domain Service Runtime ์˜ˆ์™ธ ๋ฐœ์ƒ ์ œ๊ฑฐ) (#24)

* feat: sign up dto -> phone verification dto from ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: helper ํด๋ž˜์Šค ์ฑ…์ž„๊ณผ ์—ญํ•  ๋ถ„๋ฆฌ

* rename: user sync helper ๋ฉ”์„œ๋“œ๋ช… ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜์ •

* fix: sign up dto password ์•”ํ˜ธํ™” ํ›„ entity ์ƒ์„ฑ

* fix: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค helper ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* fix: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž…, oauth ๊ณ„์ • ์—ฐ๋™ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋งž๊ฒŒ dto ๋ถ„๋ฆฌ ํ›„ info ํด๋ž˜์Šค๋กœ ํ†ตํ•ฉ

* fix: oauth ์—ฐ๋™ dto -> phone, code ํ•„๋“œ ์ถ”๊ฐ€

* fix: sign up api ํšŒ์›๊ฐ€์ž… ์š”์ฒญ ์ธ์ž ์ˆ˜์ •

* fix: ์„œ๋ช… ํ—ฌํผ ํด๋ž˜์Šค ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜์ •

* feat: user domain ๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: dto์—์„œ ์œ ์ € ์ƒ์„ฑ ์‹œ, password update at ๊ฐฑ์‹ 

* feat: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ

* rename: helper, mapper ํด๋ž˜์Šค ์žฌ์ง€์ •

* fix: ์ „ํ™”๋ฒˆํ˜ธ ์š”์ฒญ ์ฝ”๋“œ ์ •์  ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ๋ณ€๊ฒฝ

* rename: user general sign mapper ๋ฉ”์„œ๋“œ create -> save(์ƒ์„ฑ ํ˜น์€ ์ˆ˜์ • ๊ธฐ๋Šฅ)

* fix: sync with oauth dto์˜ to info ๋ฉ”์„œ๋“œ ์ธ์ž ์ œ๊ฑฐ

* feat: ๊ธฐ์กด ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ api ์ถ”๊ฐ€ && ์ธ์ฆ ์‘๋‹ต ์ƒ์„ฑ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* feat: ํšŒ์›๊ฐ€์ž… ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐœ์„ 

* test: user sync mapper test ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜

* test: auth controller validation test ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜

* test: user general sign mapper test ๋ถ„๋ฆฌ

* fix: domain service layer ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ œ๊ฑฐ

* refactor: user sync mapper ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •

* refactor: user details service imple ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •

* refactor: user general sign mapper ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •

* refactor: user sync mapper์—์„œ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ ๋ฐœ์ƒ ์ œ๊ฑฐ

* fix: user sync mapper ์„ ์–ธ์  transaction ์ถ”๊ฐ€

* refactor: auth use case ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง ์ œ๊ฑฐ

* test: test optional ๋ฐ˜ํ™˜ ์ ์šฉ

* rename: user sync mapper ์ฃผ์„ ์ˆ˜์ •

* โœจ Jwt ์ธ์ฆ ํ•„ํ„ฐ (#25)

* feat: 403 ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ์ž‘์„ฑ

* feat: 401 ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ์ž‘์„ฑ

* feat: security config์— ์ธ์ฆ, ์ธ๊ฐ€ ํ•„ํ„ฐ bean ๋“ฑ๋ก

* fix: ์ธ์ฆ, ์ธ๊ฐ€ ํ•„ํ„ฐ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์กฐ์ • error -> warn

* feat: jwt ์˜ˆ์™ธ ํ•„ํ„ฐ ์ž‘์„ฑ

* feat: forbedden token entity ์ •์˜

* feat: forbedden token repository ์ž‘์„ฑ

* feat: forbidden token service ์ž‘์„ฑ

* feat: jwt ์ธ์ฆ ํ•„ํ„ฐ ์ถ”๊ฐ€

* fix: user details service ๊ตฌํ˜„์ œ ์ฃผ์ž… -> ์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์ž…

* chore: security filter config ์„ค์ •

* chore: jwt security config ์„ค์ •

* chore: security config ์ปค์Šคํ…€ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์„ค์ •

* feat: security user to string() ์žฌ์ •์˜

* chore: security config ์„ค์ •

* fix: access denied exception import ๊ฒฝ๋กœ ์ˆ˜์ •

* fix: token ํŒŒ์‹ฑ ์—๋Ÿฌ ํ•ด๊ฒฐ

* style: ์˜ˆ์™ธ ๋กœ๊ทธ ์œ„์น˜ ์ˆ˜์ •

* feat: global exception handler no-resource-found-exception ํ•ธ๋“ค๋ง

* fix: security config ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ฃผ์ž… ์ œ๊ฑฐ

* feat: refresh api ๊ฐœ๋ฐฉ

* fix: refresh token annotaion ๋นˆ ์ด๋ฆ„ ์ˆ˜์ •

* feat: refresh token ํƒˆ์ทจ ์˜ˆ์™ธ ์ถ”๊ฐ€

* fix: refresh token ํƒˆ์ทจ ์‹œ๋‚˜๋ฆฌ์˜ค ํ•ธ๋“ค๋ง

* fix: taken way token reason code 403์˜ ์ด์œ  ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ

* fix: jwt ์ธ์ฆ ํ•„ํ„ฐ ๋‚ด ๋ฉ”์„œ๋“œ ๋ช…์‹œ์  final ๋งค๊ฐœ๋ณ€์ˆ˜ ์ œ๊ฑฐ

* ๐Ÿ“‘ Readme v0.0.2 (#26)

* docs: erd ์ถ”๊ฐ€

* docs: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ์ˆ˜์ •

* docs: version ๊ด€๋ฆฌ ์„ค๋ช… ์ถ”๊ฐ€

* โœ๏ธ Swagger + Security ์ˆ˜์ • (#30)

* rename: ๋กœ๊ทธ์ธ ์š”์ฒญ dto @schema ์ถ”๊ฐ€

* chore: server domain ํ™˜๊ฒฝ ์„ค์ • external-api -> infra

* chore: server domain property bean ๋“ฑ๋ก

* chore: application-infra server ๋ธ”๋Ÿญ ์ˆ˜์ •

* fix: swagger server url ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฒฝ๋กœ ์ˆ˜์ •

* chore: cors ์„ค์ • ์ถ”๊ฐ€

* refactor: cors ์„ค์ • ํŒŒ์ผ ๋ถ„๋ฆฌ

* rename: jwt security config -> security adpater config

* chore: bcryptpasswordencoder -> passwordencoder

* fix: ๋™์ผํ•œ ํด๋ž˜์Šค๋ช…์˜ DTO @Schema name ์†์„ฑ ์„ค์ •

* refactor: ์šด์˜ ํ™˜๊ฒฝ ๋ณ„ security filter chain ์„ค์ • ๋ถ„๋ฆฌ

* chore: external api ๋ชจ๋“ˆ ๋‚ด jackson nullable module ์ข…์†์„ฑ ์ถ”๊ฐ€

* refactor: security auth config ๋ถ„๋ฆฌ

* refactor: security config swagger endpoint ํ”„๋กœํ•„ ๋ณ„ ์„ค์ • ๋ถ„๋ฆฌ

* feat: simple granted authority ์—ญ์ง๋ ฌํ™” ์ด์Šˆ๋กœ custom granted authority ํด๋ž˜์Šค ์„ ์–ธ

* chore: external-api ๋‚ด jackson config ์„ค์ •

* fix: security user details ์—ญ์ง๋ ฌํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ

* fix: security config ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์˜ต์…˜ ์ˆ˜์ •

* fix: custom granted authority equals ์ˆ˜์ •

* chore: docker hub ๊ฒฝ๋กœ ์ˆ˜์ •

* โœจ ๋‹‰๋„ค์ž„ ์ค‘๋ณต๊ฒ€์‚ฌ API (#31)

* rename: auth controller '์ผ๋ฐ˜ ํšŒ์› ๊ฐ€์ž…' ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ swagger ๋ฌธ์„œ ์ƒ ๋ช…์‹œ

* feat: ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ domain service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: username ์ค‘๋ณต ๊ฒ€์‚ฌ api ๊ฐœ๋ฐฉ

* fix: ์ค‘๋ณต ๊ฒ€์‚ฌ ์ฒดํฌ url์„ anonymous endpoints์— ์ถ”๊ฐ€

* fix: swagger endpoints์™€ read only public endpoints ๋ถ„๋ฆฌ

* fix: ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ ์ธ๊ฐ€ ๊ธฐ์ค€ permit-all๋กœ ๋ณ€๊ฒฝ

* rename: is-exist-nickname -> is-exist-username

* rename: auth check controller ๋งค๊ฐœ๋ณ€์ˆ˜๋ช… username์œผ๋กœ ์ˆ˜์ •

* โœจ OIDC ๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šคํ™” (+ component scan์— ๋Œ€ํ•œ ๊ณ ์ฐฐ) (#32)

* chore: infra ๋ชจ๋“ˆ ๋‚ด feign ์˜์กด์„ฑ ์ฃผ์ž…

* feat: oidc dto ์ •์˜

* feat: oidc public key response ๊ฐ์ฒด ์ •์˜

* feat: oauth oidc client ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

* feat: oidc token parsing provider ์ •์˜

* feat: oidc provider ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

* rename: oidc ์นด๋ฉœ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* chore: provider ๋ณ„ jwks-uri ๋ฐ secret ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฃผ์ž…

* feat: apple, google, kakao oidc ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž…

* feat: oidc configuration properties config ์„ธํŒ…

* feat: default feign config ์„ค์ •

* feat: common module ๋‚ด map utils ์ž‘์„ฑ

* rename: oidc cache manager ๋นˆ ์ด๋ฆ„ ์˜คํƒ€ ์ˆ˜์ •

* fix: oidc properties ํ•„๋“œ final ๋ณ€๊ฒฝ

* fix: infra properties ์„ค์ • api ๋ชจ๋“ˆ๋กœ ์ด์ „

* feat: provider ๋ณ„ feign interface ์ •์˜

* chore: infra application ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •

* chore: cache config @configuration ์–ด๋…ธํ…Œ์ด์…˜ ์žฌ์‚ฝ์ž…

* chore: infra config -> api ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  infra ๋ชจ๋“ˆ์˜ properties ๋ช…์‹œ

* feat: infra config maker ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์—ด๊ฑฐ ํƒ€์ž… ์ƒ์„ฑ

* feat: infra ๋ชจ๋“ˆ confg import selector ์ •์˜

* feat: infra๋ฅผ ์˜์กดํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ๋™์ ์œผ๋กœ ์ธํ”„๋ผ ๊ตฌ์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* feat: oidc ๋„์šฐ๋ฏธ ํด๋ž˜์Šค ์ž‘์„ฑ

* fix: cache config ํด๋ž˜์Šค ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์ œ๊ฑฐ

* fix: client-secret -> secret ํ•„๋“œ ๋ณ€๊ฒฝ

* chore: feign config ์„ค์ •

* fix: cache config @configuration ์–ด๋…ธํ…Œ์ด์…˜ ๋ณต๊ตฌ

* โœจ OAuth OIDC ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ API (#33)

* feat: provider enum ํด๋ž˜์Šค ์ •์˜

* feat: provider converter ์ •์˜

* feat: oauth domain ์ •์˜

* feat: provider exception ์ •์˜

* feat: provider request converter ์ •์˜

* feat: web config์— provider converter ๋“ฑ๋ก

* chore: infra ๋ชจ๋“ˆ httpclient ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: oauth ๋กœ๊ทธ์ธ&ํšŒ์›๊ฐ€์ž… dto ์ •์˜

* rename: getter ๋ฉ”์„œ๋“œ๋ช… ์ค‘ oidc ์†Œ๋ฌธ์žํ™”

* fix: oauth ๋กœ๊ทธ์ธ ์‹œ oauth id ํ•„๋“œ ์ถ”๊ฐ€

* fix: oauth oidc helper ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* rename: provider exception -> oauth exception

* feat: oauth id ๋ถˆ์ผ์น˜ ์˜ˆ์™ธ ์ถ”๊ฐ€

* feat: oauth repository ์ •์˜

* feat: oauth repository ์†Œ์…œ ์•„์ด๋”” & ์ œ๊ณต์ž ํƒ์ƒ‰ ๋ฉ”์„œ๋“œ ์„ ์–ธ

* feat: oauth domain service ์ •์˜

* rename: provider converter ์˜ˆ์™ธ ์ด๋ฆ„ ์ˆ˜์ •

* rename: oauth service get -> read

* style: oauth exception api ๋ชจ๋“ˆ -> domain ๋ชจ๋“ˆ ์ด์ „

* rename: oauth error code ์ฃผ์„ ํฌ๋งท ๋ณ€๊ฒฝ

* feat: oauth ๋งคํผํด๋ž˜์Šค - ๋กœ๊ทธ์ธ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ

* feat: oauth ๋กœ๊ทธ์ธ use case ๊ตฌํ˜„

* feat: oauth ๋กœ๊ทธ์ธ ์ปจํŠธ๋กค๋Ÿฌ ์ •์˜

* fix: cache config ๋‚ด ๋ถˆํ•„์š”ํ•œ ์„ค์ • ์ถ”๊ฐ€ ์ œ๊ฑฐ

* chore: infra ๋ชจ๋“ˆ redis ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž…

* rename: oauth controller ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์„ค๋ช… ์ถ”๊ฐ€

* feat: oauth API ์„ค๊ณ„

* fix: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ oauth provider ๊ตฌ๋ถ„

* fix: ์ „ํ™” ๋ฒˆํ˜ธ ์ธ์ฆ ์—ด๊ฑฐ ํƒ€์ž… oauth provider ์ถ”๋ก  ๋ฉ”์„œ๋“œ static์œผ๋กœ ๋ณ€๊ฒฝ

* fix: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์ฝ”๋“œ ์‘๋‹ต ๊ฐ์ฒด general, oauth ์ •์  ํŒฉํ† ๋ฆฌ ๋ถ„๋ฆฌ

* fix: oauth ๋ถ„๊ธฐ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ฅธ dto ๊ตฌ๋ถ„

* fix: oauth api ์„ค๊ณ„ ์ˆ˜์ •

* fix: aouth use case์˜ verify code ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž… verify code res๋กœ ์ˆ˜์ •

* rename: ์ธ์ฆ ์ฝ”๋“œ ๊ฒ€์ฆ dto ์ƒ์„ฑ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ

* feat: oauth provider signup๋œ ์ •๋ณด ์กด์žฌ ์‹œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: ์‚ฌ์šฉ์ž ์•„์ด๋”” & provider ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ ๋„๋ฉ”์ธ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth ํšŒ์›๊ฐ€์ž… ์š”์ฒญ์„ phone ๊ฒ€์ฆ dto๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์‹œ phone, code ํ•„์ˆ˜ ์ž…๋ ฅ ํ•„๋“œ ์ถ”๊ฐ€

* feat: user sync mapper ํด๋ž˜์Šค ๋‚ด oauth ํšŒ์›๊ฐ€์ž… ๋ถ„๊ธฐ ๊ฒฐ์ • ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth use case ๋ฉ”์„œ๋“œ ์ž‘์„ฑ

* feat: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ๋ถ„๊ธฐ ๋“ฑ๋ก ๋กœ์ง ๊ตฌํ˜„

* feat: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… Use case ์ž‘์„ฑ

* rename: oauth controller ์ฃผ์„ ์ œ๊ฑฐ

* rename: oauth api 1, 3๋ฒˆ ์ƒ์„ธํ•œ ์„ค๋ช…์„ ์œ„ํ•œ swagger ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* style: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ์™€ ๋ฌธ์„œ ์ฃผ์„ ๋ถ„๋ฆฌ

* docs: ์ธ์ฆ ์ฝ”๋“œ ๊ฒ€์ฆ ์˜ˆ์™ธ ๋ฌธ์„œ ์ˆ˜์ •

* fix: ํœด๋Œ€ํฐ ๋งŒ๋ฃŒ ํ˜น์€ ๋ฏธ๋“ฑ๋ก ์˜ˆ์™ธ reason code 401->404 ๋ณ€๊ฒฝ

* docs: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์‘๋‹ต ํฌ๋งท ์ˆ˜์ •

* โœจ External-api ๋ชจ๋“ˆ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• (#34)

* chore: test profile yml ์ž‘์„ฑ

* chore: external-api test ํŒจํ‚ค์ง€ logback-test.xml ์ถ”๊ฐ€

* chore: testcontainer + redis, mysql ์˜์กด์„ฑ ์ฃผ์ž…

* chore: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ db ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ์ •์˜

* chore: api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ”„๋กœํ•„ resolver ์ •์˜

* chore: common ํŒจํ‚ค์ง€ application ํด๋ž˜์Šค ์ •์˜

* chore: api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ base package classes ์ •์˜

* chore: api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜

* rename: api test application.yml -> application-test.yml

* test: auth api ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ profile locat -> test

* test: api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ…Œ์ŠคํŠธ

* test: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜์— profile=test ์ถ”๊ฐ€

* chore: test application ํŒŒ์ผ ์ œ๊ฑฐ

* chore: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์ •์˜

* test: api ํ…Œ์ŠคํŠธ ํ”„๋กœํ•„ test -> local

* chore: test ci gradlew test --peraller ์˜ต์…˜ ์ถ”๊ฐ€

* chore: external api db config @container ์ œ๊ฑฐ

* chore: application ํŒŒ์ผ ๋‚ด test ํ”„๋กœํ•„ ์ถ”๊ฐ€

* test: api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ”„๋กœํ•„ local -> test

* test: ํšŒ์›๊ฐ€์ž… ์œ ์ € ์‹œ๋‚˜๋ฆฌ์˜ค ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (๋™์ž‘ ํ™•์ธ์šฉ)

* ๐Ÿ› OIDC signature ๊ฒ€์ฆ์—†์ด header, payload ์ถ”์ถœ ๋กœ์ง ์ˆ˜์ • (#35)

* rename: oauth oidc provider imple ์—๋Ÿฌ ๋ฉ”์„œ๋“œ ๋ช…์‹œ

* fix: token header, payload ์ถ”์ถœ ๋ฉ”์„œ๋“œ jjwt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด ์ œ๊ฑฐ

* rename: get oidc token body ๋ฉ”์„œ๋“œ ๋‚ด aud ๋กœ๊ทธ ์ œ๊ฑฐ

* fix: oidc provider log ์ œ๊ฑฐ ๋ฐ get unsignedtoken() token ๋งˆ์ง€๋ง‰์— . ์ œ๊ฑฐ

* โœจ ์ธ์ฆ์ฝ”๋“œ SMS ์ „์†ก (#37)

* chore: infra ๋ชจ๋“ˆ ๋‚ด aws sdk, sns ์˜์กด์„ฑ ์ฃผ์ž…

* chore: aws sns ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

* chore: aws sns config ์„ค์ •

* feat: sms dto์—์„œ sms ์ „์†ก์„ ์œ„ํ•œ ์ „ํ™”๋ฒˆํ˜ธ ํŒŒ์‹ฑ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* rename: pheon ํŒŒ์‹ฑ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* fix: sms request record ์ œ๊ฑฐ

* fix: sms dto response ๊ฐ์ฒด ์ œ๊ฑฐ ๋ฐ ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ ์ •๋ณด ์ œ๊ฑฐ

* feat: phone ์ธ์ฆ event ๋“ฑ๋ก

* fix: sms dto to ๋ ˆ์ฝ”๋“œ๋ช… ๋ณ€๊ฒฝ ๋ฐ code ํ•„๋“œ ์ถ”๊ฐ€

* rename: phone verification event -> push code event

* feat: push code ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก

* rename: event๋ช… ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ˆ˜์ •

* fix: ์ธ์ฆ ์ฝ”๋“œ ์ƒ์„ฑ ๋กœ์ง sms provider -> mapper๋กœ ๋ณ€๊ฒฝ

* chore: infra ํ™˜๊ฒฝ ์„ค์ • ๊ธฐ๋ณธ๊ฐ’ null ์ œ๊ฑฐ -> ๋”๋ฏธ๊ฐ’ ์ฃผ์ž…

* ๐Ÿ“ Swagger ์˜ˆ์™ธ ์‘๋‹ต ๋ฌธ์„œ ๊ฐœ์„  (#39)

* rename: oauth ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ์‹œ, existUser -> existsUser

* rename: ์ธ์ฆ๋ฒˆํ˜ธ ๊ฒ€์ฆ phone ํ•„๋“œ example์— ํ•˜์ดํ”ˆ ์ถ”๊ฐ€

* feat: json view์— ์ ์šฉํ•  ๊ตฌ๋ถ„์šฉ ํด๋ž˜์Šค ์ƒ์„ฑ

* rename: error response ์‘๋‹ต ์ฝ”๋“œ ์„ค๋ช… ์ˆ˜์ •

* fix: ๊ณตํ†ต ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ฃผ์„ & ์ˆœ์„œ ์ˆ˜์ • ๋ฐ 400 ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* fix: auth api ๋ฌธ์„œ ์ฃผ์„ ๋ถ„๋ฆฌ ๋ฐ ์ƒ์„ธ ๋‚ด์šฉ ์ถ”๊ฐ€

* rename: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ธ์ฆ๋ฒˆํ˜ธ ๊ฒ€์ฆ์—์„œ ์„ฑ๊ณต ์‘๋‹ต ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ด๋™์ง€์  ๋ช…์‹œ

* ๐Ÿ› Google id token issuer mismatch ์ด์Šˆ ํ•ด๊ฒฐ (#40)

* fix: ๊ณต๊ฐœํ‚ค ์„œ๋ช… ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ์—์„œ token ๋กœ๊ทธ ์ถœ๋ ฅ ์ œ๊ฑฐ

* fix: oauth oidc client properties ์ธํ„ฐํŽ˜์ด์Šค get issuer ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* chore: infra ๋ชจ๋“ˆ provider issuer ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: apple, kakao ํ™˜๊ฒฝ get issuer ๋ฉ”์„œ๋“œ ์ˆ˜์ •

* chore: kakao, apple issuer ์ œ๊ฑฐ

* fix: iss ์ธ์ž์— get_jwks() -> get_issuer() ๋ฉ”์„œ๋“œ๋กœ ์‚ฝ์ž…

* โœ๏ธ User name ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ์ค€ ๋ณ€๊ฒฝ (#44)

* feat: get_unsigned_token_claims 500 error -> 401 error ๋ณ€ํ™˜

* fix: oauth_usecase ๋‚ด payload ๋กœ๊ทธ ๋ ˆ๋ฒจ info -> debug

* fix: name ํ•„๋“œ ์ •๊ทœ ํ‘œํ˜„์‹ ๋ณ€๊ฒฝ (ํ•œ๊ธ€ 6์ž, ์˜์–ด 10์ž)

* fix: name ํ•„๋“œ ์ •๊ทœ ํ‘œํ˜„์‹ ๋ณ€๊ฒฝ (ํ•œ๊ธ€ & ์˜์–ด ์†Œ๋ฌธ์ž 8์ž)

* fix: name ํ•„๋“œ ํ•œ๊ธ€, ์˜๋ฌธ ์†Œ๋ฌธ์ž 2~8์ž๋กœ ์ œํ•œ

* test: ์ธ์ฆ ์‹œ name ์˜ˆ์™ธ ๋ฌธ๊ตฌ ์ˆ˜์ •

* โœจ User, Oauth Entity Soft Delete ๋ฐ˜์˜ (#43)

* feat: user domain soft delete์™€ where ์ถ”๊ฐ€

* feat: oauth domain soft delete์™€ where ์ถ”๊ฐ€

* chore: domain module ๋‚ด mysql testcontainer ์˜์กด์„ฑ ์ถ”๊ฐ€

* test: domain ๋ชจ๋“ˆ mysql container ํ™˜๊ฒฝ ์„ค์ •

* chore: logback ์„ค์ • ์ˆ˜์ •

* feat: user domain tostring ์žฌ์ •์˜

* feat: user domain service delete ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* test: soft delete ํ™•์ธ ํ…Œ์ŠคํŠธ

* fix: oauth domain sql delete ์ฟผ๋ฆฌ ์ˆ˜์ •

* test: user soft delete test case ์ถ”๊ฐ€

* โœ๏ธ OAuth ๊ณ„์ • ์—ฐ๋™ ์‹คํŒจ ํ•ด๊ฒฐ ๋ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€ (#45)

* rename: user sync mapper ๋ถˆํ•„์š”ํ•œ ์ฃผ์„ ์ œ๊ฑฐ

* feat: oauth service create ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth sign mapper ๋‚ด์—์„œ entity ์ƒ์„ฑ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

* rename: auth api ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ด๋ ฅ ์กด์žฌ ์‹œ ์˜ˆ์™ธ ๋ฌธ์„œ ์ถ”๊ฐ€

* rename: oauth api ์†Œ์…œ ๋กœ๊ทธ์ธ ์ด๋ ฅ ์กด์žฌ ์‹œ ์˜ˆ์™ธ ๋ฌธ์„œ ์ถ”๊ฐ€

* test: [2] ์†Œ์…œ ๋กœ๊ทธ์ธ ์ด๋ ฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, 200 ok๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  oauth ํ•„๋“œ๊ฐ€ true๊ณ  username ํ•„๋“œ๊ฐ€ ์กด์žฌ

* rename: ์†Œ์…œ์ธ์ฆ ํšŒ์›๊ฐ€์ž…, ๊ณ„์ • ์—ฐ๋™ ์‹œ ์„ฑ๊ณต ์‘๋‹ต ๋ฐ˜ํ™˜ ๋ฌธ์„œ ์ถ”๊ฐ€

* test: [3-1] ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ํ…Œ์ŠคํŠธ

* test: [3-2] ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ ํšŒ์›๊ฐ€์ž… ํ…Œ์ŠคํŠธ

* test: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ „ํ™” ๊ฒ€์ฆ api ์˜ˆ์™ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* test: url๋ณ„๋กœ inner ํด๋ž˜์Šค๋กœ ํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ

* test: auth test order ์ง€์ •

* chore: test ํ™˜๊ฒฝ์—์„œ sql log ์ถœ๋ ฅ ์˜ต์…˜ true๋กœ ๋ณ€๊ฒฝ

* test: oauth controller ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋‚ด๋ถ€ ํด๋ž˜์Šค ๊ตฌ๋ถ„

* chore: wiremock ์˜์กด์„ฑ ์ถ”๊ฐ€

* test: feign mock test ์ ์šฉ (์‹ค์ œ๋กœ ์‚ฌ์šฉ์€ ์•ˆ ํ•จ)

* test: [1] ์†Œ์…œ ๋กœ๊ทธ์ธ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

* fix: oauth link ์‹œ, ๊ธฐ์กด ๊ณ„์ • ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* test: [4-1] ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ๊ณ„์ • ์—ฐ๋™

* feat: oauth entity tostring ์žฌ์ •์˜

* fix: oauth ํšŒ์›๊ฐ€์ž… ์‹œ, ๊ธฐ์กด ๊ณ„์ •์ด ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* test: [4-2] ์†Œ์…œ ํšŒ์›๊ฐ€์ž…

* test: ์ €์žฅ๋œ oauth ์ •๋ณด ์กฐํšŒ ์ถ”๊ฐ€

* โœ๏ธ ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก api ํ†ตํ•ฉ (#46)

* feat: ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ํƒ€์ž… ์ •์˜

* feat: sms ์ธ์ฆ์ฝ”๋“œ ์ „์†ก api ๋ถ„๋ฆฌ

* feat: security config anonymous url์— /v1/phone ์ถ”๊ฐ€

* docs: sms api swagger ์ž‘์„ฑ

* fix: send code param value ์ง€์ •

* feat: phone verification error code 400 ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ์ถ”๊ฐ€

* feat: send code ์‹œ, type == oauth์ด๋ฉด provider null์ผ ๋•Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: verification type converter ์ถ”๊ฐ€

* docs: ์ธ์ฆ์ฝ”๋“œ swagger ์ƒ type์˜ value ์ˆ˜์ •

* feat: verification type converter web config ๋“ฑ๋ก

* docs: ์˜ˆ์‹œ ์ „ํ™”๋ฒˆํ˜ธ ์ˆ˜์ •

* docs: ์ธ์ฆ, ์†Œ์…œ ์ธ์ฆ api deprecated ์ฒ˜๋ฆฌ

* ๐Ÿ“ ๋ชจ๋“ˆ ๋ณ„ README.md ์ถ”๊ฐ€ (#47)

* chore: readme.md .gitignore ์ œ๊ฑฐ

* docs: external api readme ์ถ”๊ฐ€

* docs: external api ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •

* docs: infra ๋ชจ๋“ˆ readme ์ถ”๊ฐ€

* docs: domain ๋ชจ๋“ˆ readme ์ถ”๊ฐ€

* docs: common ๋ชจ๋“ˆ readme ์ถ”๊ฐ€

* โœจ ๋กœ๊ทธ์•„์›ƒ API (#49)

* feat: sign out use case ๊ตฌํ˜„

* feat: sign out api ๊ฐœ๋ฐฉ

* docs: user auth api swagger ๋ฌธ์„œ์— sign out ์ถ”๊ฐ€

* feat: sign out pre authorize ์ถ”๊ฐ€

* fix: authorization header ํŒŒ์‹ฑ ์ถ”๊ฐ€

* test: ์œ ํšจํ•œ access token, ์œ ํšจํ•œ refresh token ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ

* test: 3๊ฐ€์ง€ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”๊ฐ€ ์ž‘์„ฑ(์œ ํšจํ•œ access token, ์œ ํšจํ•˜์ง€ ์•Š์€ refresh token ์‹œ๋‚˜๋ฆฌ์˜ค ์‹คํŒจ)

* fix: authorization header ํŒŒ์‹ฑ controller์—์„œ ์ˆ˜ํ–‰

* refactor: ๋กœ๊ทธ์•„์›ƒ ์„ธ๋ถ€๋กœ์ง jwt auth helper๋กœ ์ด๋™

* test: ์œ ํšจํ•œ access token์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์œ ํšจํ•œ refresh token์„ ์ „์†กํ•  ์‹œ ์‹คํŒจ

* feat: ์†Œ์œ ๊ถŒ ์—†๋Š” ํ† ํฐ ์˜ˆ์™ธ ์ถ”๊ฐ€

* fix: ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์œ ํšจํ•œ refresh token ์‚ญ์ œ ์š”์ฒญ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* rename: jwt auth helper์˜ remove_access_token_and_refresh_token ๋ฉ”์„œ๋“œ ์ฃผ์„ ์ˆ˜์ •

* test: refresh token ttl ๋ณ€ํ™˜ ๋กœ์ง ์ˆ˜์ •

* docs: sign out swagger ์˜ˆ์™ธ ์‘๋‹ต ์ถ”๊ฐ€

* docs: sign out API ์ƒ์„ธ ์„ค๋ช… ์ถ”๊ฐ€

* refactor: jwt auth helper ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* test: with_mock_user ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* fix: cookie ์ œ๊ฑฐ ์‘๋‹ต ํ—ค๋” ์ถ”๊ฐ€

* fix: ์ธ์ฆ ํ•„ํ„ฐ ๋‚ด refresh token ์ฒดํฌ ์ œ๊ฑฐ

* fix: cookie util delete cookie ๋ฉ”์„œ๋“œ ์ˆ˜์ • & ์‘๋‹ต ํ—ค๋”์— ์ฟ ํ‚ค ์ œ๊ฑฐ์šฉ ํ—ค๋” ์ถ”๊ฐ€

* test: refresh token ํƒˆ์ทจ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ refresh ์ด์ „ token ์ „์†ก ์‹œ๋‚˜๋ฆฌ์˜ค ์ถ”๊ฐ€

* test: scenario 2-3 pre-condition ์ˆ˜์ •

* fix: sign out api์—์„œ sevlet request, response param ์ œ๊ฑฐ

* โœจ Device Token ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ API (#51)

* feat: device token entity ์ •์˜

* feat: user entity ๋‚ด device entity ์—ญ๋ฐฉํ–ฅ ๊ด€๊ณ„ ์ง€์ •

* feat: device entity ์—ฐ๊ด€๊ด€๊ณ„ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: device repository ์ •์˜

* fix: device repoistory ์ƒ์† ๋Œ€์ƒ์„ cure -> list crud๋กœ ๋ณ€๊ฒฝ

* feat: read_all_by_user_id() ๋ฉ”์„œ๋“œ repository ๋‚ด ์„ ์–ธ

* feat: device domain service ์ถ”๊ฐ€

* feat: user account controller ์„ค๊ณ„ ๋ฐ ์ฝ”๋“œ ์ž‘์„ฑ

* rename: controller -> api ๋„ค์ด๋ฐ ์ˆ˜์ •

* feat: device dto ์ •์˜

* fix: user account api์— device dto import

* fix: user account controller ๋‚ด use case import

* fix: device entity ์ƒ์„ฑ์ž์— user ์ถ”๊ฐ€, ์—ฐ๊ด€๊ด€๊ณ„ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, ํ† ํฐ ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: device dto to_entity ํŒŒ๋ผ๋ฏธํ„ฐ์— user ์ถ”๊ฐ€

* fix: device service save ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜๊ฐ’ void -> device

* feat: device ๋“ฑ๋ก use case ์ถ”๊ฐ€

* refactor: device ๋“ฑ๋ก usecase ๋‚ด, flag ๋ณ€์ˆ˜ ์ œ๊ฑฐ ํ›„ optional๋กœ ๋ถ„๊ธฐ ์ œ์–ด

* feat: device domain service์—์„œ user_id์™€ token์œผ๋กœ device ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: use case ๋‚ด ์ž„์‹œ unregister_device ๋ฉ”์„œ๋“œ ์ •์˜

* test: ์‹ ๊ทœ ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก ํ…Œ์ŠคํŠธ

* test: ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋„์ถœ๋œ device์—์„œ ๋งคํ•‘ ๊ฒฐ๊ณผ ํ™•์ธ

* refactor: register_device() ๋ฆฌํ„ด๊ฐ’ long -> dto ๊ฐ์ฒด

* feat: device custom exception ํด๋ž˜์Šค ์ถ”๊ฐ€

* fix: ๊ธฐ์กด ๋””๋ฐ”์ด์Šค ํ† ํฐ ๊ฐฑ์‹  ์‹œ, ๊ธฐ๊ธฐ ์ •๋ณด ๋ถˆ์ผ์น˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* rename: ์˜ˆ์™ธ ์ƒํ™ฉ ๋กœ๊ทธ ์ˆ˜์ •

* test: ๊ธฐ์กด์— ๋“ฑ๋ก๋œ ๋””๋ฐ”์ด์Šค ํ† ํฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋””๋ฐ”์ด์Šค ํ† ํฐ์„ ๊ฐฑ์‹ ํ•œ๋‹ค

* test: ์„œ๋ฒ„์—์„œ ํ† ํฐ์„ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌํ•˜์—ฌ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ€๊ฒฝ ์š”์ฒญ์„ ๋ณด๋‚ธ ๊ฒฝ์šฐ newToken์œผ๋กœ ์‹ ๊ทœ ๋””๋ฐ”์ด์Šค๋ฅผ ๋“ฑ๋กํ•œ๋‹ค

* test: ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํšจํ•œ ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ชจ๋ธ๋ช…์ด๋‚˜ OS๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ DEVICE_NOT_MATCH ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

* feat: device entity ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ํ•„๋“œ ์ถ”๊ฐ€ && ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: device ์ƒ์„ฑ์ž -> ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜์ •

* fix: device ์ƒ์„ฑ์ž private๋กœ ์ ‘๊ทผ ์ œํ•œ

* feat: device not found error code ์ถ”๊ฐ€

* test: ํ™œ์„ฑํ™” ํ•„๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ํ…Œ์ŠคํŠธ ๋ณ€๊ฒฝ

* feat: device entity ํ™œ์„ฑํ™” ์—ฌ๋ถ€ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: device entity ํ™œ์„ฑํ™” ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: ํ™œ์„ฑํ™” ํ•„๋“œ ์กด์žฌ ์ดํ›„ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ usecase ์ˆ˜์ •

* test: ํ† ํฐ ๋น„ํ™œ์„ฑํ™” ์ฟผ๋ฆฌ๋ฌธ ์ˆ˜์ •

* refactor: use case ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ์œ„ํ•ด ํ•˜์œ„ service layer ์ถ”๊ฐ€

* style: ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* test: device_register_service ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋นˆ ๋“ฑ๋ก

* rename: device request dto is_same_token() -> is_init_request()

* refactor: ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ ๋กœ์ง ๊ตฌํ˜„

* test: ์‚ฌ์šฉ์ž ID์™€ origin token์— ๋งค์นญ๋˜๋Š” ํ™œ์„ฑ ๋””๋ฐ”์ด์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋””๋ฐ”์ด์Šค๋ฅผ ์‚ญ์ œํ•œ๋‹ค

* fix: device token id ๋Œ€์‹  device token ์ž์ฒด๋ฅผ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ •

* fix: ๋””๋ฐ”์ด์Šค ์ •๋ณด ์ œ๊ฑฐ ์‹œ, ๋งค์นญ๋˜๋Š” ๋””๋ฐ”์ด์Šค๊ฐ€ ์—†์„ ๋•Œ ์˜ˆ์™ธ ์ข…๋ฅ˜ ์ˆ˜์ •

* test: ๋””๋ฐ”์ด์Šค ์‚ญ์ œ ์‹คํŒจ ํ…Œ์ŠคํŠธ

* docs: device token api ์Šค์›จ๊ฑฐ ์‘๋‹ต ๋ฌธ์„œ ์ž‘์„ฑ

* docs: ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก ์š”์ฒญ dto์˜ ํ•จ์ˆ˜๊ฐ€ ํ•„๋“œ์— ํฌํ•จ๋˜๋Š” ํ˜„์ƒ ์ œ๊ฑฐ

* test: ์œ ํšจํ•œ ํ† ํฐ & ๋””๋ฐ”์ด์Šค ์ •๋ณด๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ

* feat: device entity ๋‚ด model, os ์ •๋ณด ์ˆ˜์ • ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: ์‚ฌ์šฉ์ž ๊ธฐ๊ธฐ ๋ณ€๊ฒฝ ์‹œ, ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ •

* docs: ๋””๋ฐ”์ด์Šค ์žฅ์น˜ ์ •๋ณด ๋ฏธ์Šค ์˜ˆ์™ธ ์ œ๊ฑฐ

* fix: ๋””๋ฐ”์ด์Šค ํ† ํฐ ํ™œ์„ฑ ์—ฌ๋ถ€ ์กฐ๊ฑด๋ฌธ ๋ณ€๊ฒฝ

* fix: not_match_device ์—๋Ÿฌ ์ฝ”๋“œ ์ œ๊ฑฐ

* feat: test์šฉ user ์ƒ์ˆ˜ ํด๋ž˜์Šค

* feat: @authentication_principal ํƒ€์ž… ๋ณ€ํ™˜์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ์šฉ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* test: user ๋””๋ฐ”์ด์Šค ์ €์žฅ ์š”์ฒญ ์‹œ, ์„ฑ๊ณต ์‘๋‹ต ํฌ๋งท ํ…Œ์ŠคํŠธ

* test: originToken์— ๋Œ€ํ•œ ๋””๋ฐ”์ด์Šค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ๋””๋ฐ”์ด์Šค ์ •๋ณด ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ธฐ์กด ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

* fix: device ์ €์žฅ ์‹œ, ๋งค์นญ ๋””๋ฐ”์ด์Šค ๋ถ€์žฌ ์—ฌ๋ถ€ ํŒ๋‹จ ๋กœ์ง ์ถ”๊ฐ€

* rename: ํ…Œ์ŠคํŠธ [1-1] display name ์ˆ˜์ •

* test: device fixture์œผ๋กœ ๋ณ€๊ฒฝ

* style: device register service ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* fix: oauth entity ๋‚ด provider converter ์ •์˜ (#52)

* โœจ ๋ฌธ์˜ํ•˜๊ธฐ API (#36)

* feat: question ์—”ํ‹ฐํ‹ฐ, repository ์ž‘์„ฑ

* feat: mail ๋ฐœ์†ก ๋กœ์ง ์ž„์‹œ ์ž‘์„ฑ

* fix: http ๋ฉ”์„œ๋“œ ์ˆ˜์ •

* feat: question ์˜ˆ์™ธ ์ž‘์„ฑ

* feat: question service ์ž‘์„ฑ

* feat: ๋ฌธ์˜ ๋ฐœ์†ก api ์ž‘์„ฑ

* fix: ๋ฌธ์˜ ๋ฐœ์†ก ๋‚ด์šฉ ์ˆ˜์ •

* feat: ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

* docs: swagger ๋ฌธ์„œ ์ž‘์„ฑ ๋ฐ ๋ถ„๋ฆฌ

* fix: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ๋ช…์‹œ

* docs: swagger parameter ์ œ๊ฑฐ ๋ฐ schema ๋‚ด์šฉ ์ˆ˜์ •

* fix: ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ uri ์ˆ˜์ •

* fix: controller ๋ฉ”์†Œ๋“œ ์ธ๊ฐ€ ๊ถŒํ•œ ์ˆ˜์ •

* fix: dto ํ•„๋“œ๋ณ„ schema ์ž‘์„ฑ

* fix: dto email ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€

* fix: category(enum) ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ฒ˜๋ฆฌ

* fix: restful ์›์น™์— ๋”ฐ๋ฅธ request uri ์ˆ˜์ •

* fix: dto inner class ์ œ๊ฑฐ

* fix: transactional ์–ด๋…ธํ…Œ์ด์…˜ ๋ณ€๊ฒฝ

* fix: email_error ์˜คํƒˆ์ž ์ˆ˜์ •

* fix: ๊ณตํ†ต ํ—ˆ์šฉ endpoint ์„ ์–ธ

* fix: createddate ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ entitylistners ์ถ”๊ฐ€

* fix: domainservice ์—ฐ๊ฒฐ

* fix: swagger schema ์˜คํƒˆ์ž ์ˆ˜์ • ๋ฐ enum ์„ค๋ช… ์ œ๊ฑฐ

* fix: transactional ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

* fix: @schema ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* fix: questioncategory enum converter ์ ์šฉ

* fix: sendquestion ์‘๋‹ต nocontent๋กœ ๋ณ€๊ฒฝ

* refactor: starter-mail ์˜์กด์„ฑ ์ด๋™

* refactor: starter-mail ์˜์กด์„ฑ ๊ตฌ์„ฑ ์†์„ฑ ๋ณ€์ˆ˜ ์ด๋™

* refactor: ๋ฉ”์ผ๋ฐœ์†ก ๋กœ์ง infra ๋ชจ๋“ˆ ์ด์ „

* fix: ์ž„์‹œ ๋กœ๊ทธ ์ œ๊ฑฐ

* refactor: ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ mailconfig ์ˆ˜์ •

* refactor: transactionaleventlistener๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”์ผ๋ฐœ์†ก ์ด๋ฒคํŠธ์ฒ˜๋ฆฌ

* test: ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* fix: mockbean ๋ˆ„๋ฝ ์˜ค๋ฅ˜ ์ˆ˜์ •

* fix: ํ…Œ์ŠคํŒ…๊ฐ„ ๋กœ์ง ์ž„์‹œ ์ฃผ์„์ฒ˜๋ฆฌ ๋ณต๊ตฌ

* fix: ๋ถˆํ•„์š”ํ•œ getter ์ œ๊ฑฐ

* fix: mainํ•ธ๋“ค๋ง log ์ˆ˜์ค€ ๋ณ€๊ฒฝ

* feat: admin_address ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์ถ”๊ฐ€

* fix: ๋ฉ”์ผ ๋ฐœ์†ก ์ด๋ฒคํŠธ ์‹คํŒจ์‹œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ๋ณ€๊ฒฝ

* feat: swagger ์„ฑ๊ณต ์‘๋‹ต ๋ช…์‹œ

* ๐Ÿ”ง ์ธ์ฆ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ† ๋ง (#53)

* rename: user_general_sign_mapper -> service

* refactor: is_sign_up_allowed() ๋ฉ”์„œ๋“œ general sign service๋กœ ์ด๋™

* rename: user_oauth_sign_mapper -> service

* refactor: is_sign_up_allowed() ๋ฉ”์„œ๋“œ oauth sign service๋กœ ์ด๋™

* fix: user sign mapper ์ œ๊ฑฐ

* refactor: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์„œ๋น„์Šค ์กฐ๊ฑด๋ฌธ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌ

* fix: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์‹œ log ์ถ”๊ฐ€

* refactor: user ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ dto๋กœ ์ด๋™

* fix: oauth ํšŒ์›๊ฐ€์ž… ์‹œ log ์ถ”๊ฐ€

* fix: log ์ •๋ณด ์ˆ˜์ •

* refactor: oauth ๋งคํ•‘ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* rename: ๋„๋ฉ”์ธ phone verification -> phone code

* rename: phone_verification_mapper -> service

* refactor: sms controller์—์„œ service๊ฐ€ ์•„๋‹Œ usecase๋ฅผ ์˜์กดํ•˜๋„๋ก ์ˆ˜์ •

* style: ํšŒ์›๊ฐ€์ž… ์‹œ ์ธ์ฆ ์ฝ”๋“œ ํ™•์ธ -> ์ธ์ฆ ์ฝ”๋“œ ์ œ๊ฑฐ -> ์ž์› ์ ‘๊ทผ ์ˆœ์œผ๋กœ ๋ณ€๊ฒฝ

* style: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์‹œ ์ธ์ฆ ์ฝ”๋“œ ํ™•์ธ -> ์ธ์ฆ ์ฝ”๋“œ ์ œ๊ฑฐ -> ์ž์› ์ ‘๊ทผ ์ˆœ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์‹œ ์กฐ๊ฑด๋ฌธ ๋ฉ”์„œ๋“œ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ

* feat: ์‚ฌ์šฉ์ž sync ๋ชฉ์  dto ํด๋ž˜์Šค ์ •์˜

* rename: user sync dto ์ฃผ์„ ์ถ”๊ฐ€

* feat: user sync dto ํŽธ์˜์šฉ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ ์ƒ์„ฑ

* refactor: oauth_sign_service ๋‚ด pair -> dto๋กœ ๋ณ€ํ™˜

* refactor: general_sign_service ๋‚ด pair -> dto๋กœ ๋ณ€ํ™˜

* rename: user sync dto์˜ is sign up allowed ํ•„๋“œ ์ฃผ์„ ์ถ”๊ฐ€

* refactor: auth_use_case pair -> dto

* refactor: oauth_use_case pair -> dto

* refactor: oauth signup ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฆฌํŒฉํ† ๋ง

* test: test์—์„œ pair -> user_sync_dto ์‘๋‹ต์œผ๋กœ ๋ณ€๊ฒฝ

* rename: user_oauth_sign_service is_sign_up_allowed() ๋กœ๊ทธ ์ถ”๊ฐ€

* fix: pk๋กœ user select ํ•˜๋„๋ก ํ•˜์—ฌ query ํšŸ์ˆ˜ ์ ˆ์•ฝ

* โœจ ์‚ฌ์šฉ์ž ๋ณธ์ธ ํ”„๋กœํ•„ ์กฐํšŒ API (#55)

* feat: get_my_account api ์ž‘์„ฑ

* feat: user_profile_dto ์ •์˜

* feat: get_my_account() use case ์ถ”๊ฐ€

* rename: account_api requirement_security ์ฃผ์„ ์ œ๊ฑฐ

* fix: local time serializaer format ์ถ”๊ฐ€

* fix: profile_visibility @jsonvalue ๋ฉ”์„œ๋“œ ์ˆ˜์ •

* fix: ์†Œ์…œ ๊ณ„์ •์ธ ๊ฒฝ์šฐ password_updated_at ํ•„๋“œ ์ง๋ ฌํ™” ์ œ์™ธ

* docs: ์‚ฌ์šฉ์ž ๊ณ„์ • ์กฐํšŒ ์„ฑ๊ณต ์‘๋‹ต swagger ๋ฌธ์„œํ™”

* docs: localdatetime ์‘๋‹ต ํฌ๋งท ์ˆ˜์ •

* feat: ์‚ฌ์šฉ์ž ์‘๋‹ต fe ํŽธ์˜์šฉ ํ•„๋“œ is_oauth_account ์ถ”๊ฐ€

* โœจ ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ API (#56)

* feat: user token ๊ฒ€์ฆ api ์„ค๊ณ„

* style: user_auth_controller & usecase & test ๋ชจ๋‘ auth ํŒจํ‚ค์ง€๋กœ ์ด์ „

* test: user_auth_usecase test ์ƒ์„ฑ

* test: pre-condition ์„ค์ •

* test: ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ api 4๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ

* fix: get_auth_state์—์„œ authorization ํ—ค๋” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* test: controller์—์„œ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์— ๋งž๊ฒŒ given ์ˆ˜์ •

* fix: auth_header๊ฐ€ ๋น„์—ˆ๊ฑฐ๋‚˜ bearer๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ์‹œ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ -> ๋น„๋กœ๊ทธ์ธ ์œ ์ € ์‘๋‹ต

* feat: is_sign_in ๊ตฌํ˜„

* rename: is_signed_in() -> is_sign_in()

* refactor: auth_header ์ถ”์ถœ ๋กœ์ง controller -> usecase๋กœ ์ด์ „

* test: token ์ ‘๋‘์‚ฌ bearer ์ถ”๊ฐ€

* test: access token์„ ๋ณด๋‚ธ ์˜๋„๊ฐ€ ํ™•์‹คํ•  ๋•Œ๋Š” ๊ฒ€์ฆ ์‹คํŒจ ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

* fix: is_token_expired() -> get_jwt_claims() ์˜ˆ์™ธ ํ•ธ๋“ค๋ง ๋กœ์ง ์ˆ˜์ •

* fix: /v1/auth url ์ธ๊ฐ€ ๊ถŒํ•œ permit_all๋กœ ์ˆ˜์ •

* docs: get_auth_state() swagger ์ฃผ์„ ์ถ”๊ฐ€

* feat: sigin state record ์ •์˜

* fix: state dto ๋ถ„๋ฆฌ

* test: is_sign_in ๋ฐ˜ํ™˜ ํƒ€์ž… dto๋กœ ์ˆ˜์ •

* feat: jwt_claims value๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ํŽธ์˜์šฉ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: is_sign_in() ๋ฐ˜ํ™˜ ํƒ€์ž… dto๋กœ ๋ณ€๊ฒฝ

* test: given() ์ธ์ž ๋‚ด์— any()๋กœ ์ˆ˜์ •

* rename: get_claim_value() ์ฃผ์„ ์ถ”๊ฐ€

* docs: ์„ฑ๊ณต ์‘๋‹ต schema๋กœ ์ˆ˜์ •

* fix: ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ์ธ๊ฐ€ ๊ถŒํ•œ is_authenticated()๋กœ ์ˆ˜์ •

* fix: auth_state_dto is_sign_in ํ•„๋“œ ์ œ๊ฑฐ

* fix: controller authorization ํ—ค๋” ํ•„์ˆ˜๊ฐ’์œผ๋กœ ์ˆ˜์ •

* fix: usecase ๋‚ด is_sign_in false ์ฒ˜๋ฆฌ ๋กœ์ง ์ œ๊ฑฐ

* test: jwt_auth_helper mock -> ์‹ค์ œ ๊ฐ์ฒด ์ƒ์„ฑ

* docs: auth state dto id ํ•„๋“œ ์„ค๋ช… ์ˆ˜์ •

* test: security filter์—์„œ ๊ฑธ๋Ÿฌ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ œ๊ฑฐ

* fix: is_sign_in log ๋ ˆ๋ฒจ debug -> info

* style: web_sucurity ์ธ์ฆ/์ธ๊ฐ€ ๊ฒฝ๋กœ ์ƒ์ˆ˜ ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* fix: /v1/auth ์ธ๊ฐ€ ๊ถŒํ•œ authenticated๋กœ ๋ณ€๊ฒฝ

* test: jwt_auth_helper ์‹ค์ œ ์ธ์Šคํ„ด์Šค ์ฃผ์ž…

* fix: get_claims_value ๋กœ์ง ์ˆ˜์ •

* ๏ฟฝ์ผ๋ฐ˜ ํšŒ์› ์•„์ด๋”” ์ฐพ๊ธฐ API ๊ตฌํ˜„ (#48)

* refactor: auth-check-controller request-mapping๊ฐ’ ๋ณ€๊ฒฝ

* refactor: auth-check controller์™€ api ๋ถ„๋ฆฌ

* feat: ์•„์ด๋”” ์ฐพ๊ธฐ api ์ƒ์„ฑ

* feat: ์•„์ด๋”” ์ฐพ๊ธฐ api ์ „์ฒด ํ—ˆ์šฉ

* feat: ์•„์ด๋”” ์ฐพ๊ธฐ api ๊ตฌํ˜„

* fix: sysout ์ œ๊ฑฐ

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api ์ ‘๊ทผ ๊ถŒํ•œ ๋ณ€๊ฒฝ

* feat: ์•„์ด๋”” ์ฐพ๊ธฐ api ์‘๋‹ต ๊ฐ์ฒด ์ˆ˜์ • ๋ฐ dto ์ •์˜

* fix: auth-find-mapper ํด๋ž˜์Šค ์ •์˜ ๋ฐ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฒˆํ˜ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์•„์ด๋”” error-code ์ •์˜

* feat: ๊ณ„์ • ์ฐพ๊ธฐ ๊ด€๋ จ ์ปค์Šคํ…€ ์—๋Ÿฌ ์ •์˜

* fix: ์ผ๋ฐ˜ ํšŒ์›์ด ์•„๋‹Œ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ์กฐํšŒ ์‹œ not-found ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* test: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ผ€์ด์Šค ์ž‘์„ฑ

* test: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ oauth ์‚ฌ์šฉ์ž ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ผ€์ด์Šค ์ž‘์„ฑ

* test: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ์กฐํšŒ ์„ฑ๊ณต ์ผ€์ด์Šค ์ž‘์„ฑ

* test: ์•„์ด๋”” api ์„ฑ๊ณต ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* test: ์•„์ด๋”” api ์š”์ฒญ ์‹คํŒจ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* rename: auth-find-error-code์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํœด๋Œ€ํฐ์— ๋Œ€ํ•œ ์ƒ์ˆ˜ ๋ณ€๊ฒฝ

* rename: ์•„์ด๋”” ์ฐพ๊ธฐ api ํ…Œ์ŠคํŠธ๋ช… ์ˆ˜์ •

* docs: ์•„์ด๋”” ์ฐพ๊ธฐ api swagger ๋ฌธ์„œ ๊ตฌ์ฒดํ™”

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api์˜ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ not-null ์„ค์ •

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ ์ฒ˜๋ฆฌ ์˜ˆ์™ธ๋ฅผ user-error-exception์œผ๋กœ ๋ณ€๊ฒฝ

* rename: auth-find-mapper์—์„œ auth-find-service๋กœ ๋ณ€๊ฒฝ

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ endpoint security ์ˆ˜์ •

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ flow ์ˆ˜์ •

* fix: auth-check-controller์˜ ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์–ด๋…ธํ…Œ์ด์…˜ ์ˆ˜์ •

* fix: oauth entity ๋‚ด provider converter ์ •์˜ (#52)

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api์—์„œ phone param์„ not-blank๋กœ ๋ณ€๊ฒฝ

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹คํŒจ์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ ๋กœ๊ทธ ๋ ˆ๋ฒจ ๋ฐ ์„œ๋น„์Šค ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ

* fix: auth-find-service ์–ด๋…ธํ…Œ์ด์…˜์„ service๋กœ ์ˆ˜์ •

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ ์ธ์ฆ ์ฝ”๋“œ ๊ฒ€์ฆ ๋ฐ ์บ์‹œ ์ œ๊ฑฐ ๋กœ์ง ์ถ”๊ฐ€

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ ์‹œ ์ธ์ฆ ์ฝ”๋“œ ๊ฒ€์ฆ ๋ฐ ์บ์‹œ ์ œ๊ฑฐ ๋กœ์ง ์ถ”๊ฐ€

* docs: ์•„์ด๋”” ์ฐพ๊ธฐ ๋กœ์ง ์ฃผ์„ ๋ฐ api response ์ถ”๊ฐ€

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api query์— code ์ถ”๊ฐ€

* feat: phone-verification-dto์˜ verify-code-req์— of ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* refactor: ์•„์ด๋”” ์ฐพ๊ธฐ ๋กœ์ง์˜ ์ฝ”๋“œ ๊ฒ€์ฆ ๋ฐ ์‚ญ์ œ ๋กœ์ง์„ usecase๋กœ ์ด๋™

* test: ์•„์ด๋”” ์ฐพ๊ธฐ api์˜ query์— code ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ณ€๊ฒฝ

* test: ์•„์ด๋”” ์ฐพ๊ธฐ api์˜ query์— code ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ result-actions ๊ฐ์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* refactor: ์ธ์ฆ์ฝ”๋“œ ๊ด€๋ จ ํŒจํ‚ค์ง€ ๋ฐ ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ˆ˜์ •

* fix: required-args-constructor import๋ฌธ ์ถ”๊ฐ€

---------

Co-authored-by: JaeSeo Yang <[email protected]>

* โœ๏ธ ์ธ์ฆ๋ฒˆํ˜ธ ์ „์†ก API ํ†ตํ•ฉ์— ๋”ฐ๋ฅธ Deprecated API ์‚ญ์ œ (#57)

* docs: ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ api swagger ๋ฌธ์„œ ์ˆ˜์ •

* fix: auth_controller send code api ์ œ๊ฑฐ

* fix: oauth_controller send code api ์ œ๊ฑฐ

* โœจ OIDC ์ •์ฑ…์—์„œ id token์— nonce ํ•„๋“œ ์ถ”๊ฐ€ (#58)

* docs: ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ api swagger ๋ฌธ์„œ ์ˆ˜์ •

* fix: auth_controller send code api ์ œ๊ฑฐ

* fix: oauth_controller send code api ์ œ๊ฑฐ

* fix: oauth_oidc_provider nonce ๊ฒ€์ฆ ๊ตฌ๋ฌธ ์ถ”๊ฐ€

* fix: oauth ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์š”์ฒญ ์‹œ nonce ํ•„๋“œ ์ถ”๊ฐ€

* fix: service ๋กœ์ง ๋‚ด nonce ์ธ์ž ์ „๋‹ฌ

* fix: sign_up_req oauth_info dto์— nonce ํ•„๋“œ ์ถ”๊ฐ€

* test: oauth controller ํ…Œ์ŠคํŠธ nonce ์ˆ˜์ •

* fix: oauth_use_case ์˜์†ํ™” ์‹คํŒจ -> @transactional ์ถ”๊ฐ€

* fix: send_code api ํ†ตํ•ฉ pr์—์„œ ์ œ๊ฑฐํ•˜์ง€ ์•Š์€ use case ๋‚ด send code ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* โœจ ์‚ฌ์šฉ์ž ์•„์ด๋””/์ด๋ฆ„ ์ˆ˜์ • API (#59)

* test: ์‚ฌ์šฉ์ž ๊ณ„์ • api ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ

* test: ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ˆ˜์ • controller unit pre-condition ์ž‘์„ฑ

* test: ์ด๋ฆ„ ์ˆ˜์ • ์š”์ฒญ controller unit test case ์ž‘์„ฑ

* fix: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ๊ณ„์ •์ด ์•„๋‹Œ ์˜ˆ์™ธ ์ƒ์ˆ˜ ์ถ”๊ฐ€ : 4004

* feat: ์ด๋ฆ„ ๋ณ€๊ฒฝ ์š”์ฒญ dto ์ •์˜

* feat: put_name() controller ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: update_name() usecase ์ถ”๊ฐ€ ๋ฐ void ํƒ€์ž…์— ๋งž๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ given ์ˆ˜์ •

* test: 422 ์˜ˆ์ƒ ์—๋Ÿฌ ์ฝ”๋“œ ์ˆ˜์ •

* test: ์‚ฌ์šฉ์ž ๊ณ„์ • usecase ๊ธฐ์กด test ๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ

* test: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์œ ์ € pre-condition ์ œ๊ฑฐ

* test: ์ด๋ฆ„ ์ˆ˜์ • usecase test case ์ž‘์„ฑ

* feat: ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ˆ˜์ • ๋กœ์ง ๊ตฌํ˜„

* feat: user ๋„๋ฉ”์ธ ์ด๋ฆ„ ์ˆ˜์ • ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* test: user_account_use_case_test ์ˆœ์„œ ์ง€์ •

* fix: ๋””๋ฐ”์ด์Šค ๋น„ํ™œ์„ฑํ™” em.create_query() -> ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ (๊ธฐ์กด ๋ฐฉ์‹ ์—๋Ÿฌ ๋ฐœ์ƒ)

* test: ์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ์ˆ˜์ • controller unit test ์ž‘์„ฑ

* feat: ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ณ€๊ฒฝ ์š”์ฒญ dto ์ž‘์„ฑ

* feat: ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ณ€๊ฒฝ ์š”์ฒญ api ์ž‘์„ฑ

* feat: ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ณ€๊ฒฝ ์š”์ฒญ usecase ์ž‘์„ฑ

* feat: ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋ณ€๊ฒฝ service ๋กœ์ง ๊ตฌํ˜„

* test: nickname -> username

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ entitymanager ์ฃผ์ž… ์ œ๊ฑฐ

* refactor: user account use case ์‚ฌ์šฉ์ž ์กฐํšŒ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* fix: ์ด๋ฆ„ ๋ฐ ์•„์ด๋”” ์ˆ˜์ • ์š”์ฒญ ๋ฉ”์„œ๋“œ put -> patch

* test: put ์š”์ฒญ patch๋กœ ๋ณ€๊ฒฝ

* โœจ ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ์„ค์ • API (#60)

* feat: notify setting update ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: notification ํ™œ์„ฑํ™” api ์ถ”๊ฐ€

* feat: notification ๋น„ํ™œ์„ฑํ™” api ์ถ”๊ฐ€

* feat: notification ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” usecase ์ถ”๊ฐ€

* refactor: user account use case ์‚ฌ์šฉ์ž ์กฐํšŒ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* rename: notify -> flag

* feat: ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ์„ค์ • service ๋กœ์ง ๊ตฌํ˜„

* feat: ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ์„ค์ • ์‘๋‹ต dto ์ •์˜

* feat: use case ์‘๋‹ต์— dto ๋ฐ˜์˜

* feat: notify type converter ์ •์˜

* feat: web_config์— notify_type_converter ๋“ฑ๋ก

* fix: invalid_notify_type 400 -> 422 ๋ณ€๊ฒฝ

* docs: notify api ์‘๋‹ต swagger ๋ฌธ์„œ ์ž‘์„ฑ

* test: user_account_use_case_test ๋นˆ ๋“ฑ๋ก

* fix: ์•Œ๋ฆผ ์„ค์ • api ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ put -> patch

* ๐Ÿ› ์•„์ด๋”” ์ฐพ๊ธฐ API ์š”์ฒญ ์‹œ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋ฐ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ INTERNAL_SERVER_ERROR ํ•ด๊ฒฐ (#61)

* test: ์•„์ด๋”” ์ฐพ๊ธฐ api ์š”์ฒญ ์‹œ ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ ๋ฐ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ์ผ€์ด์Šค ์ถ”๊ฐ€

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api์˜ query-string ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ์ธ์ž ์ˆ˜์ •

* fix: ์•„์ด๋”” ์ฐพ๊ธฐ api ์ธ์ž๊ฐ’ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ usecase ๋ฐ service ๋ฉ”์„œ๋“œ ์ธ์ž ์ˆ˜์ •

* fix: of ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* โœจ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ/๋ณ€๊ฒฝ API (#62)

* test: ํ˜„์žฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ api ๊ตฌํ˜„

* feat: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์—†๋Š” ์œ ์ € ์˜ˆ์™ธ ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ์š”์ฒญ dto ์ •์˜

* fix: ๋ฏธํšŒ์›๊ฐ€์ž… ๊ณ„์ • ์˜ค๋ฅ˜ 400 -> 403

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ controller ์ •์˜

* test: use case ์ž„์‹œ ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ™•์ธ

* test: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ use case ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* feat: ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” helper ํด๋ž˜์Šค ์ •์˜

* feat: use case์— ํŒจ์Šค์›Œ๋“œ helper class ์˜์กด์„ฑ ์ฃผ์ž…

* test: ํŒจ์Šค์›Œ๋“œ ํ—ฌํผ ํด๋ž˜์Šค ์˜์กด์„ฑ ์ฃผ์ž…

* feat: mock -> mockbean ์ˆ˜์ •

* fix: password_encoder final ํ•œ์ •์ž ์ถ”๊ฐ€

* test: ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • controller unit test ์ž‘์„ฑ

* feat: reason coe 400๋ฒˆ๋Œ€ 5๋ฒˆ ๋น„ํŠธ client_error ์ถ”๊ฐ€

* feat: ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ ์—๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ dto ์ •์˜

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • controller ๊ตฌํ˜„

* feat: ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ usecase ์ž‘์„ฑ && controller unit test ํ†ต๊ณผ ํ™•์ธ

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • usecase ๋ฐ service ๊ตฌํ˜„

* feat: password encoder helper ํด๋ž˜์Šค์˜ ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ

* test: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ usecase unit test ์ž‘์„ฑ

* feat: use case ์˜ˆ์™ธ ๋กœ๊ทธ ์ถ”๊ฐ€

* test: ๋™์ผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์š”์ฒญ ์‹œ given ์ ˆ ์ถ”๊ฐ€

* test: given ์‚ฌ์šฉ์ž ์ƒ์„ฑ @before_each ํ†ตํ•ฉ

* fix: ๊ธฐ์กด๊ณผ ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ์กฐ๊ฑด์‹ ์ˆ˜์ •

* test: ์ •์ƒ ์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ given(is_same_password) ์กฐ๊ฑด ๋ถ„๋ฆฌ

* โœจ External Api Controller ๋กœ๊น…์„ ์œ„ํ•œ AOP ๊ตฌํ˜„ (#64)

* feat: external-api-log-aspect ๊ตฌํ˜„

* fix: authorization && set-cookie && cookie ํ—ค๋”๋Š” debug ๋ชจ๋“œ๋กœ ๋กœ๊น…

* fix: request argument๊ฐ€ null์ธ ๊ฒฝ์šฐ ์ œ์™ธ

* feat: request header log ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* fix: cookie, authorization ๋ฌธ์ž์—ด ์˜์กด ์ œ๊ฑฐ

* fix: request header log ์–ด๋…ธํ…Œ์ด์…˜ ์ธ์ฆ ํ—ค๋” ์ œ๊ฑฐ

* fix: controller์˜ request header log default value ์ œ๊ฑฐ

* ๐Ÿ› RTR ์˜ค๋™์ž‘ ๊ฒ€์ฆ (์•„๋ฌด ๋ฌธ์ œ ์—†์—ˆ๋‹ค..) (#66)

* feat: redis ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํŽธ์˜์šฉ ์–ด๋…ธํ…Œ์ด์…˜ ์ž‘์„ฑ

* test: refresh token service ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* test: refresh token service ํ…Œ์ŠคํŠธ์— ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ

* fix: jwt_auth_helper claims ์ถ”์ถœ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ && ๋กœ๊ทธ ๊ฐฑ์‹ 

* test: jwt_auth_helper refresh ํ…Œ์ŠคํŠธ

* test: refresh token service ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํƒˆ์ทจ ์‹œ๋‚˜๋ฆฌ์˜ค ํ†ต๊ณผ ํ™•์ธ

* test: jwt_auth_helper ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํƒˆ์ทจ ์‹œ๋‚˜๋ฆฌ์˜ค ํ†ต๊ณผ ํ™•์ธ

* refactor: refresh token ์ƒ์„ฑ์ด ํ†ต๊ณผ๋˜๋ฉด access token ์ƒ์„ฑํ•˜๋„๋ก ์ˆ˜์ •

* test: ํƒˆ์ทจ ์‹œ๋‚˜๋ฆฌ์˜ค ํ…Œ์ŠคํŠธ given ์ˆ˜์ •

* docs: refresh api ์Šค์›จ๊ฑฐ ์—๋Ÿฌ ์‘๋‹ต ๊ฐœ์„ 

* โœจ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ API (#67)

* feat: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ api ์ •์˜

* fix: request param ์ถ”๊ฐ€ dto ์ •์˜ -> sign_in_req.oauth dto ํ™œ์šฉ

* docs: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ api ์ƒ์„ธ ์„ค๋ช… ์Šค์›จ๊ฑฐ ์ถ”๊ฐ€

* feat: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ usecase ์ž‘์„ฑ

* feat: user_oauth_sign_server ์กฐ๊ฑด๋ถ€ user ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: user_oauth_sign_server ์กฐ๊ฑด๋ถ€ user ์กฐํšŒ ๋ฉ”์„œ๋“œ -> user_sync_dto ๋ฐ˜ํ™˜ ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜์ •

* fix: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ usecase ๋ถˆํ•„์š” ์˜์กด์„ฑ ์ œ๊ฑฐ

* test: user_auth_user_case ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ์˜์กด์„ฑ ์ฃผ์ž…

* fix: already_signup_oauth error code 400 -> 409

* docs: 409 ์—๋Ÿฌ ์‘๋‹ต swagger ๋ฐ˜์˜

* fix: already_signup error code 400 -> 409

* docs: ์ผ๋ฐ˜ ํšŒ์›๊ฐ€์ž… ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ 409 ์—๋Ÿฌ ์‘๋‹ต swagger ๋ฐ˜์˜

* test: ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ api ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

* docs: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ api ์Šค์›จ๊ฑฐ 409 ์˜ˆ์™ธ ์ถ”๊ฐ€

* test: ๊ธฐ์กด already_sign_up 400 ์—๋Ÿฌ ์˜ˆ์ƒ ์‘๋‹ต 409๋กœ ์ˆ˜์ •

* style: user_oauth_sign_service is_link_allowed() ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ

* fix: like-oauth api post -> put ์š”์ฒญ์œผ๋กœ ์ˆ˜์ •

* fix: oauth entity @sql_restriction ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* feat: user_id์™€ provider๋กœ oauth ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: user_sync_dto ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ oauth ์ •๋ณด๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฐ›๋Š” ๋‚ด๋ถ€ record ์ถ”๊ฐ€

* fix: ์‚ฌ์šฉ์ž ์—ฐ๋™ dto user entity -> ์ง์ ‘ ํ•„๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฃผ์ž…ํ•˜๋„๋ก ์ˆ˜์ •

* fix: ํšŒ์›๊ฐ€์ž… ์ด๋ ฅ ๊ฐ€๋Šฅ user_sync_dto ์ƒ์„ฑ์šฉ ํŽธ์˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth entity soft deleted ์—ฌ๋ถ€ ํ™•์ธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth entity soft delete ์ทจ์†Œ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: oauth sync dto ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋‚ด oauth null ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€

* feat: user_sync_dto ๊ธฐ์กด oauth ์ •๋ณด ์กด์žฌ์—ฌ๋ถ€ ํŒ๋‹จ์šฉ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth_service id๋กœ oauth ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth_error_code not_found ์ถ”๊ฐ€

* fix: soft delete๋œ oauth ์กด์žฌ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ˜์˜ํ•˜์—ฌ oauth sign service ์ˆ˜์ •

* refactor: oauth sign service ํด๋ž˜์Šค save_user ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ์ค‘์ฒฉ if๋ฌธ ์ œ๊ฑฐ

* fix: general_sign_service user_sync_dto ์ธ์ž ์ถ”๊ฐ€

* feat: oauth domain service delete ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: soft delete๋œ oauth ๋“ฑ๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* feat: soft delete๋œ oauth ์žฌํ™œ์„ฑํ™” ์‹œ, oauth_id ํ•„๋“œ given ์ ˆ ์ˆ˜์ •

* fix: oauth entity revert_delete ์ƒํƒœ ์กฐ๊ฑด๋ฌธ ์ˆ˜์ •

* fix: oauth revert ์‹œ, ์‚ฌ์šฉ์ž๊ฐ€ ์ „์†กํ•œ oauth_id๋กœ ์—…๋ฐ์ดํŠธ

* ๐Ÿ› OAuth ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์‹œ Soft Delete ์ •์ฑ… ๋ฐ˜์˜ ๊ฒ€์‚ฌ (#69)

* test: ๊ฐ™์€ provider๋กœ Oauth ๋กœ๊ทธ์ธ ์ด๋ ฅ์ด soft delete ๋˜์—ˆ์œผ๋ฉด ์„ฑ๊ณต ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

* test: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์‹œ soft delete๋œ oauth ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์†Œ์…œ ํšŒ์›๊ฐ€์ž… dto ํ•„๋“œ๋กœ oauth_id ์ถ”๊ฐ€

* fix: oauth_oidc_helper oauth_id ๋ฉ”๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: get_payload() ์‚ฌ์šฉํ•˜๋˜ usecase์—์„œ oauth_id ์ธ์ž ์ „๋‹ฌ

* test: get_payload() ์‚ฌ์šฉํ•˜๋˜ test์—์„œ oauth_id ์ธ์ž ์ „๋‹ฌ

* test: user auth controller ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ soft delete ํ…Œ์ŠคํŠธ ์‹œ expected_oauth_id ์ˆ˜์ •

* โœจ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ OAuth ์—ฐ๋™ ํ•ด์ง€ API (#70)

* feat: ์†Œ์…œ ๋กœ๊ทธ์ธ ์—ฐ๋™ ํ•ด์ œ api ์ •์˜

* feat: user oauth sign service & usecase ๋กœ์ง ๊ตฌํ˜„

* feat: oauth_error_code cannot_unlink_oauth ์—๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: user๊ฐ€ ์—ฐ๋™ํ•œ oauth ๋ชจ๋“  ์ •๋ณด ์กฐํšŒ ๋ชฉ์  domain service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* test: oauth ์—ฐ๋™ ํ•ด์ œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* test: ์ธ๊ฐ€ ๊ถŒํ•œ์„ ์œ„ํ•ด @with_security_mock_user ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ˆ˜์ •

* refactor: service์˜ unlink() -> read_oauth_for_unlink()๋กœ ์ˆ˜์ •

* docs: ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ ํ•ด์ œ 409 ์—๋Ÿฌ ์‘๋‹ต ๋ฌธ์„œ ์ถ”๊ฐ€

* test: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์œ„์น˜ ์ด๊ด€

* โœ๏ธ ๋งˆ์ด ํ”„๋กœํ•„ ์กฐํšŒ ์‹œ, ์†Œ์…œ ๊ณ„์ • ์—ฐ๋™ ์ •๋ณด ์ถ”๊ฐ€ (#72)

* feat: ์œ ์ € ์กฐํšŒ usecase์—์„œ delete๋˜์ง€ ์•Š์€ oauth ๊ณ„์ • ์ •๋ณด ์กฐํšŒ ์ถ”๊ฐ€

* feat: oauth account ์ •๋ณด๋ฅผ ๋‹ด์„ dto ์ •์˜

* feat: dto binding์„ ์œ„ํ•œ user_profile_mapper ์ƒ์„ฑ

* test: user_account_use_case_test oauth_service mock bean ์ฃผ์ž…

* fix: user_profile_dto oauth_account ํ•„๋“œ nullable ์ œ๊ฑฐ

* fix: is_oauth_user ํ•„๋“œ -> is_general_sign_up ํ•„๋“œ๋กœ ์ˆ˜์ •

* โœจ ์‚ฌ์šฉ์ž ๊ณ„์ • ์‚ญ์ œ API  (#73)

* feat: ๊ณ„์ • ์‚ญ์ œ controller ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

* feat: ์‚ฌ์šฉ์ž ๊ณ„์ • ์‚ญ์ œ controller ๊ตฌํ˜„

* feat: ์œ ์ € ์‚ญ์ œ use case -> ์ปดํŒŒ์ผ ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ชฉ์  ์ž„์‹œ ๊ตฌํ˜„

* test: oauth_service mock bean -> autowired

* feat: oauth repository ๋ฒŒํฌ ์—ฐ์‚ฐ ์‚ญ์ œ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: oauth service ์‚ฌ์šฉ์ž ์•„์ด๋””๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„์˜ oauth ์ •๋ณด ์ œ๊ฑฐ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ์‚ฌ์šฉ์ž ์‚ญ์ œ ์„œ๋น„์Šค ์ถ”๊ฐ€

* test: user delete service ๋นˆ ์ถ”๊ฐ€

* feat: user domain ๋ฒŒํฌ ์—ฐ์‚ฐ ์‚ญ์ œ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: user ์˜์†ํ™” ์ œ๊ฑฐ

* fix: delete ์‹œ, ์˜์†ํ™” ๋œ user -> user_id ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ๊ฑฐ

* fix: ์ปจํŠธ๋กค๋Ÿฌ @delete_mapping ์ถ”๊ฐ€

* docs: ๊ณ„์ • ์‚ญ์ œ api ์ฃผ์˜ ์‚ฌํ•ญ ์ถ”๊ฐ€

* โœจ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ API (#71)

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ฒฝ๋กœ ์„ค๊ณ„

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋‚ด๋ถ€๋กœ์ง ์ž‘์„ฑ

* fix: @operation ์˜คํƒˆ์ž ์ˆ˜์ •

* fix: dto ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* docs: service ์ฃผ์„ ์ž‘์„ฑ

* docs: authcheckapi ์ž‘์„ฑ

* fix: ๋ณ€๊ฒฝ๋œ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ๋ฐ˜์˜ ๋ฐ ํ…Œ์ŠคํŠธํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* fix: ๋™์ผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์‹œ ์š”์ฒญ์‹คํŒจ ์ˆ˜์ •

* feat: ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ api ๋ถ„๋ฆฌ

* feat: ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ

* docs: swagger ์˜ˆ์™ธ์‘๋‹ต ์ž‘์„ฑ

* fix: ํ…Œ์ŠคํŠธ์ฝ”๋“œ userfixture ์‚ฌ์šฉ ๋ฐ log.debug์‚ฌ์šฉ

* fix: preauthorize ๋ฐ @validated ๋ˆ„๋ฝ ๋ฐ˜์˜

* feat: ๋ฒˆํ˜ธ ์ธ์ฆ ํ›„ code ์บ์‹œ ttl ์—ฐ์žฅ

* docs: swagger 404 ์—๋Ÿฌ์ฝ”๋“œ ์ˆ˜์ •

* fix: service ๋กœ์ง ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* fix: authfindservicetest์— ๋ณ€๊ฒฝ๋œ ๋ฉ”์„œ๋“œ๋ช… ๋ฐ˜์˜

* โœจ ์ง€์ถœ ๊ด€๋ฆฌ ์˜์—ญ Domain ์ •์˜ (#74)

* feat: ์†Œ๋น„ ์•„์ด์ฝ˜ ํƒ€์ž… ์ •์˜

* feat: ์ง€์ถœ ์•„์ด์ฝ˜ ์ปจ๋ฒ„ํ„ฐ ์ •์˜

* fix: ledger -> spending ํŒจํ‚ค์ง€๋ช… ์ˆ˜์ •

* feat: ์ง€์ถœ entity ์ •์˜

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ entity ์ •์˜

* feat: ์ง€์ถœ entity์™€ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ entity ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

* rename: spending_category -> spending_custom_category ์ˆ˜์ •

* feat: ์ง€์ถœ ๋ฐ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ repository ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

* feat: ์ง€์ถœ domain service ์ƒ์„ฑ

* feat: ์ง€์ถœ ์ปค์Šคํ…€ ์นดํ…Œ๊ณ ๋ฆฌ domain service ์ƒ์„ฑ

* feat: ์ง€์ถœ ๋ชฉํ‘œ ๊ธˆ์•ก entity, repository, domain service ์ •์˜

* rename: spending icon -> spending category

* rename: package ์ด๋ฆ„ amount -> target

* ๐Ÿ› ์‚ฌ์šฉ์ž ์‚ญ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฐœ์„  (#75)

* test: ์‚ฌ์šฉ์ž ์‚ญ์ œ ์‹œ, ๋””๋ฐ”์ด์Šค ์ •๋ณด๋Š” CASCADE๋กœ ์‚ญ์ œ๋˜์–ด์•ผ ํ•œ๋‹ค

* test: ํ…Œ์ŠคํŠธ display name ์„ค๋ช… ์ˆ˜์ •

* โœจ QueryDsl ํ™•์žฅ Repository ๋ฐ Util ์ •์˜ (#76)

* feat: query dsl extended repository ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ

* feat: jpa query๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

* docs: @see ์ถ”๊ฐ€

* feat: query dsl extended repository ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด ์ •์˜

* feat: extended repository๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ factory ์ •์˜

* chore: extended bean repository factory config ๋“ฑ๋ก

* feat: query dsl util ์ถ”๊ฐ€

* refactor: repository ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ query dsl util์—์„œ ์ˆ˜ํ–‰

* feat: slice ์œ ํ‹ธ ์ถ”๊ฐ€

* docs: util ํด๋ž˜์Šค ๋ฒ”์œ„ ์ฃผ์„ ์ถ”๊ฐ€

* rename: extended repository -> query dsl repository

* feat: extended repository ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ

* rename: query dsl repository factory -> extended repository factory

* fix: user repository ์ƒ์† jpa repository -> extended repository

* test: extended repository ์‚ฌ์šฉ๋ฒ• ๊ณต์œ ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

* docs: query_dsl_search_repository sort ์‚ฌ์šฉ๋ฒ• ์ˆ˜์ •

* fix: query dsl util ๋‚ด cast_to_query_dsl ์ค‘๋ณต ์ •์˜ ์ œ๊ฑฐ

* rename: query_dsl_util null handling ๋ฉ”์„œ๋“œ ์„ค๋ช… ์ˆ˜์ •

* rename: query_dsl_search_repository_impl ํด๋ž˜์Šค ๋ ˆ๋ฒจ ์ฃผ์„ ์ œ๊ฑฐ && query_dsl_util ์ฃผ์„ ์ˆ˜์ •

* โœจ ๋‹น์›” ๋ชฉํ‘œ ๊ธˆ์•ก ์„ค์ • API (#77)

* docs: ๋‹น์›” ๋ชฉํ‘œ ๊ธˆ์•ก ๋“ฑ๋ก/์ˆ˜์ • swagger ์ž‘์„ฑ

* test: ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์—๋Ÿฌ ์‘๋‹ต ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* test: param ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* test: param null์ธ ๊ฒฝ์šฐ 400 ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat: handler_method_validation_exception ์ „์—ญ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ถ”๊ฐ€

* feat: target_amount_usecase ํด๋ž˜์Šค ์ƒ์„ฑ

* feat: target amount domain delete ์ฟผ๋ฆฌ ์ˆ˜์ • ๋ฐ delete_at ํ•„๋“œ ์ œ๊ฑฐ, amount ์ˆ˜์ • ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: amount ํƒ€์ž… wrapper -> primitive ํƒ€์ž…์œผ๋กœ ์ˆ˜์ •

* refactor: @request_param -> dto๋กœ ๋ฆฌํŒฉํ† ๋ง

* test: expected 400 -> 422 ์—๋Ÿฌ๋กœ ์ˆ˜์ •

* docs: update_param_req swagger ๋ฌธ์„œ ์ž‘์„ฑ

* feat: target amount ์—๋Ÿฌ ์ฝ”๋“œ ๋ฐ ์˜ˆ์™ธ ์ž‘์„ฑ

* test: ๋‹น์›”์— ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์ธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* feat: ๋‹น์›”์ด ์•„๋‹ ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

* feat: ๋‹น์›” ๋ชฉํ‘œ ๊ธˆ์•ก ์กฐํšŒ domain service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* rename: domain service์™€ repository ๋ฉ”์„œ๋“œ ๋ช… ์ˆ˜์ •

* rename: save -> create

* test: ๋‹น์›” ๋ชฉํ‘œ ๊ธˆ์•ก ๋“ฑ๋ก ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* refactor: target_amount_save_service ๋ถ„๋ฆฌ

* test: displayname 400 -> 422 ์—๋Ÿฌ๋กœ ์ˆ˜์ •

* rename: ํŒจํ‚ค์ง€๋ช… ledge -> ledger

* fix: put mapping value ์ถ”๊ฐ€

* style: if๋ฌธ ์ค‘๊ด„ํ˜ธ ์ถ”๊ฐ€

* โœจ ์›”๋ณ„ ์‚ฌ์šฉ์ž ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ API (#78)

* docs: ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์ž‘์„ฑ

* feat: ์ง€์ถœ(spending) ์ปจํŠธ๋กค๋Ÿฌ ์ž‘์„ฑ

* fix: ํŒจํ‚ค์ง€๋ช… ledge -> ledger

* rename: at_month -> at_year_and_month ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* feat: spending entity get_day() ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ dto ์ •์˜

* feat: ์›”๋ณ„ ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ usecase ๊ตฌํ˜„

* rename: save -> create_spending()

* fix: ์ง€์ถœ๋‚ด์—ญ jpa repository -> extended repository

* feat: spending domain service ๋‚ด read_spendings() ์ถ”๊ฐ€

* chore: querydsl-core ์˜์กด์„ฑ api๋กœ ์ˆ˜์ •

* chore: querydsl-jpa ์˜์กด์„ฑ api๋กœ ์ˆ˜์ •

* fix: spending ์กฐํšŒ ์‹œ query dsl ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

* test: ์ง€์ถœ ๋‚ด์—ญ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ batch fixture ์ •์˜

* test: ์›”๋ณ„ ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* fix: spending_fixture query ์ˆ˜์ •

* fix: spending_fixture query category ๋žœ๋ค ์ˆ˜์ •

* fix: dto validation ์ถ”๊ฐ€

* refactor: spending search service ๋ถ„๋ฆฌ

* refactor: spending mapper ๋ถ„๋ฆฌ

* refactor: spending_mapper ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ

* rename: spending mapper calculate ๋ฉ”์„œ๋“œ ์ฃผ์„ ์ถ”๊ฐ€

* docs: spending search res dto ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์ž‘์„ฑ

* docs: ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ api ์Šค์›จ๊ฑฐ ๋ฌธ์„œ 200 ์‘๋‹ต ํฌ๋งท ์ถ”๊ฐ€

* test: ์›”๋ณ„ ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ •

* feat: ์ง€์ถœ entity sql_restriction ์ถ”๊ฐ€

* โœจ ์‚ฌ์šฉ์ž ์ปค์Šคํ…€ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ๋“ฑ๋ก API (#79)

* feat: ๊ณตํ†ต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ dto

* feat: spending entity get_category() ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: get_category type์— ๋งž์ถ”์–ด ๊ธฐ์กด ์ฝ”๋“œ ํƒ€์ž… ๋ณ€ํ™˜

* fix: custom category์ธ ๊ฒฝ์šฐ๋ฅผ ํ•ธ๋“ค๋ง ํ•˜๊ธฐ ์œ„ํ•œ is_custom ํ•„๋“œ ์ถ”๊ฐ€

* fix: ์‚ฌ์šฉ์ž ์ •์˜/์„œ๋น„์Šค ์ œ๊ณต ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฐ๋ฅธ dto ์ •๋ณด ์ˆ˜์ •

* fix: category icon ํ•„๋“œ ํƒ€์ž… spending_category๋กœ ์ˆ˜์ •

* docs: api ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์ž‘์„ฑ

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ dto ์ •์˜

* refactor: spending category api ๋ถ„๋ฆฌ

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€ use case ์ž‘์„ฑ

* test: ์œ ํšจํ•˜์ง€ ์•Š์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ช…์„ ์ž…๋ ฅํ•˜๋ฉด 422 Unprocessable Entity ์—๋Ÿฌ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

* fix: name ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ @not_empty -> @not_blank

* test: controller unit test ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€

* feat: icon other ๊ฐ’ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* feat: spending exception ์ •์˜ && other ์•„์ด์ฝ˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* test: other icon ์ž…๋ ฅ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ…Œ์ŠคํŠธ

* rename: save -> create_spending_custom_category

* fix: spending_custom_category ํ…Œ์ด๋ธ”๋ช… ์ˆ˜์ •

* docs: param query object ์Šค์›จ๊ฑฐ ์ƒ์—์„œ ์•ˆ ๋ณด์ด๋„๋ก ์ฒ˜๋ฆฌ

* docs: ์„ฑ๊ณต ์‘๋‹ต ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€

* docs: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์‘๋‹ต icon ํ•„๋“œ ์˜ˆ์‹œ ์ˆ˜์ • && ์‘๋‹ต key๊ฐ’ ์ถ”๊ฐ€

* โœจ ์ง€์ถœ ๋‚ด์—ญ ๋“ฑ๋ก API (#81)

* test: ์†Œ๋น„ ๋‚ด์—ญ ๋“ฑ๋ก controller unit test

* feat: ์ง€์ถœ ๋“ฑ๋ก dto ์ƒ์„ฑ

* feat: dto ๋‚ด to_entity() ๋ฉ”์„œ๋“œ ์ •์˜

* test: given() ์ถ”๊ฐ€ ๋ฐ mockmvc csrf ์ฒ˜๋ฆฌ

* test: 101์ž๋ฆฌ ๋žœ๋ค ๋ฌธ์ž์—ด ์ƒ์„ฑ ๋ฐฉ๋ฒ• ์ˆ˜์ •

* feat: ์š”์ฒญ icon์ด other์ด๋ฉด์„œ, category_id๊ฐ€ -1์ธ ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* fix: to_spending_search_res_individual private -> public

* feat: ๋™์ž‘ํ•˜๋„๋ก usecase ์ง€์ถœ ์ƒ์„ฑ ์ฝ”๋“œ ์ž‘์„ฑ

* feat: ์ง€์ถœ entity ๋‚ด ์ปค์Šคํ…€ ์นดํ…Œ๊ณ ๋ฆฌ ๋งคํ•‘ ๋ฉ”์„œ๋“œ ๋ฐ ์ƒ์„ฑ์ž ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€

* feat: custom_category not_found ์˜ˆ์™ธ ์ถ”๊ฐ€

* feat: spending_custom_category ์กฐํšŒ domain service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* rename: ์—๋Ÿฌ ์‘๋‹ต ์ƒ์„ธํ™”

* fix: category_info ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ๋‚ด is_custom ํŒ๋‹จ ์Šค๋‹ˆํŽซ ์ˆ˜์ •

* test: request์˜ categoryId๊ฐ€ -1์ธ ๊ฒฝ์šฐ, spendingCustomCategory๊ฐ€ null์ธ Spending์„ ์ƒ์„ฑํ•œ๋‹ค

* test: request์˜ categoryId๊ฐ€ -1์ด ์•„๋‹Œ ๊ฒฝ์šฐ, spendingCustomCategory๋ฅผ ์ฐธ์กฐํ•˜๋Š” Spending์„ ์ƒ์„ฑํ•œ๋‹ค

* test: ๊ธฐ์กด ์นดํ…Œ๊ณ ๋ฆฌ์— ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ, icon ์ •๋ณด๋ฅผ other๋กœ ์ˆ˜์ •

* fix: category ์ •๋ณด ์ƒ์„ธํ•œ ์‘๋‹ต์œผ๋กœ ๋ณ€๊ฒฝ

* feat: request์˜ category_id, icon ์กฐํ•ฉ ๊ฒ€์ฆ

* fix: ์„œ๋น„์Šค/์‚ฌ์šฉ์ž ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฐ๋ฅธ to_entity() ๋ถ„๋ฆฌ

* refactor: spending_save_service ๋ถ„๋ฆฌ

* refactor: ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด request ๋‚ด custom_category ์š”์ฒญ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* test: ์ž์› ๊ฒ€์ฆ ์‹œ๋‚˜๋ฆฌ์˜ค ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: is_custom_category ๋…ผ๋ฆฌ ๋ถ€์ • ์—ฐ์‚ฐ ์ถ”๊ฐ€

* feat: ์ปค์Šคํ…€ ์นดํ…Œ๊ณ ๋ฆฌ ์ž์› ์ ‘๊ทผ ๊ด€๋ฆฌ ๋งค๋‹ˆ์ € ์ƒ์„ฑ

* feat: ์‚ฌ์šฉ์ž id์™€ ์ปค์Šคํ…€ id๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์ปค์Šคํ…€ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ์ž์› ๊ฒ€์ฆ ์ธ๊ฐ€ ๋กœ์ง controller ๋ฐ˜์˜

* docs: ์ง€์ถœ ๋‚ด์—ญ ์ถ”๊ฐ€ api ๋ฌธ์„œ ์ž‘์„ฑ

* docs: swagger ์˜ˆ์™ธ ์‘๋‹ต ์ถ”๊ฐ€

* test: usecase์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋กœ ์ˆ˜์ •

* โœจ ์‚ฌ์šฉ์ž ์ •์˜ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ API (#82)

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ controller ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ usecase ์ž‘์„ฑ

* feat: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ domain service ์ถ”๊ฐ€

* fix: ์ƒํƒœ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์กฐ๊ฑด๋ฌธ ์ƒ์„ฑ์ž๋กœ ์ด๋™

* rename: icon -> category

* feat: category converter ํ•„๋“œ์— ์ •์˜

* docs: ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ swagger ๋ฌธ์„œ ์ž‘์„ฑ

* โœ๏ธ QueryDsl ํ™•์žฅ Repository์˜ Dto ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ์„ ์œ„ํ•œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ (#84)

* feat: query dsl extended repository dto ๋ถˆ๋ณ€์‹ ์œ ์ง€๋ฅผ ์œ„ํ•ด linked_hash_map ์ž๋ฃŒ ๊ตฌ์กฐ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ

* test: hash map ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* rename: query_handler ์‚ฌ์šฉ ๋ชฉ์ ์„ ๋‹ด์€ ์ฃผ์„ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ์šฉ dto @to_string() ์ž‘์„ฑ

* docs: ์ „์ฒด ๋ณด๊ธฐ ๊ทธ๋ฃน ์ถ”๊ฐ€ (#87)

* ๐Ÿ› ์‚ฌ์šฉ์ž ๊ณ„์ • ์‚ญ์ œ ํ›„ ๋™์ผํ•œ OAuth ํšŒ์›๊ฐ€์ž… ์ดํ›„ ๋กœ๊ทธ์ธ ์—๋Ÿฌ ํ•ด๊ฒฐ  (#85)

* fix: oauth_id, provider๋กœ oauth ์กฐํšŒ ์‹œ, deleted_at is null ์กฐ๊ฑด where ์ ˆ ์ถ”๊ฐ€

* rename: ๋ฉ”์„œ๋“œ์— deleted_at์ด null์ธ ๊ฒฝ์šฐ๋งŒ ์กฐํšŒํ•จ์„ ์ฃผ์„์œผ๋กœ ๋ช…์‹œ

* fix: user_oauth_sign_service read_user ์‹œ is_deleted ์ฒดํฌ ์ œ๊ฑฐ

* test: domain service deleted_at ์ฒ˜๋ฆฌ ๋Œ€์‘ -> assert_true ๋Œ€์‹  assert_null

* test: oauth repository query ์ •์ƒ ๋™์ž‘ ํ™•์ธ

* โœ๏ธ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์‹œ `@AuthenticatePrincipal` ์–ด๋…ธํ…Œ์ด์…˜ ๋Œ€์‘ (#86)

* feat: ์ธ์ฆ ํ•„ํ„ฐ์—์„œ token ํŒŒ์‹ฑ ํ›„ id๊ฐ’ ๋กœ๊น…

* feat: @with_security_mock_user ๋Œ€์‹  .with(user())๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋Œ€์ฒด

* fix: security_user_details get_password() ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ ๋ฐœ์ƒ ์ œ๊ฑฐ -> null ๋ฐ˜ํ™˜

* test: user_auth_controller ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ฐ seucurity mock user ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* refactor: ํ†ตํ•ฉํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€๋ฅผ controller -> integration์œผ๋กœ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ˆœ์„œ ์ง€์ • ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* โœจ ์‚ฌ์šฉ์ž ๋…„/์›” ๋ณ„ ์ง€์ถœ ์ดํ•ฉ ๋ฐ ๋ชฉํ‘œ ๊ธˆ์•ก ์กฐํšŒ API (#88)

* feat: ๋ชฉํ‘œ ๊ธˆ์•ก ์กฐํšŒ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ dto ์ถ”๊ฐ€

* feat: ๋ชฉํ‘œ ๊ธˆ์•ก ์กฐํšŒ ์‘๋‹ต dto ์ •์˜

* fix: date ์ฟผ๋ฆฌ validation ์ถ”๊ฐ€

* feat: controller ๋‹จ์ผ ๋ฐ ์ „์ฒด ๋‚ด์—ญ ์กฐํšŒ

* feat: domain module ์‚ฌ์šฉ์ž ๋…„/์›” ๋ณ„ ์ด ์ง€์ถœ ๊ธˆ์•ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” dto ์ •์˜

* feat: spending custom repository ์ •์˜ && ์‚ฌ์šฉ์ž์˜ ํŠน์ • ๋…„/์›” ์ด ์ง€์ถœ ๊ธˆ์•ก ์กฐํšŒ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: ์‚ฌ์šฉ์ž ๋…„/์›” ์ง€์ถœ ๊ธˆ์•ก ์กฐํšŒ usecas ๋ฐ˜์˜

* fix: target_amount_usecase ๋ชฉํ‘œ ๊ธˆ์•ก ๋ฆฌ์ŠคํŠธ ์กฐํšŒ ๋ฐ ๋งคํผ ํด๋ž˜์Šค ์‚ฌ์šฉ

* feat: domain service ๋‚ด user_id๋กœ ๋ชฉํ‘œ ๊ธˆ์•ก ์„ค์ • ์ด๋ ฅ ์กฐํšŒ

* fix: ๋ชฉํ‘œ ๊ธˆ์•ก ๋ฐ ์ด ์ง€์ถœ ๊ธˆ์•ก ์กฐํšŒ dto ์ด๋ฆ„ ๋ฐ ํ•„๋“œ ์ˆ˜์ •

* fix: ์ „์ฒด ์†Œ๋น„ ๊ธˆ์•ก ์กฐํšŒ optional ใ…Š์ฒ˜๋ฆฌ

* feat: ๋ชฉํ‘œ ๊ธˆ์•ก ์ƒ์„ธ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๋‚ด๋ถ€ dto ์ •์˜

* fix: dto null guard ๊ตฌ๋ฌธ ์ถ”๊ฐ€

* feat: to_with_total_spending_res mapper ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* feat: to_with_total_spendings_res mapper ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: ๋‚ ์งœ ๋ฒ”์œ„ ๊ณ„์‚ฐ์‹ ์ˆ˜์ •

* feat: target_amount entity to_string() ์ •์˜

* refactor: entity -> dto ๋งคํ•‘์„ ์œ„ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ list -> map์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: target_amount_mapper ํ•จ์ˆ˜ ๋ถ„๋ฆฌ ๋ฐ ๋ฉ”์„œ๋“œ ๋ช… ์ผ๋ถ€ ์ˆ˜์ •

* rename: target_amount_info dto ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ฃผ์„ ์ถ”๊ฐ€

* rename: with_total_spending_res diff_amount ํ•„๋“œ notnull ์กฐ๊ฑด ์ถ”๊ฐ€

* feat: view type ์—ด๊ฑฐ ํƒ€์ž… ์ •์˜

* feat: view_type_converter ์ •์˜ ๋ฐ web_config ๋“ฑ๋ก

* fix: ๋‹จ์ผ ์กฐํšŒ ์‹œ path_parameter๋กœ date ๋ฐ›๋„๋ก ์ˆ˜์ •

* fix: view_type ์ œ๊ฑฐ

* docs: controller ์Šค์›จ๊ฑฐ ๋ฌธ์„œ ์ž‘์„ฑ

* fix: use_case ๋‚ด ๋ถˆํ•„์š”ํ•œ ์ข…์†์„ฑ ์ œ๊ฑฐ

* test: user_fixture ์‚ฌ์šฉ์ž ๊ฐ€์ž…์ผ ์ง€์ •ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: spending_fixture ์†Œ๋น„์ผ ๋žœ๋ค ์ƒ์„ฑ ๋กœ์ง ์ˆ˜์ •

* test: target_amount fixture ์ •์˜

* test: user created_at ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜์ •

* test: ์‚ฌ์šฉ์ž ์ž„์˜์˜ ๋…„/์›” ์ง€์ถœ ์ดํ•ฉ ๋ฐ ๋ชฉํ‘œ ๊ธˆ์•ก ์กฐํšŒ ํ…Œ์ŠคํŠธ

* fix: ์ž„์˜์˜ ๋…„/์›” ์กฐํšŒ ์‹œ group by ์ ˆ ์ถ”๊ฐ€

* fix: ๋ชจ๋“  ๊ธฐ๋ก ์กฐํšŒ ์ฟผ๋ฆฌ์—์„œ sort ์กฐ๊ฑด ์ˆ˜์ •

* chore: domain.yml ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ jdbc ๋กœ๊ทธ debug๋กœ ์„ค์ •

* test: month ๊ธธ์ด ๊ณ„์‚ฐ ๋กœ์ง ์ˆ˜์ •

* fix: mapper ๋‚ด์—์„œ month_length ๊ธธ์ด ๊ณ„์‚ฐ ๋กœ์ง ์ˆ˜์ •

* test: user_account_use_case_test jpa_query_factory mock bean ์ฃผ์ž…

* chore: jpa_query_factory ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •์šฉ ๋นˆ ๋“ฑ๋ก

* test: jpa_query_factory ๋นˆ ์ฃผ์ž…

* fix: target_amount_mapper @required_args_contstructor ์ œ๊ฑฐ

* โœจ ๋‹น์›” ๋ชฉํ‘œ ๊ธˆ์•ก ์‚ญ์ œ API (#90)

* feat: target_amount delete controller ์ •์˜

* feat: target_amount 404 ์—๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: target_amount ์‚ญ์ œ usecase ์ถ”๊ฐ€

* feat: target_amount ์‚ญ์ œ domain service ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* refactor: target amount ์กฐํšŒ ๋กœ์ง ์ˆ˜์ •

* docs: ์‚ญ์ œ api swagger ์ž‘์„ฑ

* fix: is_allocated_amount ๋…ผ๋ฆฌ ๋ถ€์ • ์ œ๊ฑฐ

* docs: ์Šค์›จ๊ฑฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€

* fix: parameter in import ์ถ”๊ฐ€

* โœจ ์ง€์ถœ ๋‚ด์—ญ ์ƒ์„ธ ์กฐํšŒ API (#89)

* feat: ์ƒ์„ธ์กฐํšŒ controller ์ž‘์„ฑ

* feat: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ง€์ถœ ๋‚ด์—ญ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ง€์ถœ ๋‚ด์—ญ ์—๋Ÿฌ์ฝ”๋“œ ์ถ”๊ฐ€

* feat: ์ง€์ถœ๋‚ด์—ญ ๊ฐœ๋ณ„ ์กฐํšŒ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

* feat: spendingsearchservice ์ž‘์„ฑ

* feat: usecase ์ž‘์„ฑ

* docs: swagger ๋ฌธ์„œ ์ž‘์„ฑ

* fix: ์ปจ๋ฒค์…˜์— ๋งž์ถ”์–ด ์‘๋‹ต key ์ˆ˜์ •

* feat: ์ธ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ spendingmanager ์ž‘์„ฑ

* refactor: ๊ธฐ์กด usecase์˜ ์ธ๊ฐ€ ๋กœ์ง ์ œ๊ฑฐ

* refactor: searchservice ๋กœ์ง usecase๋กœ ์ด๋™

* fix: ์˜คํƒˆ์ž ๋ฐ ์ž˜๋ชป๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ ์ˆ˜์ •

* fix: ์ž˜๋ชป๋œ ๋กœ๊ทธ ์ œ๊ฑฐ

* fix: 403 ์—๋Ÿฌ ๋ฌธ์„œ ๋ฐ ์ฝ”๋“œ ์‚ญ์ œ

---------

Co-authored-by: JaeSeo Yang <[email protected]>

* ๐Ÿ› ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ ์‘๋‹ต ๋ฐ ์Šค์›จ๊ฑฐ ๋ฒ„๊ทธ ํ”ฝ์Šค (#92)

* docs: ์ง€์ถœ ๋‚ด์—ญ ์กฐํšŒ @parameter type header -> query && ์ง€์ถœ๋‚ด์—ญ ์ƒ์„ธ ์กฐํšŒ @parameter ์ถ”๊ฐ€

* fix: ์†Œ๋น„ ๋‚ด์—ญ ์กฐํšŒ ์‹œ, ์›” ์†Œ๋น„ ๊ธˆ์•ก ์ดํ•ฉ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ

* fix: ์‘๋‹ต ํ‚ค spendings -> spending

* โœจ Firebase Cloud Messaging ๊ธฐ๋ณธ ์„ค์ • (#94)

* chore: firebase build ์ข…์†์„ฑ ์ถ”๊ฐ€

* chore: fcm_config import selector group ์„ค์ •

* chore: external-api infra_config์—์„œ fcm_config ๋นˆ ์Šค์บ”

* chore: firebase admin key ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ๋ก

* feat: fcm_config ์ •์˜

* chore: firebase admin-key .gitignore ๋“ฑ๋ก

* fix: fcm_config ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ test ์ œ๊ฑฐ

* rename: fcm config @profile todo ์ฃผ์„ ์ถ”๊ฐ€

* chore: cd pipeline ๋‚ด fcm admin sdk json ํŒŒ์ผ ์ƒ์„ฑ step ์ถ”๊ฐ€

* chore: cd pipeline json ์‚ฝ์ž… ๋™์ž‘ ํ™•์ธ

* chore: json name, dir ์†์„ฑ ๋ถ„๋ฆฌ

* chore: resource firebase ๋””๋ ‰ํ† ๋ฆฌ .gitkeep ์ƒ์„ฑ ๋ฐ .gitignore ๋ฒ”์œ„ ์ˆ˜์ •

* chore: feature ๋ธŒ๋žœ์น˜ cd ๊ฐ์ง€ ์ œ๊ฑฐ

* โœจ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๋กœ๊ทธ๋ฅผ ์œ„ํ•œ Interceptor ๋ฐ ํ™˜๊ฒฝ ๊ตฌ์ถ•  (#95)

* feat: ๋กœ๊ทธ์ธ ๋กœ๊ทธ redis entity ์ •์˜

* feat: ๋กœ๊ทธ redis repository ์ž‘์„ฑ

* fix: sign event log repository crud -> list_crud ์ƒ์†์œผ๋กœ ๋ณ€๊ฒฝ

* feat: sign_event_log_service ์ •์˜. cr ์ž‘์—…๋งŒ ์ˆ˜ํ–‰

* feat: sign_in_log ๋ณตํ•ฉํ‚ค ํด๋ž˜์Šค ์„ค์ •

* feat: sign_in_log entity ์ •์˜

* feat: sign_in_log repo & service ํด๋ž˜์Šค ์ƒ์„ฑ

* feat: web_mvc_config sign_event_log_interceptor ๋“ฑ๋ก

* refactor: jwt_claims_parser_util ๋ถ„๋ฆฌ

* feat: ip_address_header type ์ •์˜

* feat: ip_address_header converter ์ •์˜

* feat: sign_in_log entity์— app_version, ip_address_header ํ•„๋“œ ์ถ”๊ฐ€

* fix: sign_event_log app_version, ip_addr_header ํ•„๋“œ ์ถ”๊ฐ€

* feat: sign_event interceptor ์ •์˜

* fix: sign_in_log_id ํด๋ž˜์Šค ์ง๋ ฌํ™” ๊ตฌํ˜„

* fix: sign_in_log entity์— @entity ์„ ์–ธ

* test: web_mvc_config ๋‚ด service ์˜์กด์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•œ controller unit test ์‹คํŒจ ํ•ด๊ฒฐ

* fix: interceptor response auth header ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ ์ถ”๊ฐ€

* โœจ S3 ์ •์  ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ์œ„ํ•œ Presigned-URL ๋ฐœ๊ธ‰ API ๊ตฌํ˜„ (#97)

* chore: s3 ๊ด€๋ จ ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: s3-client ๋นˆ ์ƒ์„ฑ์„ ์œ„ํ•œ s3-config ํด๋ž˜์Šค ์„ ์–ธ

* feat: s3-presigner ๋นˆ ์„ ์–ธ

* feat: s3 presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ provider ์„ ์–ธ ๋ฐ ๋ฐœ๊ธ‰ ๋ฉ”์„œ๋“œ ์„ ์–ธ

* fix: s3 ์ ‘๊ทผ์„ ์œ„ํ•œ credentials ์„ ์–ธ ๋ฐ ์ ์šฉ

* feat: s3 presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ api ๋ช…์„ธ ์ •์˜

* feat: s3์˜ object key ์ƒ์„ฑ์„ ์œ„ํ•œ uuid util ํด๋ž˜์Šค ์ •์˜

* feat: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ dto ์„ ์–ธ ๋ฐ api ์ˆ˜์ •

* feat: object-key ์ƒ์„ฑ์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ๋ฐ ํƒ€์ž… ์„ ์–ธ

* fix: s3-bucket-name ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ๋ฐ ๊ด€๋ จ ๋กœ์ง ์ˆ˜์ •

* feat: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ service ๋ฐ usecase ์ •์˜

* fix: storage-usecase ํŒจํ‚ค์ง€ ์ด๋™

* fix: storage-controller ์ ‘๊ทผ ๊ถŒํ•œ ์ˆ˜์ •

* fix: storage ๊ด€๋ จ ์˜ˆ์™ธ ๋ฐ ์—๋Ÿฌ ์ฝ”๋“œ ์„ ์–ธ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ •

* test: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ api ํ…Œ์ŠคํŠธ ๋กœ์ง ์ž‘์„ฑ

* chore: presgined-url response-dto description ์‚ญ์ œ

* fix: user error-code์™€ ์ค‘๋ณต๋œ ์ฝ”๋“œ ์ œ๊ฑฐ

* fix: presgined-url ๋ฐœ๊ธ‰ ์š”์ฒญ ์‹œ chat-id ์†์„ฑ ์‚ญ์ œ ๋ฐ aws-s3-provider ์ฃผ์„ ๊ตฌ์ฒดํ™”

* docs: swagger ์‘๋‹ต ๊ตฌ์ฒดํ™”

* refactor: object-key ์ƒ์„ฑ์„ ์œ„ํ•œ url-generator ์ •์˜

* refactor: object-key ์ƒ์„ฑ์„ ์œ„ํ•œ url-generator ์ ์šฉ

* docs: aws-s3-provider ๋ฉ”์„œ๋“œ๋“ค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ด€๋ จ ์„ค๋ช… ์ถ”๊ฐ€

* fix: s3 ๊ด€๋ จ ์˜ˆ์™ธ ์œ„์น˜ ์ˆ˜์ •

* fix: presigned-url ๋ฐœ๊ธ‰ api swagger ์‘๋‹ต์—์„œ ์ฝ”๋“œ ์ œ๊ฑฐ

* fix: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ dto๋ช… ๋ณ€๊ฒฝ

* test: storage-controller ํ…Œ์ŠคํŠธ profile ์ˆ˜์ •

* fix: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ dto๋ช… ๋ณ€๊ฒฝ

* fix: presigned-url ๋ฐœ๊ธ‰์„ ์œ„ํ•œ dto๋ช… ๋ณ€๊ฒฝ

* test: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ user ์„ค์ • ๋ณ€๊ฒฝ

* test: exclude-filters ์ถ”๊ฐ€

* โœจ ์ง€์ถœ ๋‚ด์—ญ ์‚ญ์ œ API (#96)

* feat: ์‚ญ์ œ api ์ž‘์„ฑ

* docs: swagger ๋ฌธ์„œ ์ž‘์„ฑ

* fix: ์ธ์ฆ ์ฒ˜๋ฆฌ ์ด๋™์— ์˜ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์ˆ˜์ •

* docs: ์ง€์ถœ ์‚ญ์ œ swagger 403 ์˜ˆ์™ธ ์ถ”๊ฐ€

* test: ์‚ญ์ œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ

* feat: fixture ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ assertion ์ถ”๊ฐ€

* feat: fixturefixture ์ƒ์ˆ˜ ๋ณ€๊ฒฝ

* โœจ ์ง€์ถœ ๋‚ด์—ญ ์ˆ˜์ • API (#93)

* fix: usecase๋‹จ์˜ ํ•„์š”์—†๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ๊ฑฐ

* feat: ์ง€์ถœ๋‚ด์—ญ ์ˆ˜์ • controller ์ž‘์„ฑ

* feat: usecase ์ž‘์„ฑ

* feat: spending ์—…๋ฐ์ดํŠธ ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ ๋ฐ service ์ž‘์„ฑ

* feat: swagger docs ์ž‘์„ฑ

* feat: spending.update ๋ฉ”์†Œ๋“œ๋ฅผ customcategory ํฌํ•จํ•ด ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์ˆ˜์ •

* docs: ์ง€์ถœ ๋‚ด์—ญ ์ƒ์„ฑ๊ณผ ์ค‘๋ณต๋œ ์—๋Ÿฌ์‘๋‹ต ์ œ๊ฑฐ

* feat: ์ปค์Šคํ…€ ์นดํ…Œ๊ณ ๋ฆฌ ์—ฌ๋ถ€ ๋ถ„๊ธฐ ๋กœ์ง ๊ณ ๋ คํ•ด ๋กœ์ง ์žฌ์ž‘์„ฑ

* refactor: ๋ถˆํ•„์š”ํ•œ userํ•„๋“œ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด req dto toentity ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ ํ›„ ๋ฆฌํŒฉํ† ๋ง

* test: spendingupdateservice ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* test: ์ง€์ถœ๋‚ด์—ญ ์ƒ์„ธ ์กฐํšŒ ๋ฐ ์ˆ˜์ • ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* fix: ์ž˜๋ชป ์ž‘์„ฑ๋œ fixture๋ฉ”์†Œ๋“œ ์ œ๊ฑฐ

* test: spendingfixture ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

* feat: ํ†ตํ•ฉํ…Œ์ŠคํŠธ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

* fix: ์ถฉ๋Œ resolve ํ›„ ์—๋Ÿฌ ์ˆ˜์ •

* โœจ Redisson์„ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ ๋ฝ(Distributed Lock) ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ํ…Œ์ŠคํŠธ (#98)

* chore: domain ๋ชจ๋“ˆ ๋‚ด redission ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: redisson config ์„ค์ •

* feat: ๋ถ„์‚ฐ๋ฝ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜ ์ƒ์„ฑ

* feat: spring spel ์ปค์Šคํ…€ ํŒŒ์„œ ์œ ํ‹ธ ํด๋ž˜์Šค ์ƒ์„ฑ

* fix: ๋ถ„์‚ฐ๋ฝ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜ need_same_transaction ํ•„๋“œ ์ถ”๊ฐ€

* rename: need_same_transaction ์ฃผ์„ ์ถ”๊ฐ€

* feat: transaction propagation ๋ ˆ๋ฒจ ์ง€์ • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ์ž‘์„ฑ

* rename: need_same_transaction -> new ์ˆ˜์ •

* fix: redisson_call_new_transaction timout ๋ฐ ์ฃผ์„ ์ˆ˜์ •

* rename: unit -> timeunit ์ด๋ฆ„ ์ˆ˜์ •

* feat: ๋ถ„์‚ฐ๋ฝ aop ํด๋ž˜์Šค ๊ตฌํ˜„

* fix: redis_connection_factory & redis_cache_manager ๋นˆ @primary ๋“ฑ๋ก

* test: redisson ์„ค์ •์„ ์œ„ํ•œ test container redis password ์„ค์ • ์ถ”๊ฐ€

* test: test container domain ๋ชจ๋“ˆ redis password ์ถ”๊ฐ€

* test: domain ๋ชจ๋“ˆ db & redis testcontainer config ์„ค์ •

* test: ๋ถ„์‚ฐ ๋ฝ ํ…Œ์ŠคํŠธ์šฉ ๋”๋ฏธ entity ์ •์˜

* test: ๋ถ„์‚ฐ ๋ฝ ํ…Œ์ŠคํŠธ์šฉ ๋”๋ฏธ service ๊ตฌํ˜„

* test: ๋ถ„์‚ฐ๋ฝ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

* fix: return null ์ˆ˜์ •

* rename: ๋ฝ ํ•ด์ œ ์‹œ์  ๋กœ๊ทธ ์ถ”๊ฐ€

* test: aop unit test ์ ์šฉ

* fix: test_jpa_config query_dsl bean conditional ์˜ต์…˜ ์ ์šฉ

* test: ๋„๋ฉ”์ธ ๋ชจ๋“ˆ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ์ƒ์„ฑ

* fix: redis_config scan ๊ฒฝ๋กœ ์ง€์ •

* chore: could not safely identify store assignment for repository ์ด์Šˆ ์ œ๊ฑฐ

* test: @domain_integration_test ํ™˜๊ฒฝ ์ถ”๊ฐ€

* test: test_coupon_repository ์ ์šฉ

* test: test_coupone service & repository profile test ์ง€์ •

* test: ๋ถ„์‚ฐ ๋ฝ์ด ์—†๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

* test: jwt_auth_helper @redis_unit_test ์–ด๋…ธํ…Œ์ด์…˜ ์ œ๊ฑฐ

* test: test_jpa_config_conditional_on_missing_bean ๋ฉ”์„œ๋“œ์— @bean ์ถ”๊ฐ€

* fix: query_dsl_config @primary ์ง€์ •

* fix: lock ํš๋“ ๋Œ€๊ธฐ์‹œ๊ฐ„ ์—ฐ์žฅ

* Batch: โœจ Batch ๊ธฐ์ดˆ ์„ธํŒ… ๋ฐ CD ํŒŒ์ดํ”„๋ผ์ธ ์ˆ˜์ • (์ˆ˜์ •๋  PR ์ปจ๋ฒค์…˜ ๊ด€๋ จ ๋‚ด์šฉ ํฌํ•จ) (#99)

* chore: batch module ์ƒ์„ฑ

* chore: batch ๋ชจ๋“ˆ application ํด๋ž˜์Šค ์ƒ์„ฑ

* chore: batch ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

* chore: external-api docker script ์œ„์น˜ ์ˆ˜์ •

* chore: batch docker script ์ƒ์„ฑ

* chore: java build ์‹œ ๋น„๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •

* chore: api cd gradlew parallel ์˜ต์…˜ ์ถ”๊ฐ€ && ํŒŒ์ผ๋ช… ์ˆ˜์ •

* chore: cd ์Šคํฌ๋ฆฝํŠธ external-api docker ๊ฒฝ๋กœ ์ˆ˜์ •

* chore: batch cd ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

* fix: batch application ํด๋ž˜์Šค main ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: tag & release ์ž๋™ํ™” actions ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

* chore: docker image ๊ฒฝ๋กœ ์ˆ˜์ •

* chore: batch module ์ƒ์„ฑ

* chore: batch ๋ชจ๋“ˆ application ํด๋ž˜์Šค ์ƒ์„ฑ

* chore: batch ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

* chore: external-api docker script ์œ„์น˜ ์ˆ˜์ •

* chore: batch docker script ์ƒ์„ฑ

* chore: java build ์‹œ ๋น„๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •

* chore: api cd gradlew parallel ์˜ต์…˜ ์ถ”๊ฐ€ && ํŒŒ์ผ๋ช… ์ˆ˜์ •

* chore: cd ์Šคํฌ๋ฆฝํŠธ external-api docker ๊ฒฝ๋กœ ์ˆ˜์ •

* chore: batch cd ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

* fix: batch application ํด๋ž˜์Šค main ํ•จ์ˆ˜ ์ถ”๊ฐ€

* chore: tag & release ์ž๋™ํ™” actions ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

* chore: docker image ๊ฒฝ๋กœ ์ˆ˜์ •

* rename: ํƒœ๊ทธ ๋ฐ ๋ฆด๋ฆฌ์ฆˆ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ์ฃผ์„ ์ถ”๊ฐ€

* chore: cd ํŒŒ์ดํ”„๋ผ์ธ ๋ฒ„์ „ ์ •๋ณด ์ถ”์ถœ step ์ถ”๊ฐ€

* release: api v1.0.0 ์ถœ๋™

* release: api-v1.0.0 (#100)

* fix: ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฒ„์ „ ์ถ”๊ฐ€

* Api: ๐Ÿ› ํƒœ๊ทธ ์ƒ์„ฑ & ๋ฆด๋ฆฌ์ฆˆ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ํ›„ ๋ฐฐํฌ workflows call (#101)

* fix: ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฒ„์ „ ์ถ”๊ฐ€

* rename: run ์ด๋ฆ„ call-external-api-deploy๋กœ ๋ณ€๊ฒฝ

* chore: api & batch ๋ชจ๋“ˆ workflow_call trigger ์ถ”๊ฐ€

* chore: tag ์ •๋ณด inputs.tags๋กœ ์ˆ˜์ •

* test: ํƒœ๊ทธ ์ƒ์„ฑ ํŠธ๋ฆฌ๊ฑฐ opened ์ถ”๊ฐ€

* test: merged ์กฐ๊ฑด์‹ ์ž„์‹œ ์ œ๊ฑฐ

* fix: call ์ธ์ž ์ „๋‹ฌ ์‹œ version -> tag ์ˆ˜์ •

* rename: batch cd ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฆ„ ์ˆ˜์ •

* chore: workflow_dispatch ์ œ๊ฑฐ

* chore: reuse workflow ํ˜ธ์ถœ ์‹œ secret key ์ƒ์† ์˜ต์…˜ ์ถ”๊ฐ€

* chore: pr ๋ณ‘ํ•ฉ ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€

* Api: ๐Ÿ› object-key์˜ depth ์ˆ˜์ •์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • (#102)

* Api: โœ๏ธ ๋ชฉํ‘œ ๊ธˆ์•ก ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ API ์ŠคํŽ™ ๋ณ€๊ฒฝ (#103)

* fix: ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฒ„์ „ ์ถ”๊ฐ€

* fix: target_amount entity is_read ํ•„๋“œ ์ถ”๊ฐ€

* fix: target_amount 409 ์˜ˆ์™ธ ์ฝ”๋“œ ์ถ”๊ฐ€

* fix: target-amount is_exists ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๋ฐ query_dsl impl ๊ตฌํ˜„

* rename: exists ์˜คํƒ€ ์ˆ˜์ • & tx read_only ์˜ต์…˜ ์ถ”๊ฐ€

* fix: target_amount id & user_id ์กฐ๊ฑด๋ฌธ ํƒ์ƒ‰ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: target_amount id, user_id exists ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* rename: ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆœ์„œ ๋ณ€๊ฒฝ

* fix: target_amount dto query param์„ ์œ„ํ•œ ํด๋ž˜์Šค๋ช…, ํ•„๋“œ ์ •๋ณด, ๋ฌธ์„œ ์ˆ˜์ •

* docs: target amount api spec ์ˆ˜์ •

* fix: api ์ŠคํŽ™์— ๋งž๊ฒŒ controller ์ˆ˜์ • ๋ฐ ์ž์› ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€

* fix: target_amount_info dto is_read ํ•„๋“œ ์ถ”๊ฐ€

* fix: target-amount ์ƒ์„ฑ use case ๋ถ„๋ฆฌ

* fix: find_by_id ์‹œ user_id ์กฐ๊ฑด๋ฌธ ์ œ๊ฑฐ

* fix: target_amount update ๋ฐ˜ํ™˜ ๊ฐ’ ์ˆ˜์ • ๋ฐ date ๊ธฐ๋ฐ˜ ํƒ์ƒ‰ -> target_amount_id ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์œผ๋กœ ์ˆ˜์ •

* fix: authenticated_principal ์ฃผ์ž… ํ•„์š”์—†๋Š” ๊ณณ์—์„œ ์ œ๊ฑฐ

* fix: target_amount_save_service ์ œ๊ฑฐ

* fix: target_amount ์ƒ์„ฑ ์‹œ ๋ถ„์‚ฐ ๋ฝ ์ ์šฉ

* style: distributed_lock ์–ด๋…ธํ…Œ์ด์…˜ ์œ„์น˜ ์ˆ˜์ •

* fix: ๋ถ„์‚ฐ๋ฝ prefix ๋ฌธ์ž์—ด ๊ด€๋ฆฌ ํด๋ž˜์Šค ๋ถ„๋ฆฌ

* style: update_target_amount ํ• ๋‹น๋ฌธ ์ถ”๊ฐ€

* docs: target_amount patch ์‘๋‹ต ๋ฐ์ดํ„ฐ ์ˆ˜์ •

* fix: lock prefix ์ˆ˜์ •

* test: target-amount ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํ†ต์ผ ๋ฐ jdbc bulk query ์ˆ˜์ •

* fix: target_amount entity ๋‹น์›” ๋ฐ์ดํ„ฐ ํ™•์ธ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

* fix: update, delete ์‹œ ๋‹น์›” ๋ฐ์ดํ„ฐ ์—ฌ๋ถ€ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€

* fix: target_amount to_string() year, month ์ •๋ณด ์ถ”๊ฐ€

* test: target_amount ๋‚ ์งœ ๋ณ€๊ฒฝ ํ›„ cache ์ œ๊ฑฐ

* test: ๋ชฉํ‘œ ๊ธˆ์•ก ์ƒ์„ฑ ์š”์ฒญ ํ…Œ์ŠคํŠธ

* fix: target_amount ๋ถ„์‚ฐ ๋ฝ ํ‚ค spel ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์ˆ˜์ •

* test: target_amount ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

* rename: target_amount ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ ๋กœ๊ทธ ์ œ๊ฑฐ

* rename: json ๋‚ด๋ถ€ target_amount ํ•„๋“œ๋ช… -> target_amount_detail ์ˆ˜์ •

* fix: target_amount ์ƒ์„ฑ ์š”์ฒญ์—์„œ ๋‹น์›” ์š”์ฒญ ํŒ๋‹จ ๋กœ์ง ์ˆ˜์ •

* test: put -> patch ์ด๋ฆ„ ์ˆ˜์ •

* test: target_amount controller unit test ์ˆ˜์ •

* fix: success response key ์ƒ์ˆ˜์ฒ˜๋ฆฌ

* fix: use case ๋‚ด ๋ถˆํ•„์š”ํ•œ create ํ˜ธ์ถœ ์ œ๊ฑฐ

* rename: date_param dto schema ์˜คํƒ€ ์ˆ˜์ •

* test: ํŠน์ • ๋…„/์›”์— ๋Œ€ํ•œ target_amount๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ 404 not found ์—๋Ÿฌ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

* fix: target_amount use case not found ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

* docs: target api ์กฐํšŒ ์‹œ 404 ์˜ˆ์™ธ ๋ฌธ์„œํ™”

* docs: target_amount ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๋ฌธ์„œ ์ž‘์„ฑ

* fix: lock key์˜ date์—์„œ day ์ธ์ž ์ œ๊ฑฐ

* fix: ๋ฌธ์˜ํ•˜๊ธฐ ์‘๋‹ต์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ (#106)

* docs: ๐Ÿ“ Readme-v0.0.3 (#108)

* fix: ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฒ„์ „ ์ถ”๊ฐ€

* docs: root readme ์ˆ˜์ •

* docs: external-api ๋ชจ๋“ˆ docs ์ˆ˜์ •

* feat: โœจ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ์š”์ฒญ API ๊ตฌํ˜„ (#105)

* feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ์š”์ฒญ dto ์ •์˜

* feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ์š”์ฒญ api ์„ค๊ณ„

* feat: user entity์— profile-image-url ์ˆ˜์ • ๋กœ์ง ์ถ”๊ฐ€

* feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก์„ ์œ„ํ•œ usecase ์ •์˜

* feat: s3 ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜ ๋กœ์ง ๊ตฌํ˜„

* feat: storage ์ €์žฅ ์‹คํŒจ ์‹œ ์—๋Ÿฌ์ฝ”๋“œ ์ •์˜

* feat: s3 ํŒŒ์ผ ๋ณต์‚ฌ ๋กœ์ง ๊ตฌํ˜„

* feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ €์žฅ api ๊ตฌํ˜„

* feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์›๋ณธ ์ €์žฅ ์‹œ storage-class ์ ์šฉ

* fix: ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์„ ์œ„ํ•œ storage-class ์ˆ˜์ •

* docs: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก swagger ์‘๋‹ต ์ผ€์ด์Šค ์ถ”๊ฐ€

* test: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก api ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* test: user-account-usecase์— aws-s3-provider mockbean ์ ์šฉ

* fix: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ๋ฉ”์„œ๋“œ put์œผ๋กœ ๋ณ€๊ฒฝ

* docs: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ์„ฑ๊ณต ์‹œ ์˜ˆ์‹œ ์‘๋‹ต ์ œ๊ฑฐ

* docs: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก swagger parameter ์ œ๊ฑฐ

* fix: request dto validate ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ ๋ฐ tab-character ์ œ๊ฑฐ

* rename: s3 ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •

* fix: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ dto์— regex ํŒจํ„ด ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€

* test: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ์ˆ˜์ •

* fix: ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ์š”์ฒญ dto ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์‚ญ์ œ

* refactor: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ prefix ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ

* refactor: s3 object-key regex ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌ

* feat: s3 object-key regex ํด๋ž˜์Šค ๋ถ„๋ฆฌ ๋ฐ ์ •์  ๋ณ€์ˆ˜๋กœ ์„ ์–ธ

* fix: โœ๏ธ ์‚ฌ์šฉ์ž ๋กœ๊ทธ ๊ด€๋ฆฌ ์ •์ฑ… ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ Device API ์ˆ˜์ • (#104)

* fix: ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฒ„์ „ ์ถ”๊ฐ€

* fix: device entity os & model ํ•„๋“œ ์ œ๊ฑฐ

* fix: device token dto model, os ํ•„๋“œ ์ œ๊ฑฐ

* fix: device_dto to_entity() ๋ฉ”์„œ๋“œ ๋ณต๊ตฌ

* fix: device update ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ, activate ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ

* fix: device ๋“ฑ๋ก ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ •

* test: device controller unit test์—์„œ model, os ์ œ๊ฑฐ

* fix: device_fixture model, os ํ•„๋“œ ์ œ๊ฑฐ

* rename: fixture token ๋ณ€๊ฒฝ ์ƒ์ˆ˜๋ช… ์ˆ˜์ •

* fix: device entity ์กฐํšŒ ์‹œ ํ™œ์„ฑํ™” ์กฐ๊ฑด ์ถ”๊ฐ€

* fix: device usecase ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜์ •

* fix: device ์ฟผ๋ฆฌ ์ž๋™ ์กฐ๊ฑด๋ฌธ ์ˆ˜์ •

* test: origin_token์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ new_token ๋“ฑ๋ก

* fix: @sql_restriction ์ œ๊ฑฐ

* test: ์ˆ˜์ • ์š”์ฒญ & ๊ธฐ์กด ํ† ํฐ ์—†์„ ์‹œ, ์ˆ˜์ • ํ† ํฐ์œผ๋กœ ์‹ ๊ทœ ๋“ฑ๋ก ํ…Œ์ŠคํŠธ

* fix: device_register_service ๋กœ์ง ์ˆ˜์ •

* fix: device_dto new_token ํ•„๋“œ ์ œ๊ฑฐ

* test: device controller unit test ์ˆ˜์ •

* fix: device ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์š”์ฒญ ํ† ํฐ์ด ์•„๋‹Œ ์„œ๋ฒ„ ํ† ํฐ์„ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉ

* fix: device_register_service ์ œ๊ฑฐ && ๋กœ์ง ๋‹จ์ˆœํ™”

* fix: ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ํ† ํฐ์ด ์„œ๋ฒ„์—์„œ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ์ผ ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

* test: test case ์š”์ฒญ ์ˆ˜์ •

* rename: device -> device_token์œผ๋กœ ์ˆ˜์ •

* rename: device_token entity to_string ์ˆ˜์ •

* rename: device token put ์š”์ฒญ ์‘๋‹ต key ์ˆ˜์ •

* docs: device put api ์Šค์›จ๊ฑฐ ์ˆ˜์ •

* fix: device controller ๊ฒฝ๋กœ ์ˆ˜์ •

* test: device_token controller unit test ๋ณ€๊ฒฝ๋œ url ๋ฐ ์‘๋‹ต ํฌ๋งท ๋ฐ˜์˜

* test: device_fixture -> device_token_fixture

* test: ๋‹จ์ผ token์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ํ…Œ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ๋น„ํ™œ์„ฑํ™” ํ† ํฐ ์š”์ฒญ ์—๋Ÿฌ ์ผ€์ด์Šค ์ถ”๊ฐ€

* fix: register_device_token ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* fix: device_token_unregister ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* test: device token ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ

* test: device_token_unregister_service_test ๋ถ„๋ฆฌ

* fix: user_account_use_case ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* test: user_account_usecase unit test ๋ถ„๋ฆฌ

* fix: device entity os & model ํ•„๋“œ ์ œ๊ฑฐ

* fix: device token dto model, os ํ•„๋“œ ์ œ๊ฑฐ

* fix: device_dto to_entity() ๋ฉ”์„œ๋“œ ๋ณต๊ตฌ

* fix: device update ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ, activate ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ

* fix: device ๋“ฑ๋ก ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ •

* test: device controller unit test์—์„œ model, os ์ œ๊ฑฐ

* fix: device_fixture model, os ํ•„๋“œ ์ œ๊ฑฐ

* rename: fixture token ๋ณ€๊ฒฝ ์ƒ์ˆ˜๋ช… ์ˆ˜์ •

* fix: device entity ์กฐํšŒ ์‹œ ํ™œ์„ฑํ™” ์กฐ๊ฑด ์ถ”๊ฐ€

* fix: device usecase ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜์ •

* fix: device ์ฟผ๋ฆฌ ์ž๋™ ์กฐ๊ฑด๋ฌธ ์ˆ˜์ •

* test: origin_token์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ new_token ๋“ฑ๋ก

* fix: @sql_restriction ์ œ๊ฑฐ

* test: ์ˆ˜์ • ์š”์ฒญ & ๊ธฐ์กด ํ† ํฐ ์—†์„ ์‹œ, ์ˆ˜์ • ํ† ํฐ์œผ๋กœ ์‹ ๊ทœ ๋“ฑ๋ก ํ…Œ์ŠคํŠธ

* fix: device_register_service ๋กœ์ง ์ˆ˜์ •

* fix: device_dto new_token ํ•„๋“œ ์ œ๊ฑฐ

* test: device controller unit test ์ˆ˜์ •

* fix: device ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์š”์ฒญ ํ† ํฐ์ด ์•„๋‹Œ ์„œ๋ฒ„ ํ† ํฐ์„ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉ

* fix: device_register_service ์ œ๊ฑฐ && ๋กœ์ง ๋‹จ์ˆœํ™”

* fix: ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ํ† ํฐ์ด ์„œ๋ฒ„์—์„œ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ์ผ ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

* test: test case ์š”์ฒญ ์ˆ˜์ •

* rename: device -> device_token์œผ๋กœ ์ˆ˜์ •

* rename: device_token entity to_string ์ˆ˜์ •

* rename: device token put ์š”์ฒญ ์‘๋‹ต key ์ˆ˜์ •

* docs: device put api ์Šค์›จ๊ฑฐ ์ˆ˜์ •

* fix: device controller ๊ฒฝ๋กœ ์ˆ˜์ •

* test: device_token controller unit test ๋ณ€๊ฒฝ๋œ url ๋ฐ ์‘๋‹ต ํฌ๋งท ๋ฐ˜์˜

* test: device_fixture -> device_token_fixture

* test: ๋‹จ์ผ token์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ํ…Œ์ŠคํŠธ ์ˆ˜์ • ๋ฐ ๋น„ํ™œ์„ฑํ™” ํ† ํฐ ์š”์ฒญ ์—๋Ÿฌ ์ผ€์ด์Šค ์ถ”๊ฐ€

* fix: register_device_token ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* fix: device_token_unregister ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* test: device token ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ถ„๋ฆฌ

* test: device_token_unregister_service_test ๋ถ„๋ฆฌ

* fix: user_account_use_case ํŒŒ์‚ฌ๋“œ ํŒจํ„ด ์ ์šฉ

* test: user_account_usecase unit test ๋ถ„๋ฆฌ

* fix: user_profile_update_dto merge conflict

* fix: โœ๏ธ ์‚ฌ์šฉ์ž ์ •์˜ ์ง€์ถœ ์นดํ…Œ๊ณ ๋ฆฌ `โ‹ฏ` ์•„์ด์ฝ˜ ๋ฐ˜์˜ (#107)

* rename: ์ปค์Šคํ…€ ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์ˆ˜ 0->custom, 12->other ์ˆ˜์ •

* style: spending key ์ƒ์ˆ˜ํ™”

* docs: spending category api ์˜ˆ์‹œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ other ์ถ”๊ฐ€

* fix: spending_controller ...์•„์ด์ฝ˜ validation ์ฒดํฌ

* fix: spending_category_dto validation ์ถ”๊ฐ€

* fix: spending entity ์ƒ์„ฑ์ž validation ์ถ”๊ฐ€

* fix: spending_category_dto validation ์ถ”๊ฐ€

* test: spending category ๋“ฑ๋ก ์‹œ other -> custom ๊ฑฐโ€ฆ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants