Files
cms_thermo_active/Thermo.Active.Database/Controllers/MachinesUsersController.cs
T
2020-06-19 19:28:07 +02:00

153 lines
4.4 KiB
C#

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<DTORoleModel> 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;
}
}
}