Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
211 commits
Select commit Hold shift + click to select a range
95ff712
feat(global): ๊ณตํ†ต์—๋Ÿฌ์ฒ˜๋ฆฌ ๊ตฌํ˜„
queenriwon Mar 24, 2025
33e316f
Create bug_report.yml
3uomlkh Mar 24, 2025
61777f4
Update feature_request.yml
3uomlkh Mar 24, 2025
1da623b
Update feature_request.yml
3uomlkh Mar 24, 2025
b59e07b
Update feature_request.yml
3uomlkh Mar 24, 2025
e85d256
feat(auth): User ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ
queenriwon Mar 24, 2025
aeffb69
Update issue templates
3uomlkh Mar 24, 2025
639d1c4
Delete .github/ISSUE_TEMPLATE directory
3uomlkh Mar 24, 2025
2688e87
Create feature-request-issue-template.md
3uomlkh Mar 24, 2025
c617c99
feat(auth): Spring Security ์„ค์ •
queenriwon Mar 24, 2025
1d6ab24
feat(auth): ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„
queenriwon Mar 24, 2025
13aefd5
feat(auth): ๋กœ๊ทธ์ธ ๊ตฌํ˜„
queenriwon Mar 24, 2025
ce23291
feat(auth): ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ๊ตฌํ˜„
queenriwon Mar 24, 2025
3e88571
refactor(auth): RefreshToken ํ•„๋“œ๋ช… ๋ณ€๊ฒฝ ๋ฐ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ์‹œ ๋ฉ”์„ธ์ง€ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ
queenriwon Mar 24, 2025
3bbcd85
Merge pull request #3 from team8-nbc/feat/auth
3uomlkh Mar 25, 2025
6bf62bf
feat: Product entity, Category enum, SaleState enum ์ถ”๊ฐ€
Ji-eun1 Mar 25, 2025
dbecbc6
chore(ci) : Gradle ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ตฌ์ถ• #5
3uomlkh Mar 25, 2025
f9d0aa1
fix(ci) : ๋นŒ๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
ab439c3
feat(search): ์ œํ’ˆ ์ „์ฒด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ #7
MythologyDevSeoyeon Mar 25, 2025
683bc60
fix(ci) : CI์šฉ application-ci.yml ์ถ”๊ฐ€ #5
3uomlkh Mar 25, 2025
f435aec
feat(search): ์บ์‹œ ์—†์ด ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ #7
MythologyDevSeoyeon Mar 25, 2025
4d28fcc
feat(user): ํšŒ์›ํƒˆํ‡ด ๊ตฌํ˜„ #9
queenriwon Mar 25, 2025
9304d71
test(auth): AuthServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
77ca670
test(auth): TokenServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
3a58b13
test(user): UserServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
9df9443
fix(global): ์—๋Ÿฌ์ฝ”๋“œ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •
queenriwon Mar 25, 2025
f47878c
fix(auth): ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ADMIN ์œ ์ € ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„
queenriwon Mar 25, 2025
520ec77
fix(ci) : CI์šฉ application-ci.yml ์ถ”๊ฐ€ #5
3uomlkh Mar 25, 2025
ef49092
refactor(ci) : application-ci.yml ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
c1db4d8
Merge pull request #6 from team8-nbc/ci/setup
3uomlkh Mar 25, 2025
5b6a429
feat: ์ œํ’ˆ ์ƒ์„ฑ, ์ œํ’ˆ ๋‹จ๊ฑด ์กฐํšŒ, ์ œํ’ˆ ์ˆ˜์ •, ์ œํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ #4
Ji-eun1 Mar 25, 2025
683f13e
chore: .gitkeep ํŒŒ์ผ ์‚ญ์ œ
Ji-eun1 Mar 25, 2025
95a144f
refactor(ci) : ๋นŒ๋“œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
fa2b1bc
feat(event): admin ๊ถŒํ•œ ์—†์ด CRUD
SuhyeonB Mar 25, 2025
93023cd
Merge pull request #13 from team8-nbc/ci/setup
3uomlkh Mar 25, 2025
67c7297
refactor(auth): Builder ์‚ฌ์šฉ
queenriwon Mar 25, 2025
4626a20
refactor(auth): Builder ์ ์šฉ ๋ฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ enum ๊ด€๋ฆฌ
queenriwon Mar 25, 2025
1d23315
refactor(auth): AuthServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
53beece
refactor(auth): TokenServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
d90625c
refactor(user): UserServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
b9dc4f4
style(user): ์˜คํƒ€ ์ˆ˜์ •
queenriwon Mar 25, 2025
05358b5
Merge pull request #11 from team8-nbc/feat/auth
3uomlkh Mar 25, 2025
83b73ea
fix: findProductByIdOrElseThrow repository ๋กœ ์ด๋™
Ji-eun1 Mar 25, 2025
28b5e1f
feat: ๋ฆฌ๋ทฐ ์ƒ์„ฑ, ๋ฆฌ๋ทฐ ๋‹ค๊ฑด ์กฐํšŒ, ๋ฆฌ๋ทฐ ์ˆ˜์ •, ๋ฆฌ๋ทฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ #12
Ji-eun1 Mar 25, 2025
b0a5003
chore: .gitkeep ํŒŒ์ผ ์‚ญ์ œ
Ji-eun1 Mar 25, 2025
65039b7
feat: Product Validation ๊ธฐ๋Šฅ ์ถ”๊ฐ€ #4
Ji-eun1 Mar 25, 2025
be98451
feat: ์ œํ’ˆ ์‚ญ์ œ ์‹œ ์—ฐ๊ด€ ๋ฆฌ๋ทฐ ๋˜ํ•œ ์ง€์›Œ์ง€๋„๋ก ๊ธฐ๋Šฅ ์ถ”๊ฐ€ #4
Ji-eun1 Mar 25, 2025
b5a04cd
refactor(auth): ValidationMessage ์ž‘์„ฑ
queenriwon Mar 25, 2025
480fa98
feat(search): ์บ์‹œ ์—†์ด ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ #7
MythologyDevSeoyeon Mar 25, 2025
bc0e247
Merge branch 'dev' into feat/search
MythologyDevSeoyeon Mar 26, 2025
a221a66
chore(ci) : Gradle ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๊ตฌ์ถ• #5
3uomlkh Mar 25, 2025
0351fc4
fix(ci) : ๋นŒ๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
512a247
fix(ci) : CI์šฉ application-ci.yml ์ถ”๊ฐ€ #5
3uomlkh Mar 25, 2025
a52d19b
fix(ci) : CI์šฉ application-ci.yml ์ถ”๊ฐ€ #5
3uomlkh Mar 25, 2025
bd83d4b
refactor(ci) : application-ci.yml ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
87e7336
refactor(ci) : ๋นŒ๋“œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋„๋ก ์ˆ˜์ • #5
3uomlkh Mar 25, 2025
b7c6a38
feat(user): ํšŒ์›ํƒˆํ‡ด ๊ตฌํ˜„ #9
queenriwon Mar 25, 2025
4f1709f
test(auth): AuthServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
d6e66f0
test(auth): TokenServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
14ea125
test(user): UserServiceTest ์ž‘์„ฑ #10
queenriwon Mar 25, 2025
ccac781
fix(global): ์—๋Ÿฌ์ฝ”๋“œ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •
queenriwon Mar 25, 2025
b9f7310
fix(auth): ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ADMIN ์œ ์ € ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„
queenriwon Mar 25, 2025
660a1e0
refactor(auth): Builder ์‚ฌ์šฉ
queenriwon Mar 25, 2025
f222d5d
refactor(auth): Builder ์ ์šฉ ๋ฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ enum ๊ด€๋ฆฌ
queenriwon Mar 25, 2025
16c2a81
refactor(auth): AuthServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
a35db2d
refactor(auth): TokenServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
ef9794c
refactor(user): UserServiceTest Builder ์ ์šฉ
queenriwon Mar 25, 2025
ec1e183
style(user): ์˜คํƒ€ ์ˆ˜์ •
queenriwon Mar 25, 2025
c42d2c1
Merge pull request #16 from team8-nbc/feat/auth
3uomlkh Mar 26, 2025
d12466f
chore(search): ํŒŒ์ผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ #7
MythologyDevSeoyeon Mar 26, 2025
d847cbc
Merge branch 'dev' into feat/search
MythologyDevSeoyeon Mar 26, 2025
a5b2557
Merge branch 'feat/search' of github.com:team8-nbc/team8-project intoโ€ฆ
MythologyDevSeoyeon Mar 26, 2025
23776c6
feat(coupon): ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„ ๊ตฌ์„ฑ
SuhyeonB Mar 26, 2025
2220b9b
Merge branch 'dev' of github.com:team8-nbc/team8-project into featureโ€ฆ
SuhyeonB Mar 26, 2025
5a4eec2
feat: ์ œํ’ˆ ์ด๋ฏธ์ง€ ๋“ฑ๋ก ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ #15
Ji-eun1 Mar 26, 2025
a8ba9b8
fix: Product validation ์ˆ˜์ • #4
Ji-eun1 Mar 26, 2025
38162c2
fix: Review validation ์ˆ˜์ •
Ji-eun1 Mar 26, 2025
1b734d2
Merge branch 'dev' into feat/product
Ji-eun1 Mar 26, 2025
3fabaec
chore: ci.yml ๋กœ๊ทธ ์ฐ๋„๋ก ์ˆ˜์ •
Ji-eun1 Mar 26, 2025
23a4aae
refactor: @Setter ์ œ๊ฑฐ ํ›„ setDeletedAt ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
Ji-eun1 Mar 26, 2025
1c10065
refactor: RequestMapping URL ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
575c1b1
refactor: saveProduct ๋ฆฌํ„ด ํƒ€์ž…์„ void ์—์„œ responseDto ๋กœ ๋ณ€๊ฒฝ
Ji-eun1 Mar 27, 2025
7542a5a
refactor: DELETE API ๋ฐ˜ํ™˜๊ฐ’ OK ( 200 ) ์—์„œ N_CONTENT ( 204 ) ๋กœ ๋ณ€๊ฒฝ
Ji-eun1 Mar 27, 2025
0a2e54f
refactor: ResponseEntity ์ƒ์„ฑ ๋ฐฉ์‹ ๊ฐ„์†Œํ™”
Ji-eun1 Mar 27, 2025
3e4da7a
refactor: Validation ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌ
Ji-eun1 Mar 27, 2025
e01e2bc
fix: ์„œ๋น„์Šค ๋‚ด์—์„œ IOException ์ฒ˜๋ฆฌ ํ›„ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ
Ji-eun1 Mar 27, 2025
fa3ab39
feat(coupon): ์ฟ ํฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
SuhyeonB Mar 27, 2025
33790da
fix(product): responseDto ์— ๋นŒ๋” ํŒจํ„ด ์ ์šฉ
Ji-eun1 Mar 27, 2025
80bd384
fix(review): responseDto ์— ๋นŒ๋” ํŒจํ„ด ์ ์šฉ
Ji-eun1 Mar 27, 2025
e21781a
refactor(product): setter ๋Œ€์‹  update ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ
Ji-eun1 Mar 27, 2025
ff7ef42
refactor(review): setter ๋Œ€์‹  update ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ
Ji-eun1 Mar 27, 2025
cfbcde9
refactor(review): pageable ์„ pageRequest ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
90868eb
feat(review): ๋ฆฌ๋ทฐ ๋‹น์‚ฌ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋„๋ก ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
b8e9aaf
feat(productImage): ProductImageUploadException ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ถ”๊ฐ€
Ji-eun1 Mar 27, 2025
1eff5a2
refactor(productImage): setter ๋Œ€์‹  deletedAt ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
e38d56b
refactor(product): setter ๋Œ€์‹  deletedAt ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
96f4e96
refactor(review): setter ๋Œ€์‹  deletedAt ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
c73dc86
refactor(productImage): ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ์„œ๋น„์Šค ๋ ˆ์ด์–ด์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
82b4171
refactor(product): ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ์„œ๋น„์Šค ๋ ˆ์ด์–ด์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
9ec24d8
refactor(review): ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ์„œ๋น„์Šค ๋ ˆ์ด์–ด์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
f96533c
fix(review): JOIN FETCH ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ N+1 ๋ฌธ์ œ ํ•ด๊ฒฐ
Ji-eun1 Mar 27, 2025
5642455
Merge pull request #17 from team8-nbc/feat/product
3uomlkh Mar 27, 2025
be8cd1d
Merge branch 'dev' into feat/search
MythologyDevSeoyeon Mar 27, 2025
bb9ecdc
fix(auth): ๊ถŒํ•œ ์—†์„์‹œ 403์—๋Ÿฌ๋กœ ์‘๋‹ต
queenriwon Mar 27, 2025
ac4485f
Merge branch 'dev' of https://github.com/team8-nbc/team8-project intoโ€ฆ
queenriwon Mar 27, 2025
8133856
fix(auth): ๊ถŒํ•œ ์—†์„์‹œ 403์—๋Ÿฌ๋กœ ์‘๋‹ต
queenriwon Mar 27, 2025
67d0fa7
chore(search): product ๋„๋ฉ”์ธ๊ณผ ๋ณ‘ํ•ฉ #7
MythologyDevSeoyeon Mar 27, 2025
fefd9ec
build(gradle): dotenv ์˜์กด์„ฑ ์ถ”๊ฐ€
Ji-eun1 Mar 27, 2025
83c6796
fix(coupon): ์ˆ˜์ •์š”๊ตฌ ๋ฐ˜์˜
SuhyeonB Mar 27, 2025
56dd281
Merge branch 'dev' into feature/coupon
3uomlkh Mar 27, 2025
3d56d31
Merge pull request #21 from team8-nbc/feat/auth
queenriwon Mar 27, 2025
02578b4
Merge pull request #19 from team8-nbc/feature/coupon
3uomlkh Mar 27, 2025
d0f485b
test(user): ์œ ์ € ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
queenriwon Mar 27, 2025
48c9da1
Merge branch 'dev' of https://github.com/team8-nbc/team8-project intoโ€ฆ
queenriwon Mar 27, 2025
b883239
fix(coupon): ์ˆ˜์ •์š”๊ตฌ ๋ฐ˜์˜ 2
SuhyeonB Mar 27, 2025
460bc80
chore: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ ์šฉ
Ji-eun1 Mar 27, 2025
27b2de1
chore: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ ์šฉ
Ji-eun1 Mar 27, 2025
b95190e
merge: dev ์™€ ๋ณ‘ํ•ฉ
Ji-eun1 Mar 27, 2025
c03db9c
Merge remote-tracking branch 'origin/dev' into feature/coupon
SuhyeonB Mar 27, 2025
40518fd
chore: AWS, JWT ํ™˜๊ฒฝ๋ณ€์ˆ˜ system properties ์ถ”๊ฐ€
Ji-eun1 Mar 27, 2025
1284c31
fix: Redis ๊ด€๋ จ ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ผ๋‹จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ
Ji-eun1 Mar 27, 2025
1e356c3
fix: Redis ๊ด€๋ จ ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ผ๋‹จ ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ
Ji-eun1 Mar 27, 2025
c734800
merge: dev ์™€ ๋ณ‘ํ•ฉ
Ji-eun1 Mar 27, 2025
c5b5c17
fix: redis ๊ด€๋ จ ์—๋Ÿฌ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ ์ฃผ์„ ์ฒ˜๋ฆฌ
Ji-eun1 Mar 27, 2025
f83b519
refactor(product): reauestDto ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋น„์Šค๋‹จ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
747421d
refactor(review): reauestDto ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋น„์Šค๋‹จ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์ˆ˜์ •
Ji-eun1 Mar 27, 2025
f66bbb3
Merge pull request #26 from team8-nbc/feat/env
3uomlkh Mar 27, 2025
55c521e
feat(user): User์—”ํ‹ฐํ‹ฐ์— ์ธ๋ฑ์Šค ์„ค์ •
queenriwon Mar 27, 2025
8a00ef7
refactor(search): ๋ฆฌ๋ทฐ ์ค€ ๋ถ€๋ถ„ ๋ฆฌํŒฉํ† ๋ง #7
MythologyDevSeoyeon Mar 27, 2025
c478b2c
Merge branch 'dev' into feat/product
3uomlkh Mar 27, 2025
cc9ad9b
Merge pull request #27 from team8-nbc/feat/product
3uomlkh Mar 27, 2025
efe752b
Merge pull request #23 from team8-nbc/feat/search
3uomlkh Mar 27, 2025
114fdb3
fix: Redis ๊ด€๋ จ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์„์ฒ˜๋ฆฌ
Ji-eun1 Mar 27, 2025
dfcf335
test(product): ์ œํ’ˆ ๋‹จ๊ฑด ์กฐํšŒ ๋ฐ ์ œํ’ˆ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
Ji-eun1 Mar 27, 2025
fc83cf1
merge: dev ์™€ ๋ณ‘ํ•ฉ
Ji-eun1 Mar 27, 2025
f86fa21
chore: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ AWS_ACCESS_KEY, AWS_SECRET_KEY ๋ฅผ S3_ACCESS_KEY, S3_SECREโ€ฆ
Ji-eun1 Mar 27, 2025
7f6b901
fix(search): ๊ฒ€์ƒ‰ ๋กœ๊ทธ ์ €์žฅ ์‹œ readOnly ํŠธ๋žœ์žญ์…˜ ์˜ค๋ฅ˜ ์ˆ˜์ • #29
MythologyDevSeoyeon Mar 27, 2025
9100e2a
test(product): ์ œํ’ˆ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
queenriwon Mar 27, 2025
a81794d
Merge branch 'dev' of https://github.com/team8-nbc/team8-project intoโ€ฆ
queenriwon Mar 27, 2025
92daf1a
fix(search): Redis๋กœ ์บ์‹œ ๋ณ€๊ฒฝ #29
MythologyDevSeoyeon Mar 27, 2025
7ca3ea6
feat(search): ์ œํ’ˆ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ตœ์ ํ™”
queenriwon Mar 27, 2025
c683020
test(product): ์ œํ’ˆ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ #28
Ji-eun1 Mar 28, 2025
e698d60
feat(coupon) lock ์ ์šฉ
SuhyeonB Mar 28, 2025
520a8f1
fix(coupon) merge ์ถฉ๋Œ ํ•ด๊ฒฐ
SuhyeonB Mar 28, 2025
0e010b5
test(review): ๋ฆฌ๋ทฐ CRUD ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ #28
Ji-eun1 Mar 28, 2025
37e3d92
test(productImage): mock ์ฃผ์ž… #28
Ji-eun1 Mar 28, 2025
8ca619d
config: Redis ํ˜ธ์ŠคํŠธ์™€ S3 ๋ฒ„ํ‚ท ์ •๋ณด env ํŒŒ์ผ์— ์ถ”๊ฐ€
Ji-eun1 Mar 28, 2025
52ab70f
Merge pull request #30 from team8-nbc/feat/search
3uomlkh Mar 28, 2025
83937ef
Merge branch 'dev' of https://github.com/team8-nbc/team8-project intoโ€ฆ
queenriwon Mar 28, 2025
1281c85
fix(search): ๋”๋ฏธ๋ฐ์ดํ„ฐ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜
queenriwon Mar 28, 2025
a775d9d
test(search): CI ๋นŒ๋“œ ์‹คํŽ˜ ํ…Œ์ŠคํŠธ
queenriwon Mar 28, 2025
9ca8c6e
test(search): CI ๋นŒ๋“œ ํ…Œ์ŠคํŠธ - ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๋”๋ฏธ๋ฐ์ดํ„ฐ
queenriwon Mar 28, 2025
b5b571c
test(search): CI ๋นŒ๋“œ ํ…Œ์ŠคํŠธ - @ActiveProfiles("ci")
queenriwon Mar 28, 2025
16f521c
test(search): CI ๋นŒ๋“œ ํ…Œ์ŠคํŠธ - application-local.yml ์ž‘์„ฑ
queenriwon Mar 28, 2025
c61e63e
test(search): CI ๋นŒ๋“œ ํ…Œ์ŠคํŠธ - application-local.yml ์ž‘์„ฑ
queenriwon Mar 28, 2025
d06e44b
Merge pull request #32 from team8-nbc/feat/indexing
3uomlkh Mar 28, 2025
2a4bc3a
feat(search): ์‹ค์‹œ๊ฐ„ ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ #31
MythologyDevSeoyeon Mar 28, 2025
cc78153
test(productImage): ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฏธ์ง€ ์‚ญ์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ #28
Ji-eun1 Mar 28, 2025
081e6a8
fix(product): ์ œํ’ˆ ์กฐํšŒ ์ฟผ๋ฆฌ ์ˆ˜์ • #31
MythologyDevSeoyeon Mar 28, 2025
06ea779
merge: dev ์™€ ๋ณ‘ํ•ฉ
Ji-eun1 Mar 28, 2025
e4caf73
test(product): ์ œํ’ˆ ์ƒ์„ฑ ๋ฐ ์ œํ’ˆ ์ˆ˜์ • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ • #28
Ji-eun1 Mar 28, 2025
000e65b
refactor: Redis ๊ด€๋ จ ์ฃผ์„ ํ•ด์ œ
Ji-eun1 Mar 28, 2025
9dea156
fix(coupon) rlock ์ ์šฉ
SuhyeonB Mar 28, 2025
fd6ef99
Merge pull request #33 from team8-nbc/feat/search
3uomlkh Mar 28, 2025
c038d7c
fix(coupon) rlock ์ ์šฉ
SuhyeonB Mar 28, 2025
e537d48
Merge pull request #35 from team8-nbc/feature/coupon
3uomlkh Mar 28, 2025
f97f111
refactor: KEY ๋ช…์นญ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
337b1c8
refactor(search): ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ณ€๊ฒฝ #36
MythologyDevSeoyeon Mar 28, 2025
16fabe3
refactor(global): deletedAt ์ˆ˜์ •
queenriwon Mar 28, 2025
ed74c7f
merge: dev ์™€ ๋ณ‘ํ•ฉ
Ji-eun1 Mar 28, 2025
98888be
Merge pull request #37 from team8-nbc/feat/indexing
3uomlkh Mar 28, 2025
9fae290
Merge branch 'dev' into test/product-productImage-review
Ji-eun1 Mar 28, 2025
1d1f14f
refactor(product): update ์ด๋ฆ„ ifNotNull ๋ถ™์—ฌ์„œ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
609fb78
refactor(review): update ์ด๋ฆ„ ifNotNull ๋ถ™์—ฌ์„œ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
e580188
refactor(product): find, get ์ด๋ฆ„ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
c9e2a67
refactor(review): find, get ์ด๋ฆ„ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
96b5528
refactor(product): category, salestate enums ๋„๋ฉ”์ธ ๋”ฐ๋กœ ๊ด€๋ฆฌ
Ji-eun1 Mar 28, 2025
c41b4a0
refactor(search): ๋ถˆํ•„์š”ํ•œ DB ์ œ๊ฑฐ #36
MythologyDevSeoyeon Mar 28, 2025
f7800fb
feat(review): findReviews ์—”๋“œํฌ์ธํŠธ ํ™•์žฅ์„ฑ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ
Ji-eun1 Mar 28, 2025
843c9aa
refactor(product): ๊ณต๋ฐฑ ์ œ๊ฑฐ
Ji-eun1 Mar 28, 2025
b787710
refactor(review): ๊ณต๋ฐฑ ์ œ๊ฑฐ
Ji-eun1 Mar 28, 2025
b892440
refactor(global): ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
queenriwon Mar 28, 2025
b4fc06b
Merge branch 'dev' of https://github.com/team8-nbc/team8-project intoโ€ฆ
queenriwon Mar 28, 2025
c2d30de
refactor(global): ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
queenriwon Mar 28, 2025
eff7f86
refactor(global): ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํ…Œ์ŠคํŠธ
queenriwon Mar 28, 2025
d2b6224
refactor(config): S3 ์„ค์ • ์ •๋ฆฌ ๋ฐ application yml ๊ตฌ์กฐ ๊ฐœ์„ 
3uomlkh Mar 28, 2025
23f4500
refactor(global): ๋”๋ฏธ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ˆ˜์ •
queenriwon Mar 28, 2025
80f2c34
refactor(coupon) event โ†’ coupon, coupon โ†’ issuedCoupon ๋ฆฌํŒฉํ† ๋ง
SuhyeonB Mar 29, 2025
d0206a2
refactor(issuedCoupon) ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
SuhyeonB Mar 29, 2025
afab07c
refactor(issuedCoupon) ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
SuhyeonB Mar 29, 2025
78bc89e
refactor(issuedCoupon) api ์ˆ˜์ •
SuhyeonB Mar 29, 2025
2038dbb
fix(product): ๋ฆฌํŒฉํ† ๋ง ์ค‘ ๋ฐœ๊ฒฌ๋œ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ •
Ji-eun1 Mar 29, 2025
b30f7e9
fix(productImage): ๋ฆฌํŒฉํ† ๋ง ์ค‘ ๋ฐœ๊ฒฌ๋œ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ •
Ji-eun1 Mar 29, 2025
a3e6c5b
fix(review): ๋ฆฌํŒฉํ† ๋ง ์ค‘ ๋ฐœ๊ฒฌ๋œ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ •
Ji-eun1 Mar 29, 2025
dbcd514
feat(product): ์ œํ’ˆ ๋‹จ๊ฑด ์กฐํšŒ ์‹œ productImageList ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
Ji-eun1 Mar 29, 2025
7ad2d7b
fix(product): productImageList ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ํ›„ ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ •
Ji-eun1 Mar 29, 2025
7e7bbe0
merge: pull request #34 from team8-nbc/test/product-productImage-review
ijieun0123 Mar 29, 2025
29e901d
fix(product): ์ œํ’ˆ ์ด๋ฏธ์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ •
3uomlkh Mar 29, 2025
13761c8
Merge pull request #41 from team8-nbc/ci/setup
3uomlkh Mar 29, 2025
6950cf6
Merge pull request #39 from team8-nbc/feat/indexing
3uomlkh Mar 29, 2025
aebed81
Merge pull request #43 from team8-nbc/feature/coupon
3uomlkh Mar 29, 2025
5c7b4ff
chore(cd): CD ์„ค์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์ค€๋น„ #18
3uomlkh Mar 29, 2025
65d6f29
chore(config): S3์™€ Redis ์„ค์ • ๊ฐ’ ์™ธ๋ถ€ ์ฃผ์ž…์œผ๋กœ ๋ณ€๊ฒฝ #18
3uomlkh Mar 29, 2025
a41c34d
Merge branch 'dev' into feat/search
MythologyDevSeoyeon Mar 29, 2025
f6200a2
hotfix(config): ๋กœ์ปฌ ์‹คํ–‰ ์˜ค๋ฅ˜ ๋ฐ ํ™˜๊ฒฝ์„ค์ • ๊ธด๊ธ‰ ์ˆ˜์ •
3uomlkh Mar 30, 2025
d991f36
Merge branch 'dev' into cd/setup
3uomlkh Mar 30, 2025
ddce9d4
chore(cd): ๋ฐฐํฌ ์„ฑ๊ณต ๋ฐ ์‹คํŒจ ์—ฌ๋ถ€ ํ™•์ธ ์Šฌ๋ž™ ์•Œ๋ฆผ ์ถ”๊ฐ€ #18
3uomlkh Mar 30, 2025
60e9bf9
chore(cd): application-prod.yml ํŒŒ์ผ ์ถ”๊ฐ€ #18
3uomlkh Mar 30, 2025
4da6c78
Merge branch 'dev' into feat/search
MythologyDevSeoyeon Mar 30, 2025
642fa2c
Merge pull request #47 from team8-nbc/cd/setup
3uomlkh Mar 30, 2025
cd84ec5
Merge pull request #45 from team8-nbc/feat/search
3uomlkh Mar 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/feature-request-issue-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: Feature Request Issue Template
about: Suggest an idea for this project
title: "[FEATURE] OOO๊ธฐ๋Šฅ ๊ตฌํ˜„"
labels: ''
assignees: ''

---

## ๐Ÿ“ Issue
> ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

---

## ๐Ÿ“„ ์„ค๋ช…

- ๊ธฐ๋Šฅ
- ๊ธฐ๋Šฅ
- ๊ธฐ๋Šฅ

---

## โœ… ์ž‘์—…ํ•  ๋‚ด์šฉ
- [ ] ํ• ์ผ
- [ ] ํ• ์ผ
- [ ] ํ• ์ผ
- [ ] ํ• ์ผ

---

## ๐Ÿ™‹๐Ÿป ์ฐธ๊ณ  ์ž๋ฃŒ
> ๊ด€๋ จ ๋ฌธ์„œ๋‚˜ ์ฐธ๊ณ  ๋งํฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ ์–ด์ฃผ์„ธ์š”.
24 changes: 0 additions & 24 deletions .github/ISSUE_TEMPLATE/feature_request.yml

This file was deleted.

122 changes: 122 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Deploy to EC2

on:
push:
branches: [ main ]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Docker Build
run: docker build -t eightyage .

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: ap-northeast-2

- name: ECR Login
run: |
aws ecr get-login-password | \
docker login --username AWS --password-stdin ${{ secrets.ECR_URI }}

- name: Docker Images Check
run: docker images

- name: ECR Push
run: |
docker tag eightyage:latest ${{ secrets.ECR_URI }}
docker push ${{ secrets.ECR_URI }}

- name: Deploy on EC2
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.EC2_HOST }}
username: ubuntu
key: ${{ secrets.EC2_SSH_KEY }}
envs: ECR_URI,DB_URL,DB_USER,DB_PASSWORD,JWT_SECRET_KEY,AWS_ACCESS_KEY,AWS_SECRET_KEY,REDIS_HOST

script: |
export ECR_URI=${{ secrets.ECR_URI }}
export DB_URL=${{ secrets.DB_URL }}
export DB_USER=${{ secrets.DB_USER }}
export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
export JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
export AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
export AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
export REDIS_HOST=${{ secrets.REDIS_HOST }}

docker ps -q --filter ancestor=$ECR_URI | xargs -r docker stop
docker ps -aq --filter ancestor=$ECR_URI | xargs -r docker rm

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $ECR_URI
docker pull $ECR_URI
docker run -d -p 8080:8080 \
-e DB_URL=$DB_URL \
-e DB_USER=$DB_USER \
-e DB_PASSWORD=$DB_PASSWORD \
-e JWT_SECRET_KEY=$JWT_SECRET_KEY \
-e AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
-e AWS_SECRET_KEY=$AWS_SECRET_KEY \
-e REDIS_HOST=$REDIS_HOST \
$ECR_URI

- name: Health Check
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.EC2_HOST }}
username: ubuntu
key: ${{ secrets.EC2_SSH_KEY }}
script: |
for i in {1..10}; do
echo "โณ Health check attempt $i..."
if curl -f http://localhost:8080/actuator/health; then
echo "โœ… Health check succeeded!"
exit 0
fi
sleep 5
done
echo "โŒ Health check failed after multiple attempts"
exit 1

- name: Notify Slack - ๋ฐฐํฌ ์„ฑ๊ณต
if: success()
run: |
curl -X POST -H 'Content-type: application/json' \
--data '{
"text": "โœ… *๋ฐฐํฌ ์„ฑ๊ณต!* ๐ŸŽ‰",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*โœ… ๋ฐฐํฌ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค!*\n\n*๋ธŒ๋žœ์น˜:* `${{ github.ref_name }}`\n<http://3.39.158.229:8080/actuator/health|๐Ÿ”— ๋ฐฐํฌ๋œ ์„œ๋น„์Šค ์ƒํƒœ ๋ณด๊ธฐ>"
}
}
]
}' \
${{ secrets.SLACK_WEBHOOK_URL }}

- name: Notify Slack - ๋ฐฐํฌ ์‹คํŒจ
if: failure()
run: |
curl -X POST -H 'Content-type: application/json' \
--data '{
"text": "โŒ *๋ฐฐํฌ ์‹คํŒจ!* ๐Ÿ”ฅ",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*โŒ ๋ฐฐํฌ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค!*\n\n*๋ธŒ๋žœ์น˜:* `${{ github.ref_name }}`\n<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|๐Ÿ”— ์‹คํŒจ ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ>"
}
}
]
}' \
${{ secrets.SLACK_WEBHOOK_URL }}
54 changes: 54 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Java CI with Gradle

on:
pull_request:
branches: [ "dev", "main" ] # dev, main ๋ชจ๋‘ PR ๋Œ€์ƒ

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest

services:
mysql:
image: mysql:8.0 # MySQL ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ
env:
MYSQL_ROOT_PASSWORD: root # Docker ๋‚ด๋ถ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ง€์ •
MYSQL_DATABASE: team8_test # Docker ๋‚ด๋ถ€ DB ์ด๋ฆ„
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping --silent" --health-interval=10s --health-timeout=5s --health-retries=3

steps:
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Wait for MySQL to be ready
run: |
for i in {1..10}; do
if mysql -hmysql -P3306 -uroot -proot -e "SELECT 1"; then
echo "MySQL is up!"
break
fi
echo "Waiting for MySQL..."
sleep 5
done

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew

- name: Clean Gradle Cache
run: ./gradlew clean --refresh-dependencies

- name: Test And Build with Gradle
env:
JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}
run: ./gradlew build -Dspring.profiles.active=ci

5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ Thumbs.db
.env

# Spring Boot application properties/yaml
application-*.yml
application-*.properties
#application-*.yml
#application-*.properties

# AWS config
.aws/

12 changes: 12 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM gradle:8.6-jdk17 AS build
WORKDIR /app
COPY . .
RUN gradle clean build -x test

FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app

COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080

ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "app.jar"]
25 changes: 24 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,34 @@ dependencies {
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// spring security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

// jwt
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

// cache
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'

// spring cloud AWS S3
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3:3.3.0'

// env
implementation 'io.github.cdimascio:java-dotenv:5.2.2'

// redis & redisson
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.redisson:redisson:3.23.5'

testImplementation 'org.mockito:mockito-inline:5.2.0'

implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

tasks.named('test') {
Expand Down
Empty file modified gradlew
100644 โ†’ 100755
Empty file.
6 changes: 6 additions & 0 deletions src/main/java/com/example/eightyage/EightyageApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
import org.springframework.scheduling.annotation.EnableScheduling;

import static org.springframework.data.web.config.EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO;

@EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)
@SpringBootApplication
@EnableScheduling
public class EightyageApplication {

public static void main(String[] args) {
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.example.eightyage.domain.auth.controller;

import com.example.eightyage.domain.auth.dto.request.AuthSigninRequestDto;
import com.example.eightyage.domain.auth.dto.request.AuthSignupRequestDto;
import com.example.eightyage.domain.auth.dto.response.AuthAccessTokenResponseDto;
import com.example.eightyage.domain.auth.dto.response.AuthTokensResponseDto;
import com.example.eightyage.domain.auth.service.AuthService;
import com.example.eightyage.global.annotation.RefreshToken;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;

import static com.example.eightyage.domain.user.userrole.UserRole.Authority.ADMIN;
import static com.example.eightyage.domain.user.userrole.UserRole.Authority.USER;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class AuthController {

private final AuthService authService;
private static final int REFRESH_TOKEN_TIME = 7 * 24 * 60 * 60; // 7์ฃผ์ผ

/* ํšŒ์›๊ฐ€์ž… */
@PostMapping("/v1/auth/signup")
public AuthAccessTokenResponseDto signup(
@Valid @RequestBody AuthSignupRequestDto request,
HttpServletResponse httpServletResponse
) {
AuthTokensResponseDto tokensResponseDto = authService.signup(request);

setRefreshTokenCookie(httpServletResponse, tokensResponseDto.getRefreshToken());

return new AuthAccessTokenResponseDto(tokensResponseDto.getAccessToken());
}

/* ๋กœ๊ทธ์ธ */
@PostMapping("/v1/auth/signin")
public AuthAccessTokenResponseDto signin(
@Valid @RequestBody AuthSigninRequestDto request,
HttpServletResponse httpServletResponse
) {
AuthTokensResponseDto tokensResponseDto = authService.signin(request);

setRefreshTokenCookie(httpServletResponse, tokensResponseDto.getRefreshToken());

return new AuthAccessTokenResponseDto(tokensResponseDto.getAccessToken());
}

/* ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ (๋กœ๊ทธ์ธ ๊ธฐ๊ฐ„ ์—ฐ์žฅ) */
@Secured({USER, ADMIN})
@GetMapping("/v1/auth/refresh")
public AuthAccessTokenResponseDto refresh(
@RefreshToken String refreshToken,
HttpServletResponse httpServletResponse
) {
AuthTokensResponseDto tokensResponseDto = authService.reissueAccessToken(refreshToken);

setRefreshTokenCookie(httpServletResponse, tokensResponseDto.getRefreshToken());

return new AuthAccessTokenResponseDto(tokensResponseDto.getAccessToken());
}

/* http only ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค์— refreshToken ์ €์žฅ */
private void setRefreshTokenCookie(HttpServletResponse response, String refreshToken) {
Cookie cookie = new Cookie("refreshToken", refreshToken);
cookie.setMaxAge(REFRESH_TOKEN_TIME);
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/");

response.addCookie(cookie);
}


}
Empty file.
Loading