using adas_core.Domain.Models.GroupedObservations; using MongoDB.Bson; namespace adas_core.Application.Services.Interfaces { public interface ICacheService { //Métodos básicos /// /// Stores the specified value associated with the given key. /// /// The identifier used to associate the value. /// The value to store for the specified key. /// void SetValue(string key, string value); /// /// Retrieves the string value associated with the specified key. /// /// The key used to look up the value. /// The value associated with the key, or null if the key is not found. /// string? GetValue(string key); /// /// Asynchronously retrieves an object associated with the specified , returning null if no entry is found. /// When is true, the expiration of the retrieved entry is extended upon access. /// /// The unique identifier of the object to retrieve. /// Indicates whether the expiration of the entry should be extended when it is successfully retrieved. Defaults to true. /// A task that represents the asynchronous retrieval operation. The task result contains the object of type associated with the key, or null if no matching entry exists. /// Task GetObjectAsync(string key, bool updateExpiration = true); /// /// Asynchronously stores an object of type using the specified key, optionally updating its expiration time. /// When is true, the entry's expiration is refreshed; otherwise the existing expiration is preserved. /// /// The identifier under which the object will be stored. /// The object to be stored. /// Specifies whether the expiration time of the entry should be refreshed. Defaults to true. /// Task SetObjectAsync(string key, T obj, bool updateExpiration = true); /// /// Asynchronously retrieves an object of type associated with the specified . /// Supports an optional to apply a custom time-to-live and an flag /// to control whether the entry's expiration is refreshed on access. /// /// The unique identifier of the object to retrieve. /// An optional time-to-live value that overrides the default expiration period; if , the default TTL is used. /// A value indicating whether the object's expiration should be extended when it is successfully retrieved. /// A that represents the asynchronous operation, containing the retrieved object of type , or if the object is not found. /// Task GetObjectAsync(string key, TimeSpan? ttlOverride, bool updateExpiration); /// /// Asynchronously stores the specified object associated with the given key, using an optional time-to-live override and expiration update behavior. /// /// The identifier under which the object will be stored. /// The object to store. /// An optional that overrides the default time-to-live for the stored object. /// A value indicating whether the expiration of the stored object should be updated based on the provided TTL. /// A that represents the asynchronous storage operation. /// Task SetObjectAsync(string key, T obj, TimeSpan? ttlOverride, bool updateExpiration); /// /// Asynchronously deletes an object identified by the specified key. /// /// The unique identifier of the object to delete. /// Task DeleteObjectAsync(string key); /// /// Asynchronously deletes entries matching the specified pattern and returns the number of deleted items. /// /// The pattern used to match the entries to be deleted. /// A task that represents the asynchronous delete operation. The task result contains the total number of entries that were deleted. /// Task DeleteByPatternAsync(string pattern); /// /// Clears the application cache, removing all cached entries. /// /// void CleanCache(); // Métodos para transparencia y gestión de locks // GetOrSet (string key) /// /// Asynchronously retrieves a cached value for the specified key, or loads and stores it using the provided loader function when the key is not present. /// /// The cache key used to identify the stored value. /// The asynchronous function invoked to produce the value when no cached entry exists for the specified key. /// An optional time-to-live duration that overrides the default expiration for the cached entry; when null, the default TTL is used. /// A task that represents the asynchronous operation. The result is the cached or freshly loaded string value, or null when no value is available. /// Task GetOrSetValueAsync(string key, Func> loader, TimeSpan? ttlOverride = null); /// /// Asynchronously retrieves an object associated with the specified key from the cache, or invokes the factory to create and cache a new one when the key is not found. /// /// The cache key used to identify the stored object. /// The asynchronous function executed to produce the object when no cached value exists for the given key. /// The optional expiration period for the cached entry; if null, the default cache lifetime is applied. /// The token used to cancel the asynchronous operation. /// A task that resolves to the cached or newly created object of type . /// Task GetOrSetObjectAsync( string key, Func> factory, TimeSpan? ttl = null, CancellationToken cancellationToken = default); // GetOrSet especializado para GroupedObservations /// /// Asynchronously retrieves a cached object identified by the patient and grouped field, or creates and stores it via the supplied factory when no cached value exists. /// /// The grouped field used to categorize and identify the cached object. /// The identifier of the patient the object is associated with. /// The asynchronous factory delegate invoked to produce the object when it is not found in the cache. /// The optional time-to-live duration applied to the cached entry. /// The token to monitor for cancellation requests. /// A task containing the cached or newly created object of type . /// Task GetOrSetObjectAsync( GroupedField groupedField, ObjectId patientId, Func> factory, TimeSpan? ttl = null, CancellationToken cancellationToken = default); } }