using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using LinqToDB; using UserService.DatabaseLayer.DataModels; using UserService.Infrastructure.DataModels; namespace UserService.DatabaseLayer.Repositories { public class UsersRepository : BaseRepository, IUsersRepository { /// public async Task> GetAllAsync(Expression>? predicate = null, CancellationToken token = default) { await using var db = new UserService2DB(); var users = await db.NodeModels .LoadWith(x=> x.Parent) .Where(x => x.Discriminator == nameof(User)) .WhereOrDefault(predicate) .Select(x => new User { Id = x.Id, CommonName = x.CommonName, Description = x.Description, FirstName = x.FirstName, LastName = x.LastName, IsActive = x.IsActive, EMail = x.EMail, ParentId = x.ParentId, }) .ToListAsync(token).ConfigureAwait(false); return users; } /// public async Task GetAsync(Expression> predicate, CancellationToken token = default) { await using var db = new UserService2DB(); var result = await db.NodeModels .Where(predicate) .Select(x => new User { Id = x.Id, CommonName = x.CommonName, Description = x.Description, FirstName = x.FirstName, LastName = x.LastName, IsActive = x.IsActive, EMail = x.EMail }).FirstOrDefaultAsync(token).ConfigureAwait(false); return result; } /// public async Task AddAsync(User entity, CancellationToken token = default) { await using var db = new UserService2DB(); await db.NodeModels.InsertAsync(() => new NodeModel { CommonName = entity.CommonName, FirstName = entity.FirstName, LastName = entity.LastName, Description = entity.Description, EMail = entity.EMail, IsActive = entity.IsActive, Discriminator = nameof(User), }, token).ConfigureAwait(false); } /// public async Task UpdateAsync(User entity, CancellationToken token = default) { await using var db = new UserService2DB(); var changedRows = await db.NodeModels.UpdateAsync(x => new NodeModel { Id = entity.Id, CommonName = entity.CommonName, FirstName = entity.FirstName, LastName = entity.LastName, Description = entity.Description, EMail = entity.EMail, IsActive = entity.IsActive, Discriminator = nameof(User), }, token).ConfigureAwait(false); return changedRows > 0; } /// public async Task DeleteAsync(User entity, CancellationToken token = default) { await using var db = new UserService2DB(); await db.NodeModels.DeleteAsync(x => x.Id == entity.Id, token).ConfigureAwait(false); } } }