72 lines
1.8 KiB
C#
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 DbContextFactory _factory;
|
||
|
|
||
|
public UserRepo(DbContextFactory 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();
|
||
|
}
|
||
|
}
|