using System; using System.Collections.Generic; using System.Linq; using Thermo.Active.Model.DatabaseModels; using Thermo.Active.Model.DTOModels; using static Thermo.Active.Model.Constants; namespace Thermo.Active.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) { var machineUser = dbCtx .MachinesUsers .Include("Role") .Where(x => x.MachineId == machineId && x.UserId == userId) // Find by machine id and user id, joining with role .FirstOrDefault(); if (machineUser != null) { RoleModel role = machineUser.Role; return new DTORoleModel() { Id = role.RoleId, Name = role.Name, Level = role.Level }; } return null; } public bool UserIsCmsAdmin(int machineId, int userId) { MachineUserModel user = FindByUserId(machineId, userId); if (user.Role.RoleId == (int)ROLE_IDS.CMS_SERVICE || user.Role.RoleId == (int)ROLE_IDS.CMS_UT) return true; return false; } public bool RoleIsAdminOrHigher(int roleId) { var tmpRole = dbCtx.Roles .ToList() .First(X => X.RoleId == roleId); if (tmpRole == null) return false; else return tmpRole.Level >= MIN_ADMIN_ROLE; } 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; } public List GetRolesList() { return dbCtx .Roles.Where(X => X.Level < MIN_CMS_ROLE) .Select(x => new DTORoleModel() { Id = x.RoleId, Name = x.Name }) .ToList(); } public void UpdateUserRole(int machineId, int userId, int roleId) { MachineUserModel machineUser = FindByUserId(machineId, userId); if (machineUser == null) return; machineUser.RoleId = roleId; dbCtx.SaveChanges(); } public RoleModel GetUserRole(int machineId, int userId) { var machine = FindByUserId(machineId, userId); if (machine != null) return machine.Role; return null; } } }