namespace LingAdmin.Shared.DTOs; /// /// 统一 API 响应包装器 /// /// 数据类型 public class ApiResponse { public bool Success { get; set; } public T? Data { get; set; } public string? Message { get; set; } public int Code { get; set; } public List? Errors { get; set; } public DateTime Timestamp { get; set; } = DateTime.UtcNow; public string? TraceId { get; set; } public static ApiResponse Ok(T data, string? message = null) { return new ApiResponse { Success = true, Data = data, Message = message, Code = 200 }; } public static ApiResponse Created(T data, string? message = null) { return new ApiResponse { Success = true, Data = data, Message = message ?? "Created successfully", Code = 201 }; } public static ApiResponse Error(string message, int code = 400, List? errors = null) { return new ApiResponse { Success = false, Message = message, Code = code, Errors = errors }; } public static ApiResponse NotFound(string message = "Resource not found") { return new ApiResponse { Success = false, Message = message, Code = 404 }; } public static ApiResponse Unauthorized(string message = "Unauthorized") { return new ApiResponse { Success = false, Message = message, Code = 401 }; } public static ApiResponse Forbidden(string message = "Forbidden") { return new ApiResponse { Success = false, Message = message, Code = 403 }; } } /// /// 分页请求 /// public class PaginationRequest { public int Page { get; set; } = 1; public int PageSize { get; set; } = 10; public string? SortBy { get; set; } public bool SortDescending { get; set; } = false; public string? Search { get; set; } } /// /// 分页响应 /// /// 数据类型 public class PaginatedResponse { public List Items { get; set; } = new(); public int TotalCount { get; set; } public int Page { get; set; } public int PageSize { get; set; } public int TotalPages => (int)Math.Ceiling((double)TotalCount / PageSize); public bool HasPrevious => Page > 1; public bool HasNext => Page < TotalPages; }