using System; using System.Collections.Generic; using System.Linq; using IOL.Fagprove.Data; using IOL.Fagprove.Data.DTOs; using IOL.Fagprove.Data.Models; using IOL.Fagprove.Services.Interfaces; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace IOL.Fagprove.Controllers { [Authorize("Administrator")] public class UsersController : BaseController { private readonly AppDbContext _context; private readonly IUserService _userService; public UsersController(AppDbContext context, IUserService userService) { _context = context; _userService = userService; } [HttpGet] public ActionResult> GetUsers() { return _context.Users.Select(u => new UserDto { Email = u.Email, Id = u.Id, Name = u.Name, Role = u.Role }).ToList(); } [HttpPost("create")] public ActionResult CreateUser(UserDto payload) { var userExists = _context.Users.Any(u => u.Email == payload.Email); if (userExists) return BadRequest(new {error = "En bruker med den e-postadressen finnes allerede"}); var newUser = new User { Email = payload.Email, Name = payload.Name, Role = payload.Role, CreatedBy = LoggedInUser.Id, CreatedUtc = DateTime.UtcNow, Id = Guid.NewGuid() }; _context.Users.Add(newUser); _context.SaveChanges(); var welcomeTask = _userService.SetTemporaryPasswordAndSendWelcomeMail(newUser); if (!welcomeTask) return StatusCode(500, new {error = "En feil oppstod, prøv igjen senere"}); return Ok(payload); } [HttpDelete("delete")] public ActionResult DeleteUser(UserDto payload) { var userToDelete = _context.Users.SingleOrDefault(u => u.Id == payload.Id); if (userToDelete == default) return BadRequest(new {error = "Fant ikke brukeren"}); _context.Users.Remove(userToDelete); _context.SaveChanges(); return Ok(userToDelete.Name); } [HttpPut("update")] public ActionResult UpdateUser(UserDto payload) { var user = _context.Users.SingleOrDefault(u => u.Id == payload.Id); if (user == default) return BadRequest(new {error = "Fant ikke brukeren"}); if (user.Email != payload.Email) { var userExists = _context.Users.Any(u => u.Email == payload.Email); if (userExists) return BadRequest(new {error = "En bruker med den e-postadressen finnes allerede"}); } user.ModifiedBy = LoggedInUser.Id; user.ModifiedUtc = DateTime.UtcNow; user.Email = payload.Email; user.Name = payload.Name; user.Role = payload.Role; _context.Users.Update(user); _context.Entry(user).Property(x => x.CreatedBy).IsModified = false; _context.Entry(user).Property(x => x.CreatedUtc).IsModified = false; _context.Entry(user).Property(x => x.Id).IsModified = false; _context.SaveChanges(); return Ok(); } } }