/
d.alekseev
/
SmartMenuBot
Обзор
Документация
Войти
/
d.alekseev
/
SmartMenuBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ConsoleBot/Infrastructure/DataAccess/SqlUserRepository.cs
54 строки
2 KB
d.alekseev
feat: нотификации и фоновые задачи доставки уведомлений
26 фев 2026, 10:55
26 фев 2026, 10:55
4338916
Код
Авторство
О чём код?
using LinqToDB; using LinqToDB.Async; using SmartMenuBot.Core.DataAccess; using SmartMenuBot.Core.Entities; namespace SmartMenuBot.Infrastructure.DataAccess { public class SqlUserRepository(IDataContextFactory<ToDoDataContext> factory) : IUserRepository { public async Task<ToDoUser?> GetUserAsync(Guid userId, CancellationToken ct) { using var dbContext = factory.CreateDataContext(); var model = await dbContext.ToDoUsers .FirstOrDefaultAsync(u => u.UserId == userId, ct); return model is null ? null : ModelMapper.MapFromModel(model); } public async Task<ToDoUser?> GetUserByTelegramUserIdAsync(long telegramUserId, CancellationToken ct) { using var dbContext = factory.CreateDataContext(); var model = await dbContext.ToDoUsers .FirstOrDefaultAsync(u => u.TelegramUserId == telegramUserId, ct); return model is null ? null : ModelMapper.MapFromModel(model); } public async Task<IReadOnlyList<ToDoUser>> GetUsers(CancellationToken ct) { using var dbContext = factory.CreateDataContext(); var models = await dbContext.ToDoUsers .OrderBy(u => u.RegisteredAt) .ToListAsync(ct); return models .Select(ModelMapper.MapFromModel) .ToList() .AsReadOnly(); } public async Task AddAsync(ToDoUser user, CancellationToken ct) { ArgumentNullException.ThrowIfNull(user); using var dbContext = factory.CreateDataContext(); var model = ModelMapper.MapToModel(user); await dbContext.InsertAsync(model, token: ct); } } }