Files
sb-backend/src/main/java/com/sb/web/auth/domain/AuthSession.java
T
ByungCheol 6256d3e63d
CI / build (push) Failing after 13m40s
feat: 멤버십(무료/유료) 게이팅 — 백엔드
- 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>
2026-06-28 11:02:19 +09:00

57 lines
1.5 KiB
Java

package com.sb.web.auth.domain;
import com.sb.web.auth.dto.SessionUser;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* 세션 영속 백업(auth_session). Redis 유실 시 여기서 SessionUser 를 복원한다.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AuthSession {
private String token;
private Long memberId;
private String loginId;
private String name;
private String role;
private String plan;
private String provider;
private boolean rememberMe;
private LocalDateTime expiresAt;
private LocalDateTime createdAt;
public static AuthSession of(String token, SessionUser u, LocalDateTime expiresAt) {
return AuthSession.builder()
.token(token)
.memberId(u.getId())
.loginId(u.getLoginId())
.name(u.getName())
.role(u.getRole())
.plan(u.getPlan())
.provider(u.getProvider())
.rememberMe(u.isRememberMe())
.expiresAt(expiresAt)
.build();
}
public SessionUser toSessionUser() {
return SessionUser.builder()
.id(memberId)
.loginId(loginId)
.name(name)
.role(role)
.plan(plan)
.provider(provider)
.rememberMe(rememberMe)
.build();
}
}