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
}