using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace nsszcontactbot; public class FavoriteContactsManager { private readonly IDatabase _redisDb; private const string KeyPrefix = "user:favorites:"; public FavoriteContactsManager(ConnectionMultiplexer redis) { _redisDb = redis.GetDatabase(); } /// /// Добавить контакт в избранное. /// public async Task AddFavoriteAsync(long userId, string contactId) { string key = GetRedisKey(userId); await _redisDb.SetAddAsync(key, contactId); } /// /// Удалить контакт из избранного. /// public async Task RemoveFavoriteAsync(long userId, string contactId) { string key = GetRedisKey(userId); await _redisDb.SetRemoveAsync(key, contactId); } /// /// Проверить, является ли контакт избранным. /// public async Task IsFavoriteAsync(long userId, string contactId) { string key = GetRedisKey(userId); return await _redisDb.SetContainsAsync(key, contactId); } /// /// Получить список всех избранных контактов пользователя. /// public async Task> GetAllFavoritesAsync(long userId) { string key = GetRedisKey(userId); var members = await _redisDb.SetMembersAsync(key); return members.Select(m => m.ToString()).ToList(); } private string GetRedisKey(long userId) => $"{KeyPrefix}{userId}"; }