domBudg/back/Infrastructure/Repositories/UserRepo.cs

72 lines
1.8 KiB
C#

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 IDbContextFactory<DatabaseContext> _factory;
public UserRepo(IDbContextFactory<DatabaseContext> factory)
{
_factory = factory;
}
public async Task<UserDto> 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<UserDto?> 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<UserDto?> 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<UserDto?> 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();
}
}