feat: Implement Public Message management features including create, update, delete, and publish functionalities
This commit is contained in:
@@ -1,17 +1,54 @@
|
||||
// GetActiveMessages - Public view
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetActiveMessages;
|
||||
|
||||
public record GetActiveMessagesQuery : IRequest<object> // TODO: define response
|
||||
public record GetActiveMessagesQuery : IRequest<GetActiveMessagesResponse>
|
||||
{
|
||||
public int? MessageType { get; init; }
|
||||
public string? TargetAudience { get; init; }
|
||||
}
|
||||
|
||||
public class GetActiveMessagesQueryHandler : IRequestHandler<GetActiveMessagesQuery, object>
|
||||
public class GetActiveMessagesQueryHandler : IRequestHandler<GetActiveMessagesQuery, GetActiveMessagesResponse>
|
||||
{
|
||||
public async Task<object> Handle(GetActiveMessagesQuery request, CancellationToken cancellationToken)
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public GetActiveMessagesQueryHandler(IApplicationContractContext context)
|
||||
{
|
||||
// TODO: gRPC call to CMS PublicMessageContract.GetActiveMessages
|
||||
throw new NotImplementedException();
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<GetActiveMessagesResponse> Handle(GetActiveMessagesQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new GetActiveMessagesRequest();
|
||||
|
||||
// نسخه فعلی CMS فیلدی برای فیلتر ندارد؛ در صورت اضافه شدن، اینجا مپ میشود.
|
||||
var cmsResponse = await _context.PublicMessages.GetActiveMessagesAsync(cmsRequest, cancellationToken: cancellationToken);
|
||||
|
||||
var result = new GetActiveMessagesResponse();
|
||||
|
||||
foreach (var message in cmsResponse.Messages)
|
||||
{
|
||||
result.Messages.Add(new PublicMessageDto
|
||||
{
|
||||
MessageId = message.Id,
|
||||
Title = message.Title,
|
||||
Content = message.Content,
|
||||
MessageType = message.Type,
|
||||
MessageTypeName = message.TypeName,
|
||||
Priority = message.Priority,
|
||||
PriorityName = message.PriorityName,
|
||||
StartsAt = message.StartsAt,
|
||||
ExpiresAt = message.ExpiresAt,
|
||||
IsDismissible = false,
|
||||
Tags = { }
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,80 @@
|
||||
// GetAllMessages - Admin view
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetAllMessages;
|
||||
|
||||
public record GetAllMessagesQuery : IRequest<object> // TODO: define response
|
||||
public record GetAllMessagesQuery : IRequest<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, object>
|
||||
public class GetAllMessagesQueryHandler : IRequestHandler<GetAllMessagesQuery, GetAllMessagesResponse>
|
||||
{
|
||||
public async Task<object> Handle(GetAllMessagesQuery request, CancellationToken cancellationToken)
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public GetAllMessagesQueryHandler(IApplicationContractContext context)
|
||||
{
|
||||
// TODO: gRPC call to CMS PublicMessageContract.GetAllMessages
|
||||
throw new NotImplementedException();
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<GetAllMessagesResponse> Handle(GetAllMessagesQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new GetAllMessagesRequest
|
||||
{
|
||||
PageNumber = request.PageNumber,
|
||||
PageSize = request.PageSize
|
||||
};
|
||||
|
||||
if (request.Status.HasValue)
|
||||
{
|
||||
cmsRequest.IsActive = new BoolValue { Value = request.Status.Value == 1 };
|
||||
}
|
||||
|
||||
if (request.MessageType.HasValue)
|
||||
{
|
||||
cmsRequest.Type = new Int32Value { Value = request.MessageType.Value };
|
||||
}
|
||||
|
||||
var cmsResponse = await _context.PublicMessages.GetAllMessagesAsync(cmsRequest, cancellationToken: cancellationToken);
|
||||
|
||||
var result = new GetAllMessagesResponse
|
||||
{
|
||||
TotalCount = (int)cmsResponse.MetaData.TotalCount,
|
||||
PageNumber = request.PageNumber,
|
||||
PageSize = request.PageSize
|
||||
};
|
||||
|
||||
foreach (var message in cmsResponse.Messages)
|
||||
{
|
||||
result.Messages.Add(new 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user