using AutoMapper; using Microsoft.EntityFrameworkCore; using OrdersManagementDataModel.Dtos; using OrdersManagementDataModel.Entities; namespace OrdersManagementDataModel.Services; public class UserRoleService(OrdersManagementDbContext context, IMapper mapper) : IUserRoleService { public async Task> GetUserRoles() { IList userRoles = await context.UserRoles.Select(x => mapper.Map(x)).ToListAsync(); return userRoles; } public async Task GetUserRoleById(Guid id) { UserRoleDto? userRole = await context.UserRoles.Where(x => x.RowPointer == id) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); return userRole; } public Task AddUserRole(UserRoleDto userRoleDto) { UserRole userRole = mapper.Map(userRoleDto); context.UserRoles.Add(userRole); return context.SaveChangesAsync(); } public async Task DeleteUserRole(Guid id) { UserRole? userRole = await context.UserRoles.Where(x => x.RowPointer == id).FirstOrDefaultAsync() ?? null; if (userRole == null) return 0; context.UserRoles.Remove(userRole); return await context.SaveChangesAsync(); } public async Task UpdateUserRole(UserRoleDto userRoleDto) { UserRole userRole = mapper.Map(userRoleDto); context.UserRoles.Update(userRole); return await context.SaveChangesAsync(); } public async Task> GetUserRolesByUserId(Guid userId) { IList userRoles = await context.UserRoles .Where(x => x.User.RowPointer == userId) .Select(x => mapper.Map(x)) .ToListAsync(); return userRoles; } public async Task> GetUserRolesByRoleId(Guid roleId) { IList userRoles = await context.UserRoles .Where(x => x.Role.RowPointer == roleId) .Select(x => mapper.Map(x)) .ToListAsync(); return userRoles; } public async Task AddRoleToUser(Guid userId, Guid roleId) { User? user = await context.Users.FirstOrDefaultAsync(x => x.RowPointer == userId); Role? role = await context.Roles.FirstOrDefaultAsync(x => x.RowPointer == roleId); if (user == null || role == null) return 0; UserRole userRole = new UserRole { User = user, Role = role, RowPointer = Guid.NewGuid() }; context.UserRoles.Add(userRole); return await context.SaveChangesAsync(); } }