Skip to content

Commit 8244d33

Browse files
authored
Merge pull request #415 from EAT-SSU/develop
[RELEASE] v2.2.9 ๋„๋ฉ”์ธ๋ณ„ Claude Code rule ํŒŒ์ผ ์„ธํŒ…
2 parents 30b5016 + 6c96bf3 commit 8244d33

13 files changed

Lines changed: 135 additions & 1 deletion

File tree

โ€Ž.claude/rules/admin.mdโ€Ž

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/admin/**/*.java"
4+
---
5+
6+
# Admin Domain Notes
7+
8+
- admin์€ ๋ณ„๋„ ์ธ์ฆ ์ฒด๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ API์™€ ๋™์ผํ•œ JWT(`ROLE_ADMIN`)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์„œ๋ฒ„ ๋ Œ๋”๋ง UI๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ๊ณผ ๋™์ผํ•œ `@ResponseBody` JSON API๋‹ค.
9+
- admin ํŒจํ‚ค์ง€๋Š” ๋‹ค๋ฅธ ๋„๋ฉ”์ธ(`review`, `menu` ๋“ฑ)์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ทธ ๋„๋ฉ”์ธ์˜ ์„œ๋น„์Šค/๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  `domain/admin/persistence`์˜ ์ž์ฒด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ง์ ‘ ์กฐํšŒ/์ˆ˜์ •ํ•œ๋‹ค. ์ด๋Š” ์ด ๋„๋ฉ”์ธ์˜ ์˜๋„๋œ ์ปจ๋ฒค์…˜์ด๋ฉฐ, ์ƒˆ admin ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋„ ์ด ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค.
10+
- ๋ฆฌ๋ทฐ ์‚ญ์ œ ์‹œ ์—ฐ๊ด€ ๋ฆฌํฌํŠธ ์‚ญ์ œ๋Š” `ApplicationEventPublisher`๋กœ ๋ฐœํ–‰๋˜๋Š” `ReviewDeleteEvent`๋ฅผ `ReportEventListener`๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ(`@TransactionalEventListener`๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ `@EventListener`) ์ฒ˜๋ฆฌํ•œ๋‹ค.
11+
- `ManageInquiryService`๋Š” `inquiry` ๋„๋ฉ”์ธ์˜ `InquiryStatus` ์ „์ด๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [[inquiry]] ์ฐธ๊ณ .

โ€Ž.claude/rules/auth.mdโ€Ž

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/auth/**/*.java"
4+
---
5+
6+
# Auth Domain Notes
7+
8+
- Access/refresh ํ† ํฐ์ด ํด๋ ˆ์ž„ ๊ตฌ์กฐ์ƒ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค(`token_type` ํด๋ ˆ์ž„ ์—†์Œ). `JwtTokenProvider`์˜ `validateToken`/`getAuthentication`์€ refresh ํ† ํฐ๋„ access ํ† ํฐ ์ž๋ฆฌ์—์„œ ๊ทธ๋Œ€๋กœ ํ†ต๊ณผ์‹œํ‚จ๋‹ค.
9+
- Public ์—”๋“œํฌ์ธํŠธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋Š” `SecurityConfig.AUTH_WHITELIST`/`RESOURCE_LIST`์™€ `JwtAuthenticationFilter.AUTH_WHITELIST` ๋‘ ๊ณณ์— ์ค‘๋ณต ๊ด€๋ฆฌ๋œ๋‹ค. ์ƒˆ public ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋‘ ๊ณณ์„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•œ๋‹ค.
10+
- OAuth ๋กœ๊ทธ์ธ์˜ "๋น„๋ฐ€๋ฒˆํ˜ธ"๋Š” `provider + providerId`๋ฅผ BCrypt ํ•ด์‹œํ•œ ๊ฐ’์ด๋‹ค(`UserService.createCredentials`/`OAuthService.makeOauthCredentials`). ์ด ์กฐํ•ฉ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ธฐ์กด ์œ ์ € ์ „์›์ด ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
11+
- ๋™์ผ ์ด๋ฉ”์ผ๋กœ ๋‹ค๋ฅธ provider(Kakao/Apple)๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด `findFirstByEmailOrderByIdAsc`๋กœ ๊ธฐ์กด ๊ณ„์ •์— ์กฐ์šฉํžˆ ํ•ฉ์ณ์ง„๋‹ค(์ฝ”๋“œ ๋‚ด FIXME๋กœ ๋ช…์‹œ๋œ known issue). `users` ํ…Œ์ด๋ธ”์— email unique ์ œ์•ฝ์€ ์—†๋‹ค.
12+
- Apple ์ด๋ฉ”์ผ ๋ฆด๋ ˆ์ด ๊ฐ์ง€(`OAuthService.isHideEmail`)๋Š” `@privaterelay.appleid.com` ์ ‘๋ฏธ์‚ฌ + ๊ธธ์ด 25์ž ์ดˆ๊ณผ๋ผ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์กฐ๊ฑด์— ์˜์กดํ•œ๋‹ค.
13+
- V1(`/oauths/kakao`, `/oauths/apple`)๊ณผ V2(`/oauths/v2/kakao`, `/oauths/v2/apple`)๊ฐ€ ๊ณต์กดํ•˜๋ฉฐ V1์€ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ดํ›„ ์‚ญ์ œ ์˜ˆ์ •์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ƒˆ ๊ธฐ๋Šฅ์€ V2 ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
14+
- CORS๋Š” `addAllowedOriginPattern("*")` + `setAllowCredentials(true)`๋กœ ๋ชจ๋“  ์ถœ์ฒ˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

โ€Ž.claude/rules/inquiry.mdโ€Ž

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/inquiry/**/*.java"
4+
- "src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java"
5+
---
6+
7+
# Inquiry Domain Notes
8+
9+
- `InquiryController`(๋ฌธ์˜ ์ž‘์„ฑ API)๋Š” `@Deprecated`๋‹ค. ๋ฌธ์˜ ๊ธฐ๋Šฅ์ด ์นด์นด์˜คํ†ก์œผ๋กœ ์ด์ „๋˜์–ด ๋”๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ์ฝ”๋“œ๋Š” ์•„์ง ๋‚จ์•„ ๋™์ž‘ํ•œ๋‹ค. ์ƒˆ ๊ธฐ๋Šฅ์„ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
10+
- ๋ฌธ์˜ ์ƒํƒœ(`InquiryStatus`: WAITING/ANSWERED/HOLD) ์ „์ด๋Š” `inquiry` ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹ˆ๋ผ `domain/admin`(`ManageInquiryService`)์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. `InquiryStatus`๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด admin ํŒจํ‚ค์ง€๋„ ํ•จ๊ป˜ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. `ManageInquiryService`๊ฐ€ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ์ง€๋ฉด ์œ„ `paths`๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•  ๊ฒƒ.

โ€Ž.claude/rules/menu.mdโ€Ž

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/menu/**/*.java"
4+
---
5+
6+
# Menu Domain Notes
7+
8+
- `Menu`์—๋Š” ์ด๋ฆ„์ด ์žˆ๊ณ  `Meal`์—๋Š” ์—†๋‹ค. VARIABLE ํƒ€์ž…(`Menu.createVariable`) ๋ฉ”๋‰ด๋Š” `(name, restaurant)` ๊ธฐ์ค€์œผ๋กœ get-or-create๋˜์–ด ์—ฌ๋Ÿฌ `Meal`์—์„œ `MealMenu`๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ๋œ๋‹ค โ€” Meal๋งˆ๋‹ค ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
9+
- i18n ์ปฌ๋Ÿผ(`name_en`/`name_ja`/`name_vi`)์€ `Menu`์—๋งŒ ์žˆ๊ณ  `Meal`/`MealMenu`/`MenuCategory`์—๋Š” ์—†๋‹ค. ๊ทธ๋งˆ์ €๋„ SNACK_CORNER ๋ฉ”๋‰ด๋งŒ ์ฑ„์›Œ์ ธ ์žˆ๊ณ  FOOD_COURT๋‚˜ VARIABLE๋กœ ์ƒ์„ฑ๋œ ๋ฉ”๋‰ด๋Š” ๋น„์–ด ์žˆ๋‹ค. `MealController`๋Š” Language๋ฅผ ์•„์˜ˆ ๋ฐ›์ง€ ์•Š์•„ ๋ณ€๋™ ์‹๋‹จ ๋ฉ”๋‰ด๋ช…์€ ํ•ญ์ƒ ํ•œ๊ตญ์–ด๋กœ ๋‚˜๊ฐ„๋‹ค.
10+
- `Restaurant.FACULTY`๋Š” `MenuType`/`RestaurantType`์˜ FIXED/VARIABLE ์–ด๋А ๋ถ„๋ฅ˜์—๋„ ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒ€์ฆ ๋กœ์ง(`validateMenuRestaurant`/`validateMealRestaurant`)์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์ด๋ผ ์ƒˆ restaurant enum ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ถ„๋ฅ˜ ๋ˆ„๋ฝ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
11+
- Meal ์žฌ์กฐํšŒ/์ค‘๋ณต ๋ฐฉ์ง€(`getExistingMealId`)๋Š” ๊ฐ™์€ date/timePart/restaurant์—์„œ ๋ฉ”๋‰ด ์ด๋ฆ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•ด ๋ฌธ์ž์—ด๋กœ ์ •ํ™•ํžˆ ๋น„๊ตํ•œ๋‹ค. ๊ณต๋ฐฑ/์˜คํƒˆ์ž ํ•˜๋‚˜๋งŒ ๋‹ฌ๋ผ๋„ ๋ณ„๋„ Meal๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
12+
- `menu/persistence`์˜ `Querydsl*Rating*` ํด๋ž˜์Šค๋“ค์€ `rating` ๋„๋ฉ”์ธ์˜ ๋ณ„์  ์ง‘๊ณ„๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [[rating]] ์ฐธ๊ณ .
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/partnership/**/*.java"
4+
---
5+
6+
# Partnership Domain Notes
7+
8+
- `PartnershipRestaurant`(๊ฐ€๊ฒŒ, ๋ถ€๋ชจ)์™€ `Partnership`(๊ฐœ๋ณ„ ํ˜œํƒ, ์ž์‹)์€ 1:N ๊ด€๊ณ„๋‹ค. `PartnershipLike`๋Š” ๊ฐœ๋ณ„ ํ˜œํƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ€๊ฒŒ ๋‹จ์œ„๋กœ ๋ถ™๋Š”๋‹ค.
9+
- `Partnership` ์—”ํ‹ฐํ‹ฐ์— `@Where(clause = "end_date >= CURRENT_DATE")`๊ฐ€ ๊ฑธ๋ ค ์žˆ์–ด `findById`๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  JPA ์กฐํšŒ๊ฐ€ ๋งŒ๋ฃŒ๋œ ํ˜œํƒ์„ ์ž๋™์œผ๋กœ ์ˆจ๊ธด๋‹ค. ๋งŒ๋ฃŒ๋œ partnership์„ `findById`๋กœ ์ฐพ์œผ๋ฉด "๋งŒ๋ฃŒ๋จ"์ด ์•„๋‹ˆ๋ผ "์ฐพ์„ ์ˆ˜ ์—†์Œ"์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•œ๋‹ค.
10+
- `PeriodType.FESTIVAL`์€ `CreatePartnershipRequest`์— ํ•„๋“œ๊ฐ€ ์—†์–ด API๋กœ๋Š” ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค. FESTIVAL ํ˜œํƒ์€ ํ˜„์žฌ DB๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•ด์•ผ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
11+
- ์•ฑ API๋กœ ์ƒ์„ฑํ•œ `Partnership`/`PartnershipRestaurant`๋Š” i18n ํ•„๋“œ(`description_en/ja/vi`, `store_name_en/ja/vi`)๊ฐ€ ์ฑ„์›Œ์ง€์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ด ํ•„๋“œ๋“ค์€ ์ „๋ถ€ ๋ณ„๋„ flyway ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์œผ๋กœ๋งŒ ์ฑ„์›Œ์กŒ๋‹ค.
12+
- ์ข‹์•„์š” ์ˆ˜(`likeCount`)๋Š” ์›์ž์  ์นด์šดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋กœ๋“œ๋œ ์ปฌ๋ ‰์…˜์˜ `size()`๋กœ ๊ณ„์‚ฐ๋˜๊ณ , ์ข‹์•„์š” ํ† ๊ธ€๋„ ์ž ๊ธˆ ์—†๋Š” read-check-write ๋ฐฉ์‹์ด๋‹ค. ๋™์‹œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ •ํ•ฉ์„ฑ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โ€Ž.claude/rules/rating.mdโ€Ž

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/rating/**/*.java"
4+
- "src/main/java/ssu/eatssu/domain/menu/persistence/*Rating*.java"
5+
- "src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java"
6+
---
7+
8+
# Rating Domain Notes
9+
10+
- ๋ณ„์  ์ง‘๊ณ„๋Š” ๋งค ์กฐํšŒ๋งˆ๋‹ค DB์—์„œ `AVG()`/`COUNT()`๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค(์บ์‹œ๋‚˜ ๋น„์ •๊ทœํ™”๋œ ์ง‘๊ณ„ ํ•„๋“œ ์—†์Œ). `QuerydslMealRatingCalculator`/`QuerydslMenuRatingCalculator`/`QuerydslMealRatingCounter`/`QuerydslMenuRatingCounter`(`menu/persistence`)์™€ ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” `ReviewRatingService`(`review/service`, `RatingCalculator` ๊ตฌํ˜„์ฒด)๊ฐ€ ์‹ค์ œ ์‚ฌ์šฉ ๊ฒฝ๋กœ๋‹ค. ์ด ํŒŒ์ผ๋“ค์ด ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ์ง€๊ฑฐ๋‚˜ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋ฉด ์œ„ `paths`๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•  ๊ฒƒ.
11+
- `rating/entity`์˜ `JpaLoadCollectionRatingCalculator`, `JpaProjectionRatingCalculator`, `ReviewRating`, `RatingCountMap`์€ ๋ฒค์น˜๋งˆํฌ์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ๋‹ค. ํŠนํžˆ `ReviewRating`์€ enum์„ mutable singleton์œผ๋กœ ์‚ฌ์šฉํ•ด ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜์ง€ ์•Š์œผ๋‹ˆ, ๋˜์‚ด๋ ค์„œ ์“ฐ์ง€ ๋ง ๊ฒƒ.
12+
- `amountRating`/`tasteRating`์€ ๊ฐ’์ด ์žˆ์–ด๋„ ์‘๋‹ต DTO์—์„œ ์„ธํŒ…๋˜์ง€ ์•Š์•„ ํ•ญ์ƒ null๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค. `Ratings.java`์˜ FIXME(2026-07-04)์— ์ด ํ•„๋“œ๋“ค์˜ ํ•„์ˆ˜ ์—ฌ๋ถ€๊ฐ€ ์•„์ง ๋น„์ฆˆ๋‹ˆ์Šค์ ์œผ๋กœ ๋ฏธ์ •์ž„์ด ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋‹ˆ, ๊ณ ์น  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๋ถ€ํ„ฐ ํ™•์ธํ•œ๋‹ค.

โ€Ž.claude/rules/report.mdโ€Ž

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/report/**/*.java"
4+
- "src/main/java/ssu/eatssu/domain/review/entity/Report.java"
5+
---
6+
7+
# Report Domain Notes
8+
9+
- `Report` ์—”ํ‹ฐํ‹ฐ๋Š” `report` ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹ˆ๋ผ `review.entity.Report`์— ์žˆ๋‹ค. `ReportType`/`ReportStatus`/์„œ๋น„์Šค/์ปจํŠธ๋กค๋Ÿฌ๋งŒ `report` ํŒจํ‚ค์ง€์— ์žˆ๋‹ค. ์ด ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋กœ ์˜ฎ๊ฒจ์ง€๋ฉด ์œ„ `paths`๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•  ๊ฒƒ.
10+
- ์‹ ๊ณ  ์ ‘์ˆ˜๋Š” Slack ์•Œ๋ฆผ(`SlackChannel.REPORT_CHANNEL`)๋งŒ ๋ณด๋‚ผ ๋ฟ, ๋ฆฌ๋ทฐ๋ฅผ ์ž๋™์œผ๋กœ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋“ฑ์˜ ํ›„์† ์ฒ˜๋ฆฌ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค. ์‹ค์ œ ์กฐ์น˜๋Š” ์ „๋ถ€ Slack์„ ๋ณด๊ณ  admin์ด ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
11+
- `ReportStatus`๋Š” `PENDING` ์™ธ ๊ฐ’(`IN_PROGRESS`/`RESOLVED`/`REJECTED`/`FALSE_REPORT`)์œผ๋กœ ์ „์ด์‹œํ‚ค๋Š” ์ฝ”๋“œ๊ฐ€ ์–ด๋””์—๋„ ์—†๋‹ค. ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ ์ „๊นŒ์ง€๋Š” ์‚ฌ์‹ค์ƒ `PENDING` ๊ณ ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/restaurant/**/*.java"
4+
---
5+
6+
# Restaurant Domain Notes
7+
8+
- ์ด ํŒจํ‚ค์ง€๋Š” ์ž์ฒด ์—”ํ‹ฐํ‹ฐ/ํ…Œ์ด๋ธ”์ด ์—†๊ณ  `Restaurant`(์บ ํผ์Šค ์‹๋‹น enum), `RestaurantType`(FIXED/VARIABLE ๋ถ„๋ฅ˜ enum) ๋‘ ๊ฐœ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ๋‹ค. `menu` ๋„๋ฉ”์ธ์˜ ํ•˜์œ„ ๊ฐœ๋…์— ๊ฐ€๊น๋‹ค.
9+
- `partnership` ํŒจํ‚ค์ง€์—๋„ ์ด๋ฆ„์ด ์™„์ „ํžˆ ๊ฐ™์€ `RestaurantType` enum์ด ๋”ฐ๋กœ ์žˆ๋‹ค(`restaurant`๋Š” FIXED/VARIABLE, `partnership`์€ RESTAURANT/CAFE/PUB๋กœ ์˜๋ฏธ๊ฐ€ ์ „ํ˜€ ๋‹ค๋ฆ„). importํ•  ๋•Œ IDE ์ž๋™์™„์„ฑ์ด ์ž˜๋ชป๋œ ์ชฝ์„ ์žก์•„์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•œ๋‹ค.

โ€Ž.claude/rules/review.mdโ€Ž

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/review/**/*.java"
4+
---
5+
6+
# Review Domain Notes
7+
8+
- ๊ฐ™์€ `Review` ์—”ํ‹ฐํ‹ฐ์— V1์šฉ `@Embedded Ratings ratings`์™€ V2์šฉ `Integer rating`์ด ํ•จ๊ป˜ ์กด์žฌํ•œ๋‹ค(์—”ํ‹ฐํ‹ฐ ์ƒ๋‹จ ์ฃผ์„ ์ฐธ๊ณ ). ๋‘ ํ•„๋“œ๋Š” ์„œ๋กœ ๋ฐฐํƒ€์ ์œผ๋กœ ์ฑ„์›Œ์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์–ด๋А ํ•œ์ชฝ๋งŒ ๋ณด๊ณ  ๊ฐ’์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
9+
- V1 ๋ฆฌ๋ทฐ๋Š” ํ•ญ์ƒ `review.menu`๋กœ ์—ฐ๊ฒฐ๋˜๊ณ , V2 meal ๋ฆฌ๋ทฐ๋Š” `review.meal`์„ ์ง์ ‘ ์‚ฌ์šฉํ•œ๋‹ค. V1 API(`GET /reviews`)๋Š” `review.menu` ๊ธฐ์ค€์œผ๋กœ๋งŒ ์กฐํšŒํ•˜๋ฏ€๋กœ V2๋กœ ์ž‘์„ฑ๋œ meal ๋ฆฌ๋ทฐ๋Š” V1์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
10+
- V2 ์ง‘๊ณ„(`ReviewServiceV2.findMenuReviews`/`findMealReviews`/`findRestaurantReviews`)๋Š” ๋ฆฌ๋ทฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ „๋ถ€ ๋กœ๋“œํ•œ ๋’ค Java์—์„œ ํ‰๊ท /์นด์šดํŠธ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. V1(`ReviewRatingService`)์€ QueryDSL๋กœ DB์—์„œ ์ง‘๊ณ„ํ•œ๋‹ค. ์ƒˆ ์ง‘๊ณ„ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์–ด๋А ํŒจํ„ด์„ ๋”ฐ๋ฅผ์ง€ ํ™•์ธํ•œ๋‹ค.
11+
- ๋ฆฌ๋ทฐ ์ด๋ฏธ์ง€ S3 ์—…๋กœ๋“œ๋Š” V1 ์—”๋“œํฌ์ธํŠธ(`POST /reviews/upload/image`)์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. V2 ๋ฆฌ๋ทฐ ์ƒ์„ฑ API๋Š” ์ด๋ฏธ ์—…๋กœ๋“œ๋œ `imageUrls`๋งŒ ๋ฐ›์œผ๋ฏ€๋กœ, V2 ํด๋ผ์ด์–ธํŠธ๋„ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ์‹œ V1 ์—…๋กœ๋“œ API๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
12+
- `Report` ์—”ํ‹ฐํ‹ฐ๋Š” `report` ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹ˆ๋ผ `review.entity.Report`์— ์žˆ๋‹ค. ๋ฆฌ๋ทฐ ์‹ ๊ณ  ๊ด€๋ จ ๋กœ์ง์„ ์ฐพ์„ ๋•Œ `report` ํŒจํ‚ค์ง€๋งŒ ๋ณด๋ฉด ์•ˆ ๋œ๋‹ค. ์ƒํƒœ/์ „์ด ๋“ฑ ๋‚˜๋จธ์ง€ ์‹ ๊ณ  ๋กœ์ง์€ [[report]] ์ฐธ๊ณ .
13+
- `ReviewRatingService`(`review/service`)๋Š” `rating` ๋„๋ฉ”์ธ์˜ `RatingCalculator`๋ฅผ ๊ตฌํ˜„ํ•ด ์‹ค์ œ ๋ณ„์  ์ง‘๊ณ„๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [[rating]] ์ฐธ๊ณ .

โ€Ž.claude/rules/slack.mdโ€Ž

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
paths:
3+
- "src/main/java/ssu/eatssu/domain/slack/**/*.java"
4+
---
5+
6+
# Slack Domain Notes
7+
8+
- ์˜ˆ์™ธ ํ•„ํ„ฐ๋ง ์—†์ด ๋ชจ๋“  ์˜ˆ์™ธ(๋น„์ฆˆ๋‹ˆ์Šค ์˜ˆ์™ธ ํฌํ•จ)๊ฐ€ `ControllerLogAspect`๋ฅผ ํ†ตํ•ด Slack ์ „์†ก ๋Œ€์ƒ์ด ๋œ๋‹ค. ์‹ค์ œ ์ „์†ก ์—ฌ๋ถ€๋Š” `SlackErrorNotifier`๊ฐ€ `server.env == "prod"`์ธ์ง€๋กœ๋งŒ ๊ฐ€๋ฅธ๋‹ค.
9+
- ์ „์†ก์€ ๋™๊ธฐ ๋ฐฉ์‹์ด๋ฉฐ ํ์ž‰/rate-limit/dedup์ด ์—†๋‹ค. ์žฅ์• ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ชฐ๋ฆฌ๋ฉด ์‹คํŒจ ์š”์ฒญ๋งˆ๋‹ค Slack API ํ˜ธ์ถœ ์ง€์—ฐ์ด ์‘๋‹ต ์‹œ๊ฐ„์— ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

0 commit comments

Comments
ย (0)