feat: add Configuration gRPC service and queries for club settings and features

This commit is contained in:
masoodafar-web
2025-12-19 00:30:58 +03:30
parent 9db854ba0e
commit 0cca79ebfe
17 changed files with 765 additions and 19 deletions
@@ -0,0 +1,6 @@
namespace FrontOffice.BFF.Application.ConfigurationCQ.Queries.GetClubFeatures;
/// <summary>
/// دریافت لیست فیچرهای باشگاه مشتریان برای کاربر جاری
/// </summary>
public record GetClubFeaturesQuery : IRequest<GetClubFeaturesResponseDto>;
@@ -0,0 +1,53 @@
using CMSMicroservice.Protobuf.Protos.ClubMembership;
using FrontOffice.BFF.Application.Common.Interfaces;
namespace FrontOffice.BFF.Application.ConfigurationCQ.Queries.GetClubFeatures;
/// <summary>
/// هندلر دریافت فیچرهای باشگاه مشتریان برای کاربر جاری
/// </summary>
public class GetClubFeaturesQueryHandler : IRequestHandler<GetClubFeaturesQuery, GetClubFeaturesResponseDto>
{
private readonly IApplicationContractContext _context;
private readonly ICurrentUserService _currentUser;
public GetClubFeaturesQueryHandler(
IApplicationContractContext context,
ICurrentUserService currentUser)
{
_context = context;
_currentUser = currentUser;
}
public async Task<GetClubFeaturesResponseDto> Handle(GetClubFeaturesQuery request, CancellationToken cancellationToken)
{
// دریافت فیچرهای باشگاه برای کاربر جاری
var getUserFeaturesRequest = new GetUserClubFeaturesRequest
{
UserId = _currentUser.UserId ?? 0
};
var response = await _context.ClubMemberships.GetUserClubFeaturesAsync(
getUserFeaturesRequest,
cancellationToken: cancellationToken);
var result = new GetClubFeaturesResponseDto
{
Features = response.Features.Select(f => new ClubFeatureItemDto
{
Id = f.ClubFeatureId,
Title = f.FeatureTitle ?? string.Empty,
Description = f.FeatureDescription,
IsEnabled = f.IsActive,
DisplayOrder = f.SortOrder,
GrantedAt = f.GrantedAt?.ToDateTime() ?? DateTime.MinValue,
CreatedAt = f.CreatedAt?.ToDateTime() ?? DateTime.MinValue,
Notes = f.Notes
})
.OrderBy(f => f.DisplayOrder)
.ToList()
};
return result;
}
}
@@ -0,0 +1,18 @@
namespace FrontOffice.BFF.Application.ConfigurationCQ.Queries.GetClubFeatures;
public class GetClubFeaturesResponseDto
{
public List<ClubFeatureItemDto> Features { get; set; } = new();
}
public class ClubFeatureItemDto
{
public long Id { get; set; }
public string Title { get; set; } = string.Empty;
public string? Description { get; set; }
public bool IsEnabled { get; set; }
public int DisplayOrder { get; set; }
public DateTime GrantedAt { get; set; }
public DateTime CreatedAt { get; set; }
public string? Notes { get; set; }
}