package com.sb.web.auth.domain; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.time.LocalDateTime; /** * 회원 도메인. member 테이블과 매핑. * 로컬(아이디/비밀번호) + 소셜(네이버 등) 로그인을 함께 수용한다. */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Member implements Serializable { private Long id; private String loginId; // 로컬 로그인 아이디 (소셜 전용은 null) private String password; // BCrypt 해시 (소셜 전용은 null) private String name; private String email; private String provider; // LOCAL / NAVER / GOOGLE private String providerId; // 소셜 제공자 측 고유 ID private String googleId; // 구글 sub (계정 연결용 — LOCAL 계정에 구글을 연결해도 provider 는 유지) private String googlePicture; // 구글 아바타 URL (로그인 시 동기화) private String profileImage; // 사용자 지정 프로필 이미지(data URL). 우선순위: profileImage > googlePicture > 이니셜 private String role; // USER / ADMIN private String plan; // FREE / PREMIUM (멤버십) private LocalDateTime planExpiresAt; // 유료 멤버십 만료일 (NULL=만료없음/무료) private Long points; // 활동 포인트 (게시판 글/댓글 작성 보상) private String status; // ACTIVE / SUSPENDED / WITHDRAWN private LocalDateTime createdAt; private LocalDateTime updatedAt; }