using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; namespace MilliSim.Common.Models; /// /// 统一 API 响应模型 /// public class ApiResponse { public int Code { get; set; } = 200; public string Message { get; set; } = "success"; public T? Data { get; set; } public static ApiResponse Success(T? data = default, string message = "success") => new() { Code = 200, Message = message, Data = data }; public static ApiResponse Fail(string message, int code = 400) => new() { Code = code, Message = message, Data = default }; } public class ApiResponse : ApiResponse { public static ApiResponse Success(string message = "success") => new() { Code = 200, Message = message, Data = null }; public new static ApiResponse Fail(string message, int code = 400) => new() { Code = code, Message = message, Data = null }; } /// /// 分页结果 /// public class PagedResult { public List Items { get; set; } = new(); public long Total { get; set; } public int PageIndex { get; set; } public int PageSize { get; set; } public static PagedResult Create(List items, long total, int pageIndex, int pageSize) => new() { Items = items, Total = total, PageIndex = pageIndex, PageSize = pageSize }; } /// /// 分页请求 /// public class PageRequest { private int _pageIndex = 1; private int _pageSize = 12; public int PageIndex { get => _pageIndex; set => _pageIndex = value < 1 ? 1 : value; } public int PageSize { get => _pageSize; set => _pageSize = value is < 1 or > 100 ? 12 : value; } public string? Keyword { get; set; } } /// /// 用户角色枚举 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端数字枚举一致 /// public enum UserRole { Guest = 0, Customer = 1, Sales = 2, ProductManager = 3, Admin = 4 } /// /// 用户状态 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端数字枚举一致 /// public enum UserStatus { Disabled = 0, Active = 1 } /// /// 项目状态 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端 ProjectStatus 数字枚举一致 /// public enum ProjectStatus { Offline = 0, Published = 1 } /// /// 授权状态 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端数字枚举一致 /// public enum AuthorizationStatus { Cancelled = 0, Active = 1, Expired = 2 } /// /// 通知类型 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端数字枚举一致 /// public enum NotificationType { System = 0, Project = 1, Account = 2, Authorization = 3 } /// /// 资源包类型 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端 PackageType 数字枚举一致 /// public enum PackageType { WebGL = 0, Android = 1, Windows = 2, Mac = 3 } /// /// 存储模式 /// 注意:不使用 JsonStringEnumConverter,序列化为数字,与前端数字枚举一致 /// public enum StorageMode { Local = 0, Cos = 1 }