Files
FA_WEB/OrdersManagementDataModel/Services/UserService.cs

88 lines
2.7 KiB
C#

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using OrdersManagementDataModel.Dtos;
using OrdersManagementDataModel.Entities;
namespace OrdersManagementDataModel.Services;
public class UserService(OrdersManagementDbContext context, IMapper mapper) : IUserService
{
public async Task<IEnumerable<UserDto>> GetUsers()
{
IList<UserDto> users = await context.Users.Select(x => mapper.Map<UserDto>(x)).ToListAsync();
return users;
}
public async Task<UserDto?> GetUserById(Guid id)
{
UserDto? user = await context.Users.Where(x => x.RowPointer == id)
.Select(x => mapper.Map<UserDto>(x)).FirstOrDefaultAsync();
return user;
}
public async Task<UserDto?> GetUserByUsername(string username)
{
UserDto? user = await context.Users.Where(x => x.Login == username)
.Select(x => mapper.Map<UserDto>(x)).FirstOrDefaultAsync();
return user;
}
public async Task<int> AddUser(UserDto userDto)
{
User user = new User
{
Login = userDto.Login,
PasswordHash = userDto.PasswordHash,
IsTemporaryPassword = true,
IsActive = true,
Email = userDto.Email,
RowPointer = Guid.NewGuid(),
CreatedDate = DateTime.Now,
ActiveFrom = DateTime.Now,
FirstName = userDto.FirstName,
LastName = userDto.LastName
};
context.Users.Add(user);
return await context.SaveChangesAsync();
}
public async Task<int> UpdateUser(UserDto userDto)
{
User user = mapper.Map<User>(userDto);
context.Users.Update(user);
return await context.SaveChangesAsync();
}
public async Task<int> DeleteUser(Guid id)
{
User? user = await context.Users.Where(x => x.RowPointer == id).FirstOrDefaultAsync() ?? null;
if (user == null) return 0;
context.Users.Remove(user);
return await context.SaveChangesAsync();
}
public async Task<IList<UserRoleDto>> GetUserRoles(Guid userId)
{
List<UserRoleDto> userRoles = await context.Users
.Where(x => x.RowPointer == userId)
.SelectMany(x => x.UserRoles)
.Select(x => mapper.Map<UserRoleDto>(x))
.ToListAsync();
return userRoles;
}
public async Task<UserDto?> GetUserByLoginAndPassword(string login, string password)
{
UserDto? user = await context.Users.Where(x => x.Login == login && x.PasswordHash == password)
.Select(x => mapper.Map<UserDto>(x)).FirstOrDefaultAsync();
return user;
}
}