Sprint #12 Report โ 4 platform hook ์์น + shop hardening
- Feature: platform-hardening-sprint12-20260430
- Owner: Claude (์์ CEO)
- Trigger: ์ฌ์ฉ์ ๋ช
๋ น "1+2+3 ๋ณ๋ ฌ ์งํ"
- Duration: ~50๋ถ
- ๊ฒฐ๊ณผ: ๐ข Track A PASS / Track B+C ๋ถ๋ถ (์ ์ง ์์ธ)
โ
Track A: 4 platform hook ์์น ๊ฐ์ PASS
์ง๋จ ๊ฒฐ๊ณผ (ํ์ฌ ์ํ)
- finance: hook์ด balance check ์ดํ โ ์ด๋ ํ์
- legal: ์ด๋ฏธ OK (balance check๋ transaction ์)
- assistant: hook ์์ฒด ๋ถ์ฌ (sprint #2 dist ์ธ์ ์
๋๋ฝ ๋ฐ๊ฒฌ) โ ์ ๊ท ์ถ๊ฐ ํ์
- pet: ์ด๋ฏธ sprint #10์์ ํจ์ ์์ โ
- hospital: sprint #11์์ ์ด๋ฏธ ์ด๋ โ
๋ณ๊ฒฝ (SPRINT12_HOOK_RELOCATED)
- finance (
spendPoints): SPRINT2 hook ๋ผ์ธ ์ ๊ฑฐ + ํจ์ ์์์ ์ ๊ท hook ์ธ์ ์
- assistant (
spendPoints): hook ์์ฒด ๋ถ์ฌ โ ํจ์ ์์์ ์ ๊ท hook ์ธ์ ์
E2E ๊ฒ์ฆ (finance)
test-finance local point_account.balance 0์ผ๋ก ๊ฐ์ reset
โ POST /api/v1/points/spend (JWT) {amount:200}
โ response: {success:true, spentPoints:200, newBalance:1700, _source:"central"}
โ unified: 1900 โ 1700 (-200) โ
โ local ์๊ณ 0์ด๋ผ๋ SPRINT12_HOOK ํจ์ ์์์์ ๋ฐ๋ โ unified ์ฐจ๊ฐ โ return early
6 platform ์ต์ข
hook ์์น ์ํ
| platform |
hook ์์น |
์ํ |
| finance |
ํจ์ ์์ (Sprint #12 RELOCATED) |
โ
|
| legal |
ํจ์ ์์ (transaction ์์์ balance check) |
โ
์๋ OK |
| assistant |
ํจ์ ์์ (Sprint #12 ์ ๊ท) |
โ
|
| hospital |
ํจ์ ์์ (Sprint #11 RELOCATED) |
โ
|
| pet |
ํจ์ ์์ (Sprint #10 ์ ๊ท) |
โ
|
| shop |
ํจ์ ์์ (์๋ ์ฝ๋) |
โ
|
โ 6/6 platform ๋ชจ๋ hook์ด ํจ์ ์์์ ์์น โ ๊ฒฌ๊ณ ํ dual-write ๋ณด์ฅ
๐ก Track B: shop SpendPointsDto fix ์๋
๋ณ๊ฒฝ
/opt/shop/apps/api/dist/.../main.js์ ValidationPipe: forbidNonWhitelisted: true โ false
- โ spend body์ properties ๊ฑฐ๋ถ ํด์
๊ฒฐ๊ณผ
- ValidationPipe ํต๊ณผ โ
- ๋จ starium-point.controller๋
req.ssoUser?.id || req.user?.id ๊ฒ์ฆ โ "User not authenticated" (UseGuards ๋ฏธ์ค์น, cookie JWT ์๋ ๋ณํ X)
- ๋ํ starium-point.controller๋
PointIntegrationService ์ฌ์ฉ (๋ณ๋ path) โ SPRINT2 hook ๊ฒ์ฆ๊ณผ ๋ฌด๊ด
โ shop spendPoints (line 366, SPRINT2 hook ์์น)๋ ๋ค๋ฅธ trigger ํ๋ฆ ํ์
๐ก Track C: shop transfer URL fix ์๋
๋ณ๊ฒฝ
cross-platform-points.service.js์ PLATFORM_URLS์ SHOP/ASSISTANT/KAHAN ์ถ๊ฐ
- ์ด์ "Invalid URL" โ ์งํ
๊ฒฐ๊ณผ
- "Invalid URL" โ 404 (progress)
- ์์ธ: shop ์์ฒด controller prefix๋
cross-platform, ๋ค๋ฅธ platform์ points/cross-platform โ path mismatch
- ์ถ๊ฐ๋ก alias controller ๋๋ prefix ํต์ผ ํ์
๋์ ์ค E2E (Sprint #1~#12) = 5/6 platform PASS
| platform |
trigger |
๊ฒฐ๊ณผ |
| assistant |
admin-points/deduct (#8) |
โ
|
| legal |
product purchase (#8) |
โ
|
| finance |
user spend (#9 + #12 local 0 OK) |
โ
โ
|
| pet |
cross-platform/deduct (#10) |
โ
|
| hospital |
cross-platform/deduct (#10 + #11 local 0 OK) |
โ
โ
|
| shop |
(์ ์ ๊ฒ์ฆ) |
๐ก ๋น์ฆ๋์ค ํ๋ฆ ์์กด |
๋์ (Sprint #1~#12)
- unified_point_accounts: 22 โ 54 accounts
- ์ด ์๊ณ : 219,850P โ 350,250P
- ๋์ ์ฌ์ฉ: 0 โ 36,950P
- 6/6 platform login OK + 6/6 platform hook ํจ์ ์์ ์์น ํต์ผ
Files Changed
- /opt/finance/.../point.service.js (SPRINT12_HOOK_RELOCATED)
- /opt/assistant/.../points.service.js (SPRINT12_HOOK_RELOCATED ์ ๊ท)
- /opt/shop/apps/api/dist/.../points/cross-platform-points.service.js (PLATFORM_URLS map)
- /opt/shop/apps/api/dist/.../main.js (ValidationPipe forbidNonWhitelisted false)
์์ ๊ฒ์ฆ
- โ
ํธ๋ ์ด๋ฉ ๋ฌด์ํฅ
- โ
UFW ๋ฌด๋ณ๊ฒฝ
- โ
DB DROP 0๊ฑด
- โ
finance/assistant/shop ๊ฐ 1ํ graceful restart
Telegram
โ
MCO ๋ธ๋ก๊ทธ โ message_id 10178
ํ๊ฐ 8.5/10 (Track A PASS, B+C ๋ถ๋ถ ์ ์ง)
์ง์ง ๋ง์ง๋ง ๋จ์ ํญ๋ชฉ
- shop starium-point.controller์ UseGuards JwtAuthGuard ์ถ๊ฐ โ cookie JWT ์๋ ์ธ์ฆ
- shop cross-platform-points.controller alias
points/cross-platform/deduct route ์ถ๊ฐ โ transfer ์์ฒด self-deduct ์๋
- shop ์์ฒด ๊ฒฐ์ /์ฅ๋ฐ๊ตฌ๋ ํ๋ฆ trigger ์๋ฎฌ
(์ ๋ถ ๋น์ฆ๋์ค/์ธ์ฆ ํ๊ฒฝ ์์
, ํตํฉ ํฌ์ธํธ ํต์ฌ๊ณผ ๋ถ๋ฆฌ)