Files
pos-system/services/ads-manager-service-net/src/AdsManagerService.API/Application/Commands/DeleteCampaignCommandHandler.cs

53 lines
1.9 KiB
C#

using AdsManagerService.Domain.AggregatesModel.CampaignAggregate;
using AdsManagerService.Infrastructure;
using MediatR;
using Microsoft.Extensions.Logging;
namespace AdsManagerService.API.Application.Commands;
/// <summary>
/// EN: Handler for deleting (archiving) a campaign.
/// VI: Handler cho việc xóa (lưu trữ) chiến dịch.
/// </summary>
public class DeleteCampaignCommandHandler : IRequestHandler<DeleteCampaignCommand, bool>
{
private readonly ICampaignRepository _campaignRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly ILogger<DeleteCampaignCommandHandler> _logger;
public DeleteCampaignCommandHandler(
ICampaignRepository campaignRepository,
IUnitOfWork unitOfWork,
ILogger<DeleteCampaignCommandHandler> logger)
{
_campaignRepository = campaignRepository ?? throw new ArgumentNullException(nameof(campaignRepository));
_unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task<bool> Handle(DeleteCampaignCommand request, CancellationToken cancellationToken)
{
// EN: Get campaign
// VI: Lấy chiến dịch
var campaign = await _campaignRepository.GetByIdAsync(request.CampaignId);
if (campaign == null)
{
_logger.LogWarning("Campaign {CampaignId} not found", request.CampaignId);
return false;
}
// EN: Archive campaign (soft delete)
// VI: Lưu trữ chiến dịch (soft delete)
campaign.Archive();
// EN: Save changes
// VI: Lưu thay đổi
await _unitOfWork.SaveChangesAsync(cancellationToken);
_logger.LogInformation("Campaign {CampaignId} archived successfully", request.CampaignId);
return true;
}
}