feat: Implement Public Message management features including create, update, delete, and publish functionalities
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Commands.ArchiveMessage;
|
||||
|
||||
public class ArchiveMessageCommandHandler : IRequestHandler<ArchiveMessageRequest, ArchiveMessageResponse>
|
||||
{
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public ArchiveMessageCommandHandler(IApplicationContractContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<ArchiveMessageResponse> Handle(ArchiveMessageRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new ArchiveMessageRequest
|
||||
{
|
||||
MessageId = request.MessageId
|
||||
};
|
||||
|
||||
var cmsResponse = await _context.PublicMessages.ArchiveMessageAsync(
|
||||
cmsRequest,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
return new ArchiveMessageResponse
|
||||
{
|
||||
Success = cmsResponse.Success,
|
||||
Message = cmsResponse.Message,
|
||||
ArchivedAt = cmsResponse.ArchivedAt
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Commands.CreatePublicMessage;
|
||||
|
||||
public class CreatePublicMessageCommandHandler : IRequestHandler<CreatePublicMessageRequest, CreatePublicMessageResponse>
|
||||
{
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public CreatePublicMessageCommandHandler(IApplicationContractContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<CreatePublicMessageResponse> Handle(CreatePublicMessageRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new CreatePublicMessageRequest
|
||||
{
|
||||
Title = request.Title,
|
||||
Content = request.Content,
|
||||
Type = request.MessageType,
|
||||
Priority = request.Priority,
|
||||
StartDate = Timestamp.FromDateTime(request.StartsAt.ToUniversalTime()),
|
||||
EndDate = Timestamp.FromDateTime(request.ExpiresAt.ToUniversalTime())
|
||||
};
|
||||
|
||||
var cmsResponse = await _context.PublicMessages.CreatePublicMessageAsync(
|
||||
cmsRequest,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
return new CreatePublicMessageResponse
|
||||
{
|
||||
Success = true,
|
||||
Message = "پیام با موفقیت ایجاد شد",
|
||||
MessageId = cmsResponse.Id
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Commands.DeletePublicMessage;
|
||||
|
||||
public class DeletePublicMessageCommandHandler : IRequestHandler<DeletePublicMessageRequest, DeletePublicMessageRequest>
|
||||
{
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public DeletePublicMessageCommandHandler(IApplicationContractContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<DeletePublicMessageRequest> Handle(DeletePublicMessageRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new DeletePublicMessageRequest
|
||||
{
|
||||
MessageId = request.MessageId
|
||||
};
|
||||
|
||||
await _context.PublicMessages.DeletePublicMessageAsync(
|
||||
cmsRequest,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
return request;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Commands.PublishMessage;
|
||||
|
||||
public class PublishMessageCommandHandler : IRequestHandler<PublishMessageRequest, PublishMessageResponse>
|
||||
{
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public PublishMessageCommandHandler(IApplicationContractContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<PublishMessageResponse> Handle(PublishMessageRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new PublishMessageRequest
|
||||
{
|
||||
MessageId = request.MessageId
|
||||
};
|
||||
|
||||
var cmsResponse = await _context.PublicMessages.PublishMessageAsync(
|
||||
cmsRequest,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
return new PublishMessageResponse
|
||||
{
|
||||
Success = cmsResponse.Success,
|
||||
Message = cmsResponse.Message,
|
||||
PublishedAt = cmsResponse.PublishedAt
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// TODO: PublicMessage Commands
|
||||
// PublicMessage Commands implemented:
|
||||
// - CreatePublicMessage
|
||||
// - UpdatePublicMessage
|
||||
// - DeletePublicMessage
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
using BackOffice.BFF.Application.Common.Interfaces;
|
||||
using BackOffice.BFF.PublicMessage.Protobuf;
|
||||
using CMSMicroservice.Protobuf.Protos;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Commands.UpdatePublicMessage;
|
||||
|
||||
public class UpdatePublicMessageCommandHandler : IRequestHandler<UpdatePublicMessageRequest, UpdatePublicMessageRequest>
|
||||
{
|
||||
private readonly IApplicationContractContext _context;
|
||||
|
||||
public UpdatePublicMessageCommandHandler(IApplicationContractContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public async Task<UpdatePublicMessageRequest> Handle(UpdatePublicMessageRequest request, CancellationToken cancellationToken)
|
||||
{
|
||||
var cmsRequest = new UpdatePublicMessageRequest
|
||||
{
|
||||
Id = request.MessageId,
|
||||
Title = request.Title,
|
||||
Content = request.Content,
|
||||
Type = request.MessageType,
|
||||
Priority = request.Priority,
|
||||
StartDate = Timestamp.FromDateTime(request.StartsAt.ToUniversalTime()),
|
||||
EndDate = Timestamp.FromDateTime(request.ExpiresAt.ToUniversalTime())
|
||||
};
|
||||
|
||||
await _context.PublicMessages.UpdatePublicMessageAsync(
|
||||
cmsRequest,
|
||||
cancellationToken: cancellationToken);
|
||||
|
||||
// در حال حاضر پاسخ خاصی از CMS دریافت نمیکنیم؛ همان ورودی را برمیگردانیم
|
||||
return request;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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