Add product gallery support to products query

This commit is contained in:
masoodafar-web
2025-11-28 07:57:19 +03:30
parent fc4f6defb3
commit c4826fe9d7
5 changed files with 73 additions and 1 deletions

View File

@@ -1,6 +1,8 @@
using CMSMicroservice.Protobuf.Protos.OtpToken; using CMSMicroservice.Protobuf.Protos.OtpToken;
using CMSMicroservice.Protobuf.Protos.Package; using CMSMicroservice.Protobuf.Protos.Package;
using CMSMicroservice.Protobuf.Protos.Products; using CMSMicroservice.Protobuf.Protos.Products;
using CMSMicroservice.Protobuf.Protos.ProductGallerys;
using CMSMicroservice.Protobuf.Protos.ProductImages;
using CMSMicroservice.Protobuf.Protos.User; using CMSMicroservice.Protobuf.Protos.User;
using CMSMicroservice.Protobuf.Protos.UserAddress; using CMSMicroservice.Protobuf.Protos.UserAddress;
using CMSMicroservice.Protobuf.Protos.UserCarts; using CMSMicroservice.Protobuf.Protos.UserCarts;
@@ -23,6 +25,8 @@ public interface IApplicationContractContext
#region CMS #region CMS
PackageContract.PackageContractClient Package { get; } PackageContract.PackageContractClient Package { get; }
ProductsContract.ProductsContractClient Product { get; } ProductsContract.ProductsContractClient Product { get; }
ProductGallerysContract.ProductGallerysContractClient ProductGallerys { get; }
ProductImagesContract.ProductImagesContractClient ProductImages { get; }
UserCartsContract.UserCartsContractClient UserCart { get; } UserCartsContract.UserCartsContractClient UserCart { get; }
UserContract.UserContractClient User { get; } UserContract.UserContractClient User { get; }
UserContractContract.UserContractContractClient UserContract { get; } UserContractContract.UserContractContractClient UserContract { get; }

View File

@@ -1,4 +1,6 @@
using CMSMicroservice.Protobuf.Protos.Products; using CMSMicroservice.Protobuf.Protos.Products;
using CMSMicroservice.Protobuf.Protos.ProductGallerys;
using CMSMicroservice.Protobuf.Protos.ProductImages;
namespace FrontOffice.BFF.Application.ProductsCQ.Queries.GetProducts; namespace FrontOffice.BFF.Application.ProductsCQ.Queries.GetProducts;
public class GetProductsQueryHandler : IRequestHandler<GetProductsQuery, GetProductsResponseDto> public class GetProductsQueryHandler : IRequestHandler<GetProductsQuery, GetProductsResponseDto>
@@ -15,6 +17,46 @@ public class GetProductsQueryHandler : IRequestHandler<GetProductsQuery, GetProd
{ {
var response = await _context.Product.GetProductsAsync(request.Adapt<GetProductsRequest>(), cancellationToken: cancellationToken); var response = await _context.Product.GetProductsAsync(request.Adapt<GetProductsRequest>(), cancellationToken: cancellationToken);
return response ==null? throw new NotFoundException(nameof(ProductsContract.ProductsContractClient), request.Id):response.Adapt<GetProductsResponseDto>(); if (response == null)
{
throw new NotFoundException(nameof(ProductsContract.ProductsContractClient), request.Id);
}
var dto = response.Adapt<GetProductsResponseDto>();
var galleryResponse = await _context.ProductGallerys.GetAllProductGallerysByFilterAsync(
new GetAllProductGallerysByFilterRequest
{
Filter = new GetAllProductGallerysByFilterFilter()
}, cancellationToken: cancellationToken);
var relatedItems = galleryResponse?.Models?.Where(x => x.ProductId == request.Id).ToList();
if (relatedItems != null && relatedItems.Count > 0)
{
foreach (var item in relatedItems)
{
var image = await _context.ProductImages.GetProductImagesAsync(new GetProductImagesRequest
{
Id = item.ProductImageId
}, cancellationToken: cancellationToken);
if (image == null)
{
continue;
}
dto.Gallery.Add(new ProductGalleryItemDto
{
ProductGalleryId = item.Id,
ProductImageId = item.ProductImageId,
Title = image.Title ?? string.Empty,
ImagePath = image.ImagePath ?? string.Empty,
ImageThumbnailPath = image.ImageThumbnailPath ?? string.Empty
});
}
}
return dto;
} }
} }

View File

@@ -27,5 +27,17 @@ public class GetProductsResponseDto
public int ViewCount { get; set; } public int ViewCount { get; set; }
// //
public int RemainingCount { get; set; } public int RemainingCount { get; set; }
//
public List<ProductGalleryItemDto> Gallery { get; set; } = new();
}
public class ProductGalleryItemDto
{
public long ProductGalleryId { get; set; }
public long ProductImageId { get; set; }
public string Title { get; set; } = string.Empty;
public string ImagePath { get; set; } = string.Empty;
public string ImageThumbnailPath { get; set; } = string.Empty;
} }

View File

@@ -1,6 +1,8 @@
using CMSMicroservice.Protobuf.Protos.OtpToken; using CMSMicroservice.Protobuf.Protos.OtpToken;
using CMSMicroservice.Protobuf.Protos.Package; using CMSMicroservice.Protobuf.Protos.Package;
using CMSMicroservice.Protobuf.Protos.Products; using CMSMicroservice.Protobuf.Protos.Products;
using CMSMicroservice.Protobuf.Protos.ProductGallerys;
using CMSMicroservice.Protobuf.Protos.ProductImages;
using CMSMicroservice.Protobuf.Protos.User; using CMSMicroservice.Protobuf.Protos.User;
using CMSMicroservice.Protobuf.Protos.UserAddress; using CMSMicroservice.Protobuf.Protos.UserAddress;
using CMSMicroservice.Protobuf.Protos.UserCarts; using CMSMicroservice.Protobuf.Protos.UserCarts;
@@ -47,6 +49,8 @@ public class ApplicationContractContext : IApplicationContractContext
#region CMS #region CMS
public PackageContract.PackageContractClient Package => GetService<PackageContract.PackageContractClient>(); public PackageContract.PackageContractClient Package => GetService<PackageContract.PackageContractClient>();
public ProductsContract.ProductsContractClient Product => GetService<ProductsContract.ProductsContractClient>(); public ProductsContract.ProductsContractClient Product => GetService<ProductsContract.ProductsContractClient>();
public ProductGallerysContract.ProductGallerysContractClient ProductGallerys => GetService<ProductGallerysContract.ProductGallerysContractClient>();
public ProductImagesContract.ProductImagesContractClient ProductImages => GetService<ProductImagesContract.ProductImagesContractClient>();
public UserCartsContract.UserCartsContractClient UserCart => GetService<UserCartsContract.UserCartsContractClient>(); public UserCartsContract.UserCartsContractClient UserCart => GetService<UserCartsContract.UserCartsContractClient>();
public UserContract.UserContractClient User => GetService<UserContract.UserContractClient>(); public UserContract.UserContractClient User => GetService<UserContract.UserContractClient>();

View File

@@ -44,6 +44,7 @@ message GetProductsResponse
int32 sale_count = 11; int32 sale_count = 11;
int32 view_count = 12; int32 view_count = 12;
int32 remaining_count = 13; int32 remaining_count = 13;
repeated ProductGalleryItem gallery = 14;
} }
message GetAllProductsByFilterRequest message GetAllProductsByFilterRequest
{ {
@@ -84,6 +85,15 @@ message GetAllProductsByFilterResponseModel
int32 remaining_count = 13; int32 remaining_count = 13;
} }
message ProductGalleryItem
{
int64 product_gallery_id = 1;
int64 product_image_id = 2;
string title = 3;
string image_path = 4;
string image_thumbnail_path = 5;
}
message PaginationState message PaginationState
{ {
int32 page_number = 1; int32 page_number = 1;