summaryrefslogtreecommitdiffstats
path: root/src/Controllers/UsersController.cs
blob: 0d3211bb5db77c0f3e94970ba8d08217385b1d0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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();
        }
    }
}