diff --git a/Core.Inventory.DAL.API/Controllers/FurnitureVariantController.cs b/Core.Inventory.DAL.API/Controllers/FurnitureVariantController.cs index 4fedebb..ffd86f1 100644 --- a/Core.Inventory.DAL.API/Controllers/FurnitureVariantController.cs +++ b/Core.Inventory.DAL.API/Controllers/FurnitureVariantController.cs @@ -25,10 +25,22 @@ namespace Core.Inventory.DAL.API.Controllers [AllowAnonymous] public class FurnitureVariantController(IFurnitureVariantProvider service) : ControllerBase { + /// /// Gets all furniture variant records. /// [HttpGet] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + public async Task GetAllAsync(CancellationToken cancellationToken) + { + var result = await service.GetAllAsync(cancellationToken); + return Ok(result); + } + + /// + /// Gets all furniture variant records by ModelId. + /// + [HttpGet] [Route("ByModel/{modelId}")] [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] public async Task GetAllVariantsByModelIdAsync(string modelId, CancellationToken cancellationToken) diff --git a/Core.Inventory.Provider/Contracts/IFurnitureVariantProvider.cs b/Core.Inventory.Provider/Contracts/IFurnitureVariantProvider.cs index bdbaf40..d3e72b5 100644 --- a/Core.Inventory.Provider/Contracts/IFurnitureVariantProvider.cs +++ b/Core.Inventory.Provider/Contracts/IFurnitureVariantProvider.cs @@ -63,5 +63,12 @@ namespace Core.Inventory.Provider.Contracts /// Cancellation token. /// The updated . ValueTask ChangeStatusAsync(string _id, StatusEnum newStatus, CancellationToken cancellationToken); + + /// + /// Retrieves all furniture variant entities. + /// + /// Cancellation token. + /// A list of all entities. + ValueTask> GetAllAsync(CancellationToken cancellationToken); } } diff --git a/Core.Inventory.Provider/Providers/Inventory/FurnitureBaseProvider.cs b/Core.Inventory.Provider/Providers/Inventory/FurnitureBaseProvider.cs index e288bc2..bf8017d 100644 --- a/Core.Inventory.Provider/Providers/Inventory/FurnitureBaseProvider.cs +++ b/Core.Inventory.Provider/Providers/Inventory/FurnitureBaseProvider.cs @@ -47,6 +47,7 @@ namespace Core.Inventory.Provider.Providers.Inventory var entity = await repository.FindByIdAsync(mongoId); entity.Status = newStatus; await repository.ReplaceOneAsync(entity); + await ResetCollectionCache(); return entity; } @@ -60,6 +61,7 @@ namespace Core.Inventory.Provider.Providers.Inventory { var furnitureCollection = newFurniture.Adapt(); await repository.InsertOneAsync(furnitureCollection); + await ResetCollectionCache(); return furnitureCollection; } @@ -108,7 +110,20 @@ namespace Core.Inventory.Provider.Providers.Inventory public async ValueTask UpdateAsync(string id, FurnitureBase entity, CancellationToken cancellationToken) { await repository.ReplaceOneAsync(entity); + await ResetCollectionCache(); return entity; } + + /// + /// Temporary method to "reset" collections cache + /// + /// + private async Task ResetCollectionCache() + { + //TODO: remove this method when necessary. + var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetAllFurnitureBases"); + + await cacheProvider.SetAsync(cacheKey, Enumerable.Empty(), null); + } } } diff --git a/Core.Inventory.Provider/Providers/Inventory/FurnitureVariantProvider.cs b/Core.Inventory.Provider/Providers/Inventory/FurnitureVariantProvider.cs index c5b0459..ef91a24 100644 --- a/Core.Inventory.Provider/Providers/Inventory/FurnitureVariantProvider.cs +++ b/Core.Inventory.Provider/Providers/Inventory/FurnitureVariantProvider.cs @@ -48,6 +48,7 @@ namespace Core.Inventory.Provider.Providers.Inventory var entity = await repository.FindByIdAsync(mongoId); entity.Status = newStatus; await repository.ReplaceOneAsync(entity); + await ResetCollectionCache(); return entity; } @@ -61,6 +62,7 @@ namespace Core.Inventory.Provider.Providers.Inventory { var variantCollection = newVariant.Adapt(); await repository.InsertOneAsync(variantCollection); + await ResetCollectionCache(); return variantCollection; } @@ -137,7 +139,37 @@ namespace Core.Inventory.Provider.Providers.Inventory public async ValueTask UpdateAsync(string id, FurnitureVariant entity, CancellationToken cancellationToken) { await repository.ReplaceOneAsync(entity); + await ResetCollectionCache(); return entity; } + + /// + /// Retrieves all FurnitureVariant entries. + /// + /// Cancellation token. + /// A list of . + public async ValueTask> GetAllAsync(CancellationToken cancellationToken) + { + var cacheKey = CacheKeyHelper.GenerateCacheKey(this, nameof(GetAllAsync)); + var cachedData = await cacheProvider.GetAsync>(cacheKey) ?? []; + + if (cachedData.Any()) return cachedData; + + var data = await repository.AsQueryable(); + await cacheProvider.SetAsync(cacheKey, data); + return data; + } + + /// + /// Temporary method to "reset" collections cache + /// + /// + private async Task ResetCollectionCache() + { + //TODO: remove this method when necessary. + var cacheKey = CacheKeyHelper.GenerateCacheKey(this, "GetAllFurnitureVariants"); + + await cacheProvider.SetAsync(cacheKey, Enumerable.Empty(), null); + } } }