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;
}