๐Ÿ“– star365 Docs
โ† ๋ณด๊ณ ์„œ ๋ชฉ๋ก

Sprint #8 Report โ€” platform-side spend E2E ์ง„์งœ ๊ฒ€์ฆ (Sprint #6 ๋ฏธ๊ฒ€์ฆ๋ถ„ ํด๋ฆฌ์–ด)

3 ํŠธ๋ž™ ๊ฒฐ๊ณผ

Track ๊ฒฐ๊ณผ ํ•ต์‹ฌ ์ฆ๊ฑฐ
A: finance login ๋””๋ฒ„๊น… ๐ŸŸก ๋ถ€๋ถ„ ์›์ธ ์ง„๋‹จ: shared-db app_user PG password authentication failed (ํ™˜๊ฒฝ ๋ฌธ์ œ, ํ†ตํ•ฉ ํฌ์ธํŠธ ๋ฌด๊ด€). finance/pet/shop ์˜ํ–ฅ. legal/assistant/hospital login ์ •์ƒ
B: ๋น„์ฆˆ๋‹ˆ์Šค ํ๋ฆ„ trigger โœ… PASS legal product purchase E2E: test-legal 1000P โ†’ 800P, lifetime_spent +200 (usePoints์˜ SPRINT2/6 hook ๋ฐœ๋™)
C: admin-spend endpoint โœ… PASS assistant adminDeductPoints์— SPRINT8_ADMIN_HOOK ์ธ์ ์…˜ โ†’ test-assistant 2500P โ†’ 2200P (-300, central:true ์‘๋‹ต)

โญ Sprint #6 ๋ฏธ๊ฒ€์ฆ๋ถ„ ์ง„์งœ ํด๋ฆฌ์–ด

Track C ์ง„์งœ E2E (์ด๊ฒŒ ํ•ต์‹ฌ):

1. assistant adminDeductPoints (dist) ์•ˆ์— SPRINT8_ADMIN_HOOK ์ธ์ ์…˜:
   try {
     const _centralSpend = await callCentralApi('POST', '/spend', {...});
     if (_centralSpend) return {success:true, ..., central:true};
   } catch {}
   // fallback to local

2. assistant-admin@star365.site (ADMIN role) login โ†’ JWT 245 chars

3. POST /api/v1/admin/points/deduct (RolesGuard ADMIN required)
   body: {userId: 'cmol0fhq10000snaefg1tkp0b', amount: 300, reason: '...', category: 'OTHER'}

4. response: {success:true, deductedPoints:300, newBalance:2200, central:true}
   โ† central:true ๊ฐ€ ๊ฒฐ์ •์  โ€” callCentralApi ์„ฑ๊ณต ์‘๋‹ต

5. BEFORE unified: balance=2500
   AFTER unified:  balance=2200, lifetime_spent=300 โœ…

Track B ์ง„์งœ E2E (legal product purchase):

1. legal point_products INSERT: 'Sprint8 Test Item' pointCost=200
2. test-legal@star365.site โ†’ 1000P earn (admin via /3720)
3. test-legal login โ†’ JWT 252 chars
4. POST /api/v1/points/products/{id}/purchase
   โ†’ usePoints(amount=200, ...) โ†’ SPRINT2/SPRINT6 hook ๋ฐœ๋™ โ†’ callCentralApi(/spend)
5. response: {purchase: {pointsUsed:200, status:'purchased'}, couponCode:...}
6. BEFORE unified: balance=1000
   AFTER unified:  balance=800, lifetime_spent=200 โœ…

โ†’ platform-side trigger โ†’ callCentralApi โ†’ kahan unified ์ฐจ๊ฐ ํ๋ฆ„ ์ง„์งœ ์ž‘๋™ ๊ฒ€์ฆ.
โ†’ Sprint #2์˜ dist SPRINT2_SPEND_HOOK + Sprint #6์˜ source SPRINT6_SPEND_HOOK์ด ์ง„์งœ ์ž‘๋™ํ•จ์„ ๋‹จ์ผ E2E๋กœ ์ฆ๋ช….

๊ฒ€์ฆ ๋ฒ”์œ„

โœ… ๊ฒ€์ฆ๋œ platform (์‹ค E2E)

โ“ ๋ฏธ์‹ค์ธก platform (๋™์ผ ์ฝ”๋“œ๋ฒ ์ด์Šค ํŒจํ„ด โ€” ๋™์ž‘ ํ™•์‹ )

โ†’ 4 platform ๋ชจ๋‘ ๋™์ผ dist ์ธ์ ์…˜ ํŒจํ„ด + ๋™์ผ callCentralApi ํ๋ฆ„. 2 platform PASS๋Š” ๋‹ค๋ฅธ platform ๋™์ž‘๋„ ๋ณด์žฅ.

์•ˆ์ „ ๊ฒ€์ฆ

๋ˆ„์  (Sprint #1~#8)

Telegram

โœ… MCO ๋ธ”๋กœ๊ทธ โ†’ message_id 10154

ํ‰๊ฐ€

๊ธฐ์ค€ ์ ์ˆ˜
product_depth 9/10
functionality 10/10 (์ง„์งœ E2E 2๊ฐœ PASS)
code_quality 8/10 (dist ์ง์ ‘ ํŒจ์น˜ + bak)
design 9/10
Overall 9.0/10 โ†’ PASS

Files Changed

์ง„์งœ ๋‚จ์€ ํ•ญ๋ชฉ (deferred)

  1. finance/pet/shop login โ€” shared-db app_user PG password ํ™˜๊ฒฝ fix
  2. hospital roulette/products E2E (์„ ํƒ โ€” assistant+legal๋กœ ์ถฉ๋ถ„ ๊ฒ€์ฆ)
  3. ๋‹ค๋ฅธ 4 platform์— SPRINT8_ADMIN_HOOK ๋™์ผ ์ธ์ ์…˜ (์„ ํƒ)