/
d.alekseev
/
SmartMenuBot
Обзор
Документация
Войти
/
d.alekseev
/
SmartMenuBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ConsoleBot/Infrastructure/DataAccess/SqlToDoListRepository.cs
66 строк
2 KB
d.alekseev
feat: подключение PostgreSQL через linq2db и миграция репозиториев на SQL
18 фев 2026, 23:03
18 фев 2026, 23:03
86c230c
Код
Авторство
О чём код?
using LinqToDB; using LinqToDB.Async; using SmartMenuBot.Core.DataAccess; using SmartMenuBot.Core.Entities; namespace SmartMenuBot.Infrastructure.DataAccess { public class SqlToDoListRepository(IDataContextFactory<ToDoDataContext> factory) : IToDoListRepository { public async Task<ToDoList?> GetAsync(Guid id, CancellationToken ct) { using var dbContext = factory.CreateDataContext(); var model = await dbContext.ToDoLists .LoadWith(l => l.User) .FirstOrDefaultAsync(l => l.Id == id, ct); return model is null ? null : ModelMapper.MapFromModel(model); } public async Task<IReadOnlyList<ToDoList>> GetByUserIdAsync(Guid userId, CancellationToken ct) { using var dbContext = factory.CreateDataContext(); var models = await dbContext.ToDoLists .LoadWith(l => l.User) .Where(l => l.UserId == userId) .OrderBy(l => l.CreatedAt) .ToListAsync(ct); return models .Select(ModelMapper.MapFromModel) .ToList() .AsReadOnly(); } public async Task AddAsync(ToDoList list, CancellationToken ct) { ArgumentNullException.ThrowIfNull(list); using var dbContext = factory.CreateDataContext(); var model = ModelMapper.MapToModel(list); await dbContext.InsertAsync(model, token: ct); } public async Task DeleteAsync(Guid id, CancellationToken ct) { using var dbContext = factory.CreateDataContext(); await dbContext.ToDoLists .Where(l => l.Id == id) .DeleteAsync(ct); } public async Task<bool> ExistsByNameAsync(Guid userId, string name, CancellationToken ct) { var normalizedName = name.ToLowerInvariant(); using var dbContext = factory.CreateDataContext(); return await dbContext.ToDoLists .AnyAsync(l => l.UserId == userId && l.Name.ToLower() == normalizedName, ct); } } }