first commit
This commit is contained in:
37
MyNewProjectName.Contracts/Common/PagedList.cs
Normal file
37
MyNewProjectName.Contracts/Common/PagedList.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
namespace MyNewProjectName.Contracts.Common
|
||||
{
|
||||
// PagedList model to support pagination in API responses
|
||||
public class PagedList<T>
|
||||
{
|
||||
// Items in the current page
|
||||
public List<T> Items { get; set; } = new List<T>();
|
||||
|
||||
// Total count of items across all pages
|
||||
public int TotalCount { get; set; }
|
||||
|
||||
// Current page number
|
||||
public int PageNumber { get; set; }
|
||||
|
||||
// Page size (items per page)
|
||||
public int PageSize { get; set; }
|
||||
|
||||
// Total number of pages
|
||||
public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
|
||||
|
||||
// Flag indicating if there is a previous page
|
||||
public bool HasPreviousPage => PageNumber > 1;
|
||||
|
||||
// Flag indicating if there is a next page
|
||||
public bool HasNextPage => PageNumber < TotalPages;
|
||||
public PagedList(List<T> items, int totalCount, int pageNumber, int pageSize)
|
||||
{
|
||||
Items = items;
|
||||
TotalCount = totalCount;
|
||||
PageNumber = pageNumber;
|
||||
PageSize = pageSize;
|
||||
}
|
||||
|
||||
// Default constructor
|
||||
public PagedList() { }
|
||||
}
|
||||
}
|
||||
19
MyNewProjectName.Contracts/Common/PaginationParams.cs
Normal file
19
MyNewProjectName.Contracts/Common/PaginationParams.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace MyNewProjectName.Contracts.Common
|
||||
{
|
||||
// Parameters for handling pagination in requests
|
||||
public class PaginationParams
|
||||
{
|
||||
private const int MaxPageSize = 1000;
|
||||
private int _pageSize = 50;
|
||||
|
||||
// Page number (default is 1)
|
||||
public int PageNumber { get; set; } = 1;
|
||||
|
||||
// Page size with validation to ensure it doesn't exceed MaxPageSize
|
||||
public int PageSize
|
||||
{
|
||||
get => _pageSize;
|
||||
set => _pageSize = (value > MaxPageSize) ? MaxPageSize : value;
|
||||
}
|
||||
}
|
||||
}
|
||||
21
MyNewProjectName.Contracts/Common/ServiceResponse.cs
Normal file
21
MyNewProjectName.Contracts/Common/ServiceResponse.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
namespace MyNewProjectName.Contracts.Common
|
||||
{
|
||||
// Generic response model for all API endpoints
|
||||
public class ServiceResponse<T>
|
||||
{
|
||||
// Success status of the request
|
||||
public bool Success { get; set; } = true;
|
||||
|
||||
// Response message
|
||||
public string Message { get; set; } = string.Empty;
|
||||
|
||||
// Response data
|
||||
public T? Data { get; set; }
|
||||
|
||||
// Error details if any
|
||||
public List<string>? Errors { get; set; }
|
||||
|
||||
// Field-specific validation errors for frontend form validation
|
||||
public Dictionary<string, List<string>>? FieldErrors { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace MyNewProjectName.Contracts.DTOs.Requests;
|
||||
|
||||
/// <summary>
|
||||
/// Request to create a sample
|
||||
/// </summary>
|
||||
public class CreateSampleRequest
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
13
MyNewProjectName.Contracts/DTOs/Requests/PaginatedRequest.cs
Normal file
13
MyNewProjectName.Contracts/DTOs/Requests/PaginatedRequest.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace MyNewProjectName.Contracts.DTOs.Requests;
|
||||
|
||||
/// <summary>
|
||||
/// Base request for paginated queries
|
||||
/// </summary>
|
||||
public class PaginatedRequest
|
||||
{
|
||||
public int PageNumber { get; set; } = 1;
|
||||
public int PageSize { get; set; } = 10;
|
||||
public string? SearchTerm { get; set; }
|
||||
public string? SortBy { get; set; }
|
||||
public bool SortDescending { get; set; } = false;
|
||||
}
|
||||
68
MyNewProjectName.Contracts/DTOs/Responses/ApiResponse.cs
Normal file
68
MyNewProjectName.Contracts/DTOs/Responses/ApiResponse.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
namespace MyNewProjectName.Contracts.DTOs.Responses;
|
||||
|
||||
/// <summary>
|
||||
/// Standard API response wrapper
|
||||
/// </summary>
|
||||
public class ApiResponse<T>
|
||||
{
|
||||
public bool Success { get; set; }
|
||||
public string? Message { get; set; }
|
||||
public T? Data { get; set; }
|
||||
public List<string>? Errors { get; set; }
|
||||
|
||||
public static ApiResponse<T> SuccessResponse(T data, string? message = null)
|
||||
{
|
||||
return new ApiResponse<T>
|
||||
{
|
||||
Success = true,
|
||||
Data = data,
|
||||
Message = message
|
||||
};
|
||||
}
|
||||
|
||||
public static ApiResponse<T> ErrorResponse(string error)
|
||||
{
|
||||
return new ApiResponse<T>
|
||||
{
|
||||
Success = false,
|
||||
Errors = new List<string> { error }
|
||||
};
|
||||
}
|
||||
|
||||
public static ApiResponse<T> ErrorResponse(List<string> errors)
|
||||
{
|
||||
return new ApiResponse<T>
|
||||
{
|
||||
Success = false,
|
||||
Errors = errors
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Non-generic API response
|
||||
/// </summary>
|
||||
public class ApiResponse
|
||||
{
|
||||
public bool Success { get; set; }
|
||||
public string? Message { get; set; }
|
||||
public List<string>? Errors { get; set; }
|
||||
|
||||
public static ApiResponse SuccessResponse(string? message = null)
|
||||
{
|
||||
return new ApiResponse
|
||||
{
|
||||
Success = true,
|
||||
Message = message
|
||||
};
|
||||
}
|
||||
|
||||
public static ApiResponse ErrorResponse(string error)
|
||||
{
|
||||
return new ApiResponse
|
||||
{
|
||||
Success = false,
|
||||
Errors = new List<string> { error }
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace MyNewProjectName.Contracts.DTOs.Responses;
|
||||
|
||||
/// <summary>
|
||||
/// Paginated response wrapper
|
||||
/// </summary>
|
||||
public class PaginatedResponse<T>
|
||||
{
|
||||
public List<T> Items { get; set; } = new();
|
||||
public int PageNumber { get; set; }
|
||||
public int TotalPages { get; set; }
|
||||
public int TotalCount { get; set; }
|
||||
public bool HasPreviousPage { get; set; }
|
||||
public bool HasNextPage { get; set; }
|
||||
}
|
||||
13
MyNewProjectName.Contracts/DTOs/Responses/SampleResponse.cs
Normal file
13
MyNewProjectName.Contracts/DTOs/Responses/SampleResponse.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace MyNewProjectName.Contracts.DTOs.Responses;
|
||||
|
||||
/// <summary>
|
||||
/// Sample response DTO
|
||||
/// </summary>
|
||||
public class SampleResponse
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string? Description { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
Reference in New Issue
Block a user