using Step.Model.DatabaseModels; using Step.Model.DTOModels; using System; using System.Linq; using static Step.Model.Constants; namespace Step.Database.Controllers { public class MachinesUsersController : IDisposable { private DatabaseContext dbCtx; public MachinesUsersController() { // Initialize database context dbCtx = new DatabaseContext(); } public void Dispose() { // Clear database context dbCtx.Dispose(); } public MachineUserModel FindByUserId(int machineId, int userId) { return dbCtx .MachinesUsers .Include("Role") // TODO Add machine and user info? .Where(x => x.MachineId == machineId && x.UserId == userId) .FirstOrDefault(); } public MachineUserModel FindByIdWithData(int id) { return dbCtx .MachinesUsers .Include("Role") // Join with Role, Machine, User .Include("Machine") .Include("User") .Where(x => x.MachineUserId == id) .FirstOrDefault(); } public MachineUserModel Create(int machineId, int userId, int roleId) { // Create database model MachineUserModel machine = new MachineUserModel() { MachineId = machineId, UserId = userId, RoleId = roleId }; // Add into database dbCtx.MachinesUsers.Add( machine ); // Commit changes dbCtx.SaveChanges(); return machine; } public DTORoleModel GetUserRoleData(int machineId, int userId) { RoleModel role = dbCtx .MachinesUsers .Include("Role") .Where(x => x.MachineId == machineId && x.UserId == userId) // Find by machine id and user id, joining with role .FirstOrDefault().Role; return new DTORoleModel() { Id = role.RoleId, Name = role.Name }; } public bool UserIsCmsAdmin(int machineId, int userId) { MachineUserModel user = FindByUserId(machineId, userId); if (user.Role.RoleId == (int)ROLE_IDS.CMS_SERVICE_ONLY) return true; return false; } public int CompareUsersRole(int firstUserId, int secondUserId, int machineId) { MachineUserModel firstUser = FindByUserId(machineId, firstUserId); MachineUserModel secondUser = FindByUserId(machineId, secondUserId); if (firstUser.Role.Level == secondUser.Role.Level) return 0; else if (firstUser.Role.Level > secondUser.Role.Level) return 1; else return -1; } } }