using ROLAC.API.DTOs.Permissions; namespace ROLAC.API.DTOs.Auth; public class LoginResponse { /// Short-lived JWT (15 min). Store in memory — never in localStorage. public string AccessToken { get; set; } = null!; /// Seconds until the access token expires. Always 900 (15 × 60). public int ExpiresIn { get; set; } public UserInfo User { get; set; } = null!; } public class UserInfo { public string Id { get; set; } = null!; public string Email { get; set; } = null!; public IList Roles { get; set; } = []; public string LanguagePreference { get; set; } = "en"; /// /// Effective permissions (union across the user's roles), keyed by module name. /// Lets the SPA hide nav/buttons. Authoritative enforcement is server-side. /// public Dictionary Permissions { get; set; } = []; /// /// The church member linked to this login account, or null for admin-only /// accounts (no MemberId) and accounts whose member record was deleted. /// Lets the SPA greet the user by their real name. /// public MemberInfo? MemberInfo { get; set; } } /// Minimal member identity for greeting the signed-in user. public class MemberInfo { public int Id { get; set; } public string? NickName { get; set; } public string FirstName_en { get; set; } = ""; public string LastName_en { get; set; } = ""; public string? FirstName_zh { get; set; } public string? LastName_zh { get; set; } }