Добавлены новые функции для управления контактами и фотографиями сотрудников, улучшена логика обработки избранных контактов, добавлены уведомления о днях рождения сотрудников.

This commit is contained in:
Oleg-Nevsky
2026-04-28 19:07:34 +03:00
parent a205f274b5
commit 34efa36d8b
11 changed files with 527 additions and 135 deletions
+48
View File
@@ -0,0 +1,48 @@
using StackExchange.Redis;
using Telegram.Bot.Types;
namespace nsszcontactbot;
public class PhotosManager(ConnectionMultiplexer redis, string PhotoBasePath)
{
private readonly IDatabase _redisDb = redis.GetDatabase();
private readonly string _basePath = PhotoBasePath;
private const string Key = "cache:photos";
private const string DefaultPhotoFileId = "AgACAgIAAxkDAAIDTWgtK4jsuoRTb7C4p0uhfVAOvWy2AAK1-TEb3cloSdmbxB-nuRFCAQADAgADcwADNgQ";
public async Task CacheEmployeePhotoAsync(Employee employee, string fileId, TimeSpan ttl = default)
{
string entryName = GetEntryName(employee);
_redisDb.HashSetAsync(Key, [new(entryName, fileId)]).ConfigureAwait(false);
ttl = ttl == default ? TimeSpan.FromDays(30) : ttl;
_redisDb.HashFieldExpireAsync(Key, [new(entryName)], ttl).ConfigureAwait(false);
}
public async Task<InputFile?> GetEmployeePhotoAsync(Employee employee)
{
string entryName = GetEntryName(employee);
var val = await _redisDb.HashGetAsync(Key, entryName);
if (val != RedisValue.Null && val.HasValue)
{
return InputFile.FromFileId(val!);
}
else
{
string photoPath = Path.Combine(_basePath, $"{employee.Id}.jpg");
photoPath = File.Exists(photoPath) ? photoPath : Path.Combine(_basePath, $"{employee.FullName}.jpg");
if (File.Exists(photoPath))
{
var fileStream = new FileStream(
photoPath,
FileMode.Open,
FileAccess.Read
);
return InputFile.FromStream(fileStream);
}
return InputFile.FromFileId(DefaultPhotoFileId);;
}
}
private static string GetEntryName(Employee employee) => $"employee:{employee.Id}:fileid";
}