2024-11-25 17:51:16 +04:00
|
|
|
using Contracts.DTO;
|
|
|
|
using Contracts.Repositories;
|
|
|
|
using Contracts.SearchModels;
|
|
|
|
using Infrastructure.Support.Mappers;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
|
|
namespace Infrastructure.Repositories;
|
|
|
|
|
|
|
|
public class UserRepo : IUserRepo
|
|
|
|
{
|
2024-11-25 20:56:39 +04:00
|
|
|
public readonly IDbContextFactory<DatabaseContext> _factory;
|
2024-11-25 17:51:16 +04:00
|
|
|
|
2024-11-25 20:56:39 +04:00
|
|
|
public UserRepo(IDbContextFactory<DatabaseContext> factory)
|
2024-11-25 17:51:16 +04:00
|
|
|
{
|
|
|
|
_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();
|
|
|
|
}
|
|
|
|
}
|