feat: 멤버십(무료/유료) 게이팅 — 백엔드
CI / build (push) Failing after 13m40s

- member.plan(FREE/PREMIUM) 컬럼 추가 + SessionUser/MemberResponse 노출
- auth_session 백업에 plan 저장(세션 복원 시 유료 상태 유지)
- 관리자 회원 plan 변경 API (PUT /api/admin/members/{id}/plan)
- PremiumInterceptor 로 유료 전용 경로 차단(통계/예산/고정지출/태그/OCR/투자/카드알림/백업)
  · 관리자는 플랜과 무관하게 허용, 무료 회원은 403 PREMIUM_REQUIRED
- WebConfigTest: 유료 경로 등록 회귀 가드 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ByungCheol
2026-06-28 11:02:19 +09:00
parent 93e06c9475
commit 6256d3e63d
15 changed files with 122 additions and 5 deletions
+6 -1
View File
@@ -13,13 +13,14 @@
<result property="providerId" column="provider_id"/>
<result property="googleId" column="google_id"/>
<result property="role" column="role"/>
<result property="plan" column="plan"/>
<result property="status" column="status"/>
<result property="createdAt" column="created_at"/>
<result property="updatedAt" column="updated_at"/>
</resultMap>
<sql id="columns">
id, login_id, password, name, email, provider, provider_id, google_id, role, status, created_at, updated_at
id, login_id, password, name, email, provider, provider_id, google_id, role, plan, status, created_at, updated_at
</sql>
<select id="findById" parameterType="long" resultMap="memberResultMap">
@@ -82,6 +83,10 @@
UPDATE member SET role = #{role}, updated_at = NOW() WHERE id = #{id}
</update>
<update id="updatePlan">
UPDATE member SET plan = #{plan}, updated_at = NOW() WHERE id = #{id}
</update>
<update id="updateStatus">
UPDATE member SET status = #{status}, updated_at = NOW() WHERE id = #{id}
</update>