From e01607bc15802b6b387ce6fc231d03ed2679fd3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 17 Sep 2024 13:39:05 +0300 Subject: [PATCH] Implementing the `ProductIntegrationService` Class --- ...uct-integration-service-implementation.png | Bin 0 -> 12200 bytes docs/en/tutorials/modular-crm/part-06.md | 46 ++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 docs/en/tutorials/modular-crm/images/visual-studio-product-integration-service-implementation.png diff --git a/docs/en/tutorials/modular-crm/images/visual-studio-product-integration-service-implementation.png b/docs/en/tutorials/modular-crm/images/visual-studio-product-integration-service-implementation.png new file mode 100644 index 0000000000000000000000000000000000000000..7f15fc02e924fc234c72f61f68bd7970456b9f9a GIT binary patch literal 12200 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 > We've reused the `ProductDto` object that was actually created for `IProductAppService`. That can be reasonable from the maintenance point. But, if you think your integration service results can be different than the application service results in the future, it can be good to separate them from the first day, so you don't need to introduce breaking changes later. -#### Creating the `ProductIntegrationService` Class +#### Implementing the `ProductIntegrationService` Class + +We've defined the integration service interface. Now, we can implement it in the `ModularCrm.Products.Application` project. Create an `Integration` folder and then create a `ProductIntegrationService` class in that folder. The final folder structure should be like that: + +![visual-studio-product-integration-service-implementation](D:\Github\abp\docs\en\tutorials\modular-crm\images\visual-studio-product-integration-service-implementation.png) + +Open the `ProductIntegrationService.cs` file and replace it's content with the following code block: + +````csharp +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Domain.Repositories; + +namespace ModularCrm.Products.Integration +{ + [IntegrationService] + public class ProductIntegrationService + : ProductsAppService, IProductIntegrationService + { + private readonly IRepository _productRepository; + + public ProductIntegrationService(IRepository productRepository) + { + _productRepository = productRepository; + } + + public async Task> GetProductsByIdsAsync(List ids) + { + var products = await _productRepository.GetListAsync( + product => ids.Contains(product.Id) + ); -Okay, we've defined the integration service interface. Now, we can implement it in the `ModularCrm.Products.Application` project: + return ObjectMapper.Map, List>(products); + } + } +} +```` +The implementation is pretty simple. Just using a [repository](../../framework/architecture/domain-driven-design/repositories.md) to query `Product` [entities](../../framework/architecture/domain-driven-design/entities.md). +> Here, we directly used `List` classes, but instead you could wrap inputs and outputs into [DTOs](../../framework/architecture/domain-driven-design/data-transfer-objects.md). In that way, it can be possible to add new properties to these DTOs without changing the signature of your integration service method (so, without introducing breaking change for your client modules). -s +### Consuming the Products Integration Service