using System.Linq; using CMSMicroservice.Protobuf.Protos.BlogPostImage; using CMSMicroservice.WebApi.Common.Services; using CMSMicroservice.Application.BlogPostImageCQ.Commands.AddBlogPostImage; using CMSMicroservice.Application.BlogPostImageCQ.Commands.DeleteBlogPostImage; using CMSMicroservice.Application.BlogPostImageCQ.Commands.ReorderBlogPostImages; using CMSMicroservice.Application.BlogPostImageCQ.Queries.GetBlogPostImages; using Google.Protobuf.WellKnownTypes; using Grpc.Core; using MediatR; namespace CMSMicroservice.WebApi.Services; public class BlogPostImageService : BlogPostImageContract.BlogPostImageContractBase { private readonly ISender _sender; private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS; public BlogPostImageService(ISender sender, IDispatchRequestToCQRS dispatchRequestToCQRS) { _sender = sender; _dispatchRequestToCQRS = dispatchRequestToCQRS; } public override async Task AddBlogPostImage(AddBlogPostImageRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task DeleteBlogPostImage(DeleteBlogPostImageRequest request, ServerCallContext context) { return await _dispatchRequestToCQRS.Handle(request, context); } public override async Task GetBlogPostImages(GetBlogPostImagesRequest request, ServerCallContext context) { var query = new GetBlogPostImagesQuery { BlogPostId = request.BlogPostId }; var result = await _sender.Send(query, context.CancellationToken); var response = new GetBlogPostImagesResponse(); foreach (var item in result) { response.Images.Add(new BlogPostImageItem { Id = item.Id, BlogPostId = item.BlogPostId, ImagePath = item.ImagePath ?? string.Empty, ThumbnailPath = item.ThumbnailPath ?? string.Empty, AltText = item.AltText, Caption = item.Caption, SortOrder = item.SortOrder }); } return response; } public override async Task ReorderBlogPostImages(ReorderBlogPostImagesRequest request, ServerCallContext context) { var command = new ReorderBlogPostImagesCommand { Items = request.Items.Select(x => new Application.BlogPostImageCQ.Commands.ReorderBlogPostImages.ImageSortItem { Id = x.Id, SortOrder = x.SortOrder }).ToList() }; await _sender.Send(command, context.CancellationToken); return new Empty(); } }