using CMSMicroservice.Application.Common.Interfaces; using MediatR; using Microsoft.EntityFrameworkCore; namespace CMSMicroservice.Application.ClubFeatureCQ.Commands.ToggleUserClubFeature; /// /// هندلر برای فعال/غیرفعال کردن ویژگی باشگاه کاربر /// public class ToggleUserClubFeatureCommandHandler : IRequestHandler { private readonly IApplicationDbContext _context; public ToggleUserClubFeatureCommandHandler(IApplicationDbContext context) { _context = context; } public async Task Handle(ToggleUserClubFeatureCommand request, CancellationToken cancellationToken) { // بررسی وجود کاربر var userExists = await _context.Users .AnyAsync(u => u.Id == request.UserId && !u.IsDeleted, cancellationToken); if (!userExists) { return new ToggleUserClubFeatureResponse { Success = false, Message = "کاربر یافت نشد" }; } // بررسی وجود ویژگی var featureExists = await _context.ClubFeatures .AnyAsync(cf => cf.Id == request.ClubFeatureId && !cf.IsDeleted, cancellationToken); if (!featureExists) { return new ToggleUserClubFeatureResponse { Success = false, Message = "ویژگی باشگاه یافت نشد" }; } // یافتن رکورد UserClubFeature var userClubFeature = await _context.UserClubFeatures .FirstOrDefaultAsync( ucf => ucf.UserId == request.UserId && ucf.ClubFeatureId == request.ClubFeatureId && !ucf.IsDeleted, cancellationToken); if (userClubFeature == null) { return new ToggleUserClubFeatureResponse { Success = false, Message = "این ویژگی برای کاربر یافت نشد" }; } // به‌روزرسانی وضعیت userClubFeature.IsActive = request.IsActive; userClubFeature.LastModified = DateTime.UtcNow; await _context.SaveChangesAsync(cancellationToken); return new ToggleUserClubFeatureResponse { Success = true, Message = request.IsActive ? "ویژگی با موفقیت فعال شد" : "ویژگی با موفقیت غیرفعال شد", UserClubFeatureId = userClubFeature.Id, IsActive = userClubFeature.IsActive }; } }