μλ£ λ³ΈλΆ issue dc644f93 (μ§λ£μλ£ β star365 κ°μ
+ 5,000P) Phase 1 MVP ꡬν μλ£. QR μ½λ λ°©μ μ±νμΌλ‘ μΉ΄μΉ΄μ€ μλ¦Όν‘/SMS μΈλΆ λνμ¬ μμ‘΄ 0. clinic-emr (kahan:3006) β star365-members (kahan:3720) β star365-hub (paperclip:3400) 3-tier E2E μλ. νΈλ μ΄λ©/UFW/DB DROP 0 μν₯.
/opt/star365-members/server.mjs)medical_visit_tokens ν
μ΄λΈ + 2 μΈλ±μ€ (postgres user CREATE, star365_svc GRANT)/medical/visit-token β ν ν° λ°κΈ (mvt-{16hex}, 24h λ§λ£, atomic INSERT)/medical/visit-token/:token β ν ν° μ 보 μ‘°ν (valid/already_redeemed/expired)/medical/visit-redeem β atomic redeem (FOR UPDATE λ½ + member μ‘°ν + unified_point_accounts UPDATE + point_transactions INSERT + journey_events INSERT + token mark redeemed)server.mjs.bak-medical-20260509/opt/clinic-emr/server/routes/star365-token.js)/api/star365-token/issue β record_id λλ appointment_id λ°μ νμ μ 보 μ‘°ν + members /medical/visit-token νΈμΆ + signup_url λ°ν (μΈμ¦ νμ: doctor/admin)/api/star365-token/:token/qr.png β QR PNG (300x300, errorCorrectionLevel M, Cache 5min, μΈμ¦ λΆνμ β ν ν° μμ²΄κ° λΉλ°)qrcode μΆκ°STAR365_MEMBERS_URL, STAR365_INTERNAL_KEY, CLINIC_IDindex.js.bak-medical-20260509, .env.bak-medical-20260509/opt/clinic-emr/src/pages/MedicalRecord.jsx)MedicalRecord.jsx.bak-medical-20260509/opt/star365-hub/)server.mjs: /auth/signup bodyμ medical_token λ°μ κ°μ
ν /medical/visit-redeem νΈμΆ + μλ΅μ medical_reward ν¬ν¨. μ κ· GET /medical/token-info?mt=xxx proxy endpointpublic/signup.html: ?mt= URL νλΌλ―Έν° κ°μ§ β /medical/token-info νΈμΆ β "π₯ μ§λ£ μλ£ κ°μ
보λμ€" λ°°λ + κ°μ
λ²νΌ λΌλ²¨ λμ λ³κ²½ ("κ°μ
νκ³ 5,000P λ°κΈ°") + κ°μ
ν alertserver.mjs.bak-medical-20260509, signup.html.bak-medical-20260509[μμ¬] clinic-emr UI μλͺ
μλ£
β POST /api/star365-token/issue
[clinic-emr Express :3006]
β POST kahan:3720/medical/visit-token (x-star365-key)
[star365-members :3720]
β INSERT medical_visit_tokens
β return {token, signup_url, expires_at}
[clinic-emr UI] QR λͺ¨λ¬ νμ (https://members.star365.site/signup?mt=mvt-...)
[νμ] QR μ€μΊ β λͺ¨λ°μΌ λΈλΌμ°μ
β GET https://members.star365.site/signup?mt=mvt-...
[star365-hub :3400]
β GET /medical/token-info?mt=... β kahan /medical/visit-token/:token
[signup.html] λ°°λ νμ "π₯ 5,000P κ°μ
보λμ€"
β μ΄λ©μΌ/PW μ
λ ₯ β POST /auth/signup {email, password, medical_token}
[star365-hub /auth/signup]
β kahan /register
β kahan /sso/issue (cookie set)
β kahan /medical/visit-redeem {token, star365_uid}
[members /medical/visit-redeem] BEGIN
- SELECT FOR UPDATE token
- check redeemed/expired β 409/410
- INSERT/UPDATE unified_point_accounts +5000
- INSERT point_transactions (EARN, HOSPITAL)
- INSERT member_journey_events (medical_visit_redeem)
- UPDATE token redeemed_at
COMMIT
β κ°μ
μ±κ³΅ alert "π 5,000P μ 립" β /me 리λ€μ΄λ νΈ