# Module: Azaion.Services.Cache ## Purpose In-memory caching abstraction using LazyCache, providing get-or-add and invalidation operations. ## Public Interface ### ICache | Method | Signature | Description | |--------|-----------|-------------| | `GetFromCacheAsync` | `Task GetFromCacheAsync(string key, Func> fetchFunc, TimeSpan? expiration = null)` | Returns cached value or fetches and caches it | | `Invalidate` | `void Invalidate(string key)` | Removes a key from the cache | ### MemoryCache (implementation) Default expiration: 4 hours (`TimeSpan.FromHours(4)`). ## Internal Logic Wraps `LazyCache.CachingService`. `GetFromCacheAsync` uses `GetOrAddAsync` with absolute expiration relative to now. `Invalidate` calls `Remove`. ## Dependencies - LazyCache (`IAppCache`, `CachingService`) ## Consumers - `UserService.GetByEmail` — caches user lookups by `User.GetCacheKey(email)` - `UserService.UpdateHardware`, `UserService.UpdateQueueOffsets`, `UserService.CheckHardwareHash` — invalidate cache after writes - Registered as `Scoped` in DI (`Program.cs`): `AddScoped` ## Data Models None. ## Configuration None — default 4-hour expiration is hardcoded. ## External Integrations None. ## Security None. ## Tests `MemoryCache` is instantiated directly in `UserServiceTest`.