summaryrefslogtreecommitdiffstats
path: root/src/Controllers/UsersController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Controllers/UsersController.cs')
-rw-r--r--src/Controllers/UsersController.cs93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/Controllers/UsersController.cs b/src/Controllers/UsersController.cs
new file mode 100644
index 0000000..0d3211b
--- /dev/null
+++ b/src/Controllers/UsersController.cs
@@ -0,0 +1,93 @@
+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<List<UserDto>> 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();
+ }
+ }
+} \ No newline at end of file