using Contracts.DTO; using Contracts.Repositories; using Contracts.SearchModels; using Infrastructure.Support.Mappers; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Repositories; public class UserRepo : IUserRepo { public readonly DbContextFactory _factory; public UserRepo(DbContextFactory factory) { _factory = factory; } public async Task Create(UserDto user) { using var context = _factory.CreateDbContext(); var createdUser = await context.Users.AddAsync(user.ToModel()); await context.SaveChangesAsync(); return createdUser.Entity.ToDto(); } public async Task Delete(UserSearch search) { using var context = _factory.CreateDbContext(); var user = await context.Users .FirstOrDefaultAsync(x => x.Id == search.Id || x.Name == search.Name); if (user == null) { return null; } context.Users.Remove(user); await context.SaveChangesAsync(); return user.ToDto(); } public async Task Get(UserSearch search) { using var context = _factory.CreateDbContext(); var user = await context.Users .FirstOrDefaultAsync(x => x.Id == search.Id || x.Name == search.Name); return user?.ToDto(); } public async Task Update(UserDto user) { using var context = _factory.CreateDbContext(); var existingUser = await context.Users.FirstOrDefaultAsync(x => x.Id == user.Id); if (existingUser == null) { return null; } existingUser.Update(user); context.Users.Update(existingUser); await context.SaveChangesAsync(); return existingUser.ToDto(); } }