Files
2026-04-16 06:25:36 +03:00

42 lines
1.3 KiB
Markdown

# 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<T>` | `Task<T> GetFromCacheAsync<T>(string key, Func<Task<T>> 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<ICache, MemoryCache>`
## Data Models
None.
## Configuration
None — default 4-hour expiration is hardcoded.
## External Integrations
None.
## Security
None.
## Tests
`MemoryCache` is instantiated directly in `UserServiceTest`.