diff --git a/Step.Database/Controllers/MachineController.cs b/Step.Database/Controllers/MachineController.cs index b1d09b51..6898a9a3 100644 --- a/Step.Database/Controllers/MachineController.cs +++ b/Step.Database/Controllers/MachineController.cs @@ -37,7 +37,7 @@ namespace Step.Database.Controllers .SingleOrDefault(); } - public MachineModel Create( string uniqueId) + public MachineModel Create ( string uniqueId) { MachineModel machine= new MachineModel() { diff --git a/Step.Database/Controllers/MachinesUsersController.cs b/Step.Database/Controllers/MachinesUsersController.cs index 2c469e46..2be52201 100644 --- a/Step.Database/Controllers/MachinesUsersController.cs +++ b/Step.Database/Controllers/MachinesUsersController.cs @@ -1,4 +1,5 @@ using Step.Model.DatabaseModels; +using Step.Model.DTOModels; using System; using System.Collections.Generic; using System.Linq; @@ -22,15 +23,41 @@ namespace Step.Database.Controllers // Clear database context dbCtx.Dispose(); } - + public MachinesUsersModel FindByUserId(int machineId, int userId) { return dbCtx .MachinesUsers - .Include("Role") + .Include("Role") // TODO Add machine and user info? .Where(x => x.MachineId == machineId && x.UserId == userId) .FirstOrDefault(); - + + } + + public MachinesUsersModel Create(int machineId, int userId, int roleId) + { + MachinesUsersModel machine = new MachinesUsersModel() { MachineId = machineId, UserId = userId, RoleId = roleId }; + dbCtx.MachinesUsers.Add( + machine + ); + dbCtx.SaveChanges(); + + return machine; + } + + public DTORoleModel GetUserRole(int machineId, int userId) + { + RoleModel role = dbCtx + .MachinesUsers + .Include("Role") + .Where(x => x.MachineId == machineId && x.UserId == userId) + .FirstOrDefault().Role; + + return new DTORoleModel() + { + Id = role.RoleId, + Name = role.Name + }; } } } diff --git a/Step.Database/Controllers/UsersController.cs b/Step.Database/Controllers/UsersController.cs index 3775fd16..c1c7d25b 100644 --- a/Step.Database/Controllers/UsersController.cs +++ b/Step.Database/Controllers/UsersController.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Web.Helpers; using Step.Model.DatabaseModels; using Step.Model.DTOModels; +using static Step.Config.ServerConfig; namespace Step.Database.Controllers { @@ -52,10 +53,16 @@ namespace Step.Database.Controllers return CreateUserModel(0, username, password, firstName, lastName, language); } - public DTOUserModel GetUserInfo(int id) + public DTOUserModel GetUserInfo(int userId) { // Find user by Id with Role object included - UserModel userDatabaseModel = dbCtx.Users.Where(u => u.UserId == id).FirstOrDefault(); + UserModel userDatabaseModel = dbCtx.Users.Where(u => u.UserId == userId).FirstOrDefault(); + DTORoleModel roleModel = null; + + using (MachinesUsersController machinesUsersControler = new MachinesUsersController()) + { + roleModel = machinesUsersControler.GetUserRole(MachineConfig.MachineId, userId); + } return new DTOUserModel() { @@ -64,6 +71,7 @@ namespace Step.Database.Controllers FirstName = userDatabaseModel.FirstName, LastName = userDatabaseModel.LastName, Language = userDatabaseModel.Language, + Role = roleModel }; } @@ -96,19 +104,37 @@ namespace Step.Database.Controllers return user; } - public void CreateCmsDefaultUserIfNotExists() + public void CreateCmsDefaultUserIfNotExists(int machineId) { - dbCtx.Users.AddOrUpdate - ( - CreateUserModel(1, "cms", "cms", "cms", "cms", new CultureInfo("en")) + UserModel user = FindByUsername("cms"); + if (user == null) + { + user = dbCtx.Users.Add( + CreateUserModel("cms", "cms", "cms", "cms", new CultureInfo("en")) ); - dbCtx.MachinesUsers.AddOrUpdate( - new MachinesUsersModel() { MachineId = 1, UserId = 1, RoleId = 1 } - ); + // Commit changes + dbCtx.SaveChanges(); + } - // Commit changes - dbCtx.SaveChanges(); + using (MachinesUsersController machineUserController = new MachinesUsersController()) + { + MachinesUsersModel machineUser = machineUserController.FindByUserId(machineId, user.UserId); + + if (machineUser == null) + machineUserController.Create(machineId, user.UserId, 1); + } + } + + public void ChangeUserLanguage(int userId, CultureInfo newLanguage) + { + UserModel user = FindById(userId); + + if(user != null) + { + user.Language = newLanguage; + dbCtx.SaveChanges(); + } } } } diff --git a/Step.Database/DatabaseContext.cs b/Step.Database/DatabaseContext.cs index 6be06eb3..e10e45e0 100644 --- a/Step.Database/DatabaseContext.cs +++ b/Step.Database/DatabaseContext.cs @@ -107,7 +107,7 @@ namespace Step.Database MachineConfig = machineController.Create(uniqueId); using (UsersController usersController = new UsersController()) { - usersController.CreateCmsDefaultUserIfNotExists(); + usersController.CreateCmsDefaultUserIfNotExists(MachineConfig.MachineId); } } } diff --git a/Step.Model/DTOModels/DTORoleModel.cs b/Step.Model/DTOModels/DTORoleModel.cs new file mode 100644 index 00000000..54f29811 --- /dev/null +++ b/Step.Model/DTOModels/DTORoleModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Step.Model.DTOModels +{ + public class DTORoleModel + { + public int Id; + public string Name; + } +} diff --git a/Step.Model/DTOModels/DTOUserModel.cs b/Step.Model/DTOModels/DTOUserModel.cs index 2ea571cd..ed06ee87 100644 --- a/Step.Model/DTOModels/DTOUserModel.cs +++ b/Step.Model/DTOModels/DTOUserModel.cs @@ -14,6 +14,6 @@ namespace Step.Model.DTOModels public string FirstName { get; set; } public string LastName { get; set; } public CultureInfo Language { get; set; } - public int RoleId { get; set; } + public DTORoleModel Role { get; set; } } } diff --git a/Step.Model/Step.Model.csproj b/Step.Model/Step.Model.csproj index 201fd7a5..18359031 100644 --- a/Step.Model/Step.Model.csproj +++ b/Step.Model/Step.Model.csproj @@ -76,6 +76,7 @@ DTOLanguageModel.cs.d.ts + diff --git a/Step/Controllers/WebApi/UserController.cs b/Step/Controllers/WebApi/UserController.cs index adf72a30..e90f621b 100644 --- a/Step/Controllers/WebApi/UserController.cs +++ b/Step/Controllers/WebApi/UserController.cs @@ -5,6 +5,9 @@ using System; using Step.Model.DatabaseModels; using System.Security.Claims; using System.Linq; +using static Step.Utils.LanguageController; +using Step.Model.DTOModels; +using System.Globalization; namespace Step.Controllers.WebApi { @@ -29,9 +32,42 @@ namespace Step.Controllers.WebApi if (userId == null) return Unauthorized(); - using (UsersController user = new UsersController()) + using (UsersController userController = new UsersController()) { - return Ok(user.GetUserInfo(Convert.ToInt32(userId.Value))); + return Ok(userController.GetUserInfo(Convert.ToInt32(userId.Value))); + } + } + + [Route("language"), HttpPut] + [WebApiAuthorize(FunctionAccess = "userData", Action = ACTIONS.READ)] + public IHttpActionResult PutUserLanguage([FromBody] dynamic user) + { + // If no body return 400 + if (user == null) + return BadRequest(); + + // Validate user id + var identity = User.Identity as ClaimsIdentity; + var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).SingleOrDefault(); + + if (userId == null) + return Unauthorized(); + + // Parse body data and validate language + var newLanguage = (string)user.language; + + if (newLanguage == null || !IsValidLanguage(newLanguage)) + return BadRequest(); + + if (!LanguageIsAvailable(newLanguage)) + return NotFound(); + + + using (UsersController userController = new UsersController()) + { + userController.ChangeUserLanguage(Convert.ToInt32(userId.Value), CultureInfo.CreateSpecificCulture(newLanguage)); + + return Ok(); } } }