// GetAllMessages - Admin view using BackOffice.BFF.Application.Common.Interfaces; using Google.Protobuf.WellKnownTypes; using MediatR; using BffProto = BackOffice.BFF.PublicMessage.Protobuf; using CmsProto = CMSMicroservice.Protobuf.Protos; namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetAllMessages; public record GetAllMessagesQuery : IRequest { public int? Status { get; init; } public int? MessageType { get; init; } public int PageNumber { get; init; } public int PageSize { get; init; } } public class GetAllMessagesQueryHandler : IRequestHandler { private readonly IApplicationContractContext _context; public GetAllMessagesQueryHandler(IApplicationContractContext context) { _context = context; } public async Task Handle(GetAllMessagesQuery request, CancellationToken cancellationToken) { var cmsRequest = new CmsProto.GetAllMessagesRequest { PageNumber = request.PageNumber, PageSize = request.PageSize }; if (request.Status.HasValue) { cmsRequest.IsActive = request.Status.Value == 1; } if (request.MessageType.HasValue) { cmsRequest.Type = request.MessageType.Value; } var cmsResponse = await _context.PublicMessages.GetAllMessagesAsync(cmsRequest, cancellationToken: cancellationToken); var result = new BffProto.GetAllMessagesResponse { TotalCount = (int)cmsResponse.MetaData.TotalCount, PageNumber = request.PageNumber, PageSize = request.PageSize }; foreach (var message in cmsResponse.Messages) { result.Messages.Add(new BffProto.AdminPublicMessageDto { MessageId = message.Id, Title = message.Title, Content = message.Content, MessageType = message.Type, MessageTypeName = message.TypeName, Priority = message.Priority, PriorityName = message.PriorityName, Status = message.IsActive ? 1 : 0, StatusName = message.IsActive ? "Active" : (message.IsExpired ? "Expired" : "Inactive"), StartsAt = message.StartsAt, ExpiresAt = message.ExpiresAt, PublishedAt = null, ArchivedAt = null, IsDismissible = false, TargetAudience = string.Empty, Created = message.Created, LastModified = message.LastModified }); } return result; } }