Add validators and services for Product Galleries and Product Tags
- Implemented Create, Delete, Get, and Update validators for Product Galleries. - Added Create, Delete, Get, and Update validators for Product Tags. - Created service classes for handling Discount Categories, Discount Orders, Discount Products, Discount Shopping Cart, Product Categories, Product Galleries, and Product Tags. - Each service class integrates with CQRS for command and query handling. - Established mapping profiles for Product Galleries.
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
using CMSMicroservice.Application.Common.Models;
|
||||
using CMSMicroservice.Domain.Enums;
|
||||
using MediatR;
|
||||
|
||||
namespace CMSMicroservice.Application.ManualPaymentCQ.Queries.GetAllManualPayments;
|
||||
|
||||
/// <summary>
|
||||
/// کوئری دریافت لیست پرداختهای دستی با فیلتر
|
||||
/// </summary>
|
||||
public class GetAllManualPaymentsQuery : IRequest<GetAllManualPaymentsResponseDto>
|
||||
{
|
||||
/// <summary>
|
||||
/// شماره صفحه
|
||||
/// </summary>
|
||||
public int PageNumber { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// تعداد رکورد در هر صفحه
|
||||
/// </summary>
|
||||
public int PageSize { get; set; } = 10;
|
||||
|
||||
/// <summary>
|
||||
/// فیلتر بر اساس UserId (اختیاری)
|
||||
/// </summary>
|
||||
public long? UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیلتر بر اساس وضعیت (اختیاری)
|
||||
/// </summary>
|
||||
public ManualPaymentStatus? Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیلتر بر اساس نوع (اختیاری)
|
||||
/// </summary>
|
||||
public ManualPaymentType? Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیلتر بر اساس RequestedBy (اختیاری)
|
||||
/// </summary>
|
||||
public long? RequestedBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مرتبسازی بر اساس تاریخ ایجاد (نزولی: true, صعودی: false)
|
||||
/// </summary>
|
||||
public bool OrderByDescending { get; set; } = true;
|
||||
}
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
using CMSMicroservice.Application.Common.Interfaces;
|
||||
using CMSMicroservice.Application.Common.Models;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace CMSMicroservice.Application.ManualPaymentCQ.Queries.GetAllManualPayments;
|
||||
|
||||
public class GetAllManualPaymentsQueryHandler
|
||||
: IRequestHandler<GetAllManualPaymentsQuery, GetAllManualPaymentsResponseDto>
|
||||
{
|
||||
private readonly IApplicationDbContext _context;
|
||||
private readonly ILogger<GetAllManualPaymentsQueryHandler> _logger;
|
||||
|
||||
public GetAllManualPaymentsQueryHandler(
|
||||
IApplicationDbContext context,
|
||||
ILogger<GetAllManualPaymentsQueryHandler> logger)
|
||||
{
|
||||
_context = context;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<GetAllManualPaymentsResponseDto> Handle(
|
||||
GetAllManualPaymentsQuery request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation(
|
||||
"Getting manual payments. Page: {Page}, PageSize: {PageSize}",
|
||||
request.PageNumber,
|
||||
request.PageSize
|
||||
);
|
||||
|
||||
// ساخت Query با فیلترها
|
||||
var query = _context.ManualPayments
|
||||
.Include(m => m.User)
|
||||
.AsQueryable();
|
||||
|
||||
// فیلتر UserId
|
||||
if (request.UserId.HasValue)
|
||||
{
|
||||
query = query.Where(m => m.UserId == request.UserId.Value);
|
||||
}
|
||||
|
||||
// فیلتر Status
|
||||
if (request.Status.HasValue)
|
||||
{
|
||||
query = query.Where(m => m.Status == request.Status.Value);
|
||||
}
|
||||
|
||||
// فیلتر Type
|
||||
if (request.Type.HasValue)
|
||||
{
|
||||
query = query.Where(m => m.Type == request.Type.Value);
|
||||
}
|
||||
|
||||
// فیلتر RequestedBy
|
||||
if (request.RequestedBy.HasValue)
|
||||
{
|
||||
query = query.Where(m => m.RequestedBy == request.RequestedBy.Value);
|
||||
}
|
||||
|
||||
// شمارش کل
|
||||
var totalCount = await query.CountAsync(cancellationToken);
|
||||
|
||||
// مرتبسازی
|
||||
query = request.OrderByDescending
|
||||
? query.OrderByDescending(m => m.Created)
|
||||
: query.OrderBy(m => m.Created);
|
||||
|
||||
// Pagination
|
||||
var skip = (request.PageNumber - 1) * request.PageSize;
|
||||
var data = await query
|
||||
.Skip(skip)
|
||||
.Take(request.PageSize)
|
||||
.Select(m => new ManualPaymentDto
|
||||
{
|
||||
Id = m.Id,
|
||||
UserId = m.UserId,
|
||||
UserFullName = m.User.FirstName + " " + m.User.LastName,
|
||||
UserMobile = m.User.Mobile ?? "",
|
||||
Amount = m.Amount,
|
||||
Type = m.Type,
|
||||
TypeDisplay = m.Type.ToString(),
|
||||
Description = m.Description,
|
||||
ReferenceNumber = m.ReferenceNumber,
|
||||
Status = m.Status,
|
||||
StatusDisplay = m.Status.ToString(),
|
||||
RequestedBy = m.RequestedBy,
|
||||
RequestedByName = "", // باید از جدول User گرفته شود
|
||||
ApprovedBy = m.ApprovedBy,
|
||||
ApprovedByName = null,
|
||||
ApprovedAt = m.ApprovedAt,
|
||||
RejectionReason = m.RejectionReason,
|
||||
TransactionId = m.TransactionId,
|
||||
Created = m.Created
|
||||
})
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
var metaData = new MetaData
|
||||
{
|
||||
TotalCount = totalCount,
|
||||
PageSize = request.PageSize,
|
||||
CurrentPage = request.PageNumber,
|
||||
TotalPage = (int)Math.Ceiling(totalCount / (double)request.PageSize),
|
||||
HasNext = request.PageNumber < (int)Math.Ceiling(totalCount / (double)request.PageSize),
|
||||
HasPrevious = request.PageNumber > 1
|
||||
};
|
||||
|
||||
_logger.LogInformation(
|
||||
"Retrieved {Count} manual payments. Total: {Total}",
|
||||
data.Count,
|
||||
totalCount
|
||||
);
|
||||
|
||||
return new GetAllManualPaymentsResponseDto
|
||||
{
|
||||
MetaData = metaData,
|
||||
Models = data
|
||||
};
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
using CMSMicroservice.Application.Common.Models;
|
||||
using CMSMicroservice.Domain.Enums;
|
||||
|
||||
namespace CMSMicroservice.Application.ManualPaymentCQ.Queries.GetAllManualPayments;
|
||||
|
||||
public class GetAllManualPaymentsResponseDto
|
||||
{
|
||||
public MetaData? MetaData { get; set; }
|
||||
public List<ManualPaymentDto>? Models { get; set; }
|
||||
}
|
||||
|
||||
public class ManualPaymentDto
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public long UserId { get; set; }
|
||||
public string UserFullName { get; set; } = string.Empty;
|
||||
public string UserMobile { get; set; } = string.Empty;
|
||||
public long Amount { get; set; }
|
||||
public ManualPaymentType Type { get; set; }
|
||||
public string TypeDisplay { get; set; } = string.Empty;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
public string? ReferenceNumber { get; set; }
|
||||
public ManualPaymentStatus Status { get; set; }
|
||||
public string StatusDisplay { get; set; } = string.Empty;
|
||||
public long RequestedBy { get; set; }
|
||||
public string RequestedByName { get; set; } = string.Empty;
|
||||
public long? ApprovedBy { get; set; }
|
||||
public string? ApprovedByName { get; set; }
|
||||
public DateTime? ApprovedAt { get; set; }
|
||||
public string? RejectionReason { get; set; }
|
||||
public long? TransactionId { get; set; }
|
||||
public DateTime Created { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user