Files
BackOffice.BFF/src/BackOffice.BFF.Application/PublicMessageCQ/Queries/GetAllMessages/GetAllMessagesQuery.cs

81 lines
2.7 KiB
C#

// 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<BffProto.GetAllMessagesResponse>
{
public int? Status { get; init; }
public int? MessageType { get; init; }
public int PageNumber { get; init; }
public int PageSize { get; init; }
}
public class GetAllMessagesQueryHandler : IRequestHandler<GetAllMessagesQuery, BffProto.GetAllMessagesResponse>
{
private readonly IApplicationContractContext _context;
public GetAllMessagesQueryHandler(IApplicationContractContext context)
{
_context = context;
}
public async Task<BffProto.GetAllMessagesResponse> 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;
}
}