131 lines
4.0 KiB
C#
131 lines
4.0 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using OnProfNext.Server.Data;
|
|
using OnProfNext.Server.Services;
|
|
using OnProfNext.Shared.Models;
|
|
using OnProfNext.Shared.Models.DTOs;
|
|
|
|
namespace OnProfNext.Server.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class UsersController : ControllerBase
|
|
{
|
|
private readonly AppDbContext _context;
|
|
|
|
public UsersController(AppDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
//GET: api/users
|
|
|
|
[HttpGet]
|
|
public async Task<ActionResult<IEnumerable<UserDto>>> GetUsers()
|
|
{
|
|
var users = await _context.Users.AsNoTracking().Select(u => new UserDto
|
|
{
|
|
Id = u.Id,
|
|
Username = u.Username,
|
|
Email = u.Email,
|
|
FirstName = u.FirstName,
|
|
LastName = u.LastName,
|
|
MandantId = u.MandantId,
|
|
IsActive = u.IsActive
|
|
}).ToListAsync();
|
|
|
|
return Ok(users);
|
|
}
|
|
|
|
//GET: api/users/5
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<UserDto>> GetUser(int id)
|
|
{
|
|
var user = await _context.Users
|
|
.AsNoTracking()
|
|
.Where(u => u.Id == id)
|
|
.Select(u => new UserDto
|
|
{
|
|
Id = u.Id,
|
|
Username = u.Username,
|
|
Email = u.Email,
|
|
FirstName = u.FirstName,
|
|
LastName = u.LastName,
|
|
MandantId = u.MandantId,
|
|
IsActive = u.IsActive
|
|
})
|
|
.FirstOrDefaultAsync();
|
|
|
|
if (user == null)
|
|
return NotFound();
|
|
|
|
return Ok(user);
|
|
}
|
|
|
|
//POST: api/users
|
|
[AllowAnonymous]
|
|
[HttpPost]
|
|
public async Task<ActionResult<User>> CreateUser(User user)
|
|
{
|
|
user.PasswordHash = PasswordHasher.HashPassword(user.PasswordHash);
|
|
user.CreatedAt = DateTime.UtcNow;
|
|
user.UpdatedAt = DateTime.UtcNow;
|
|
|
|
_context.Users.Add(user);
|
|
await _context.SaveChangesAsync();
|
|
|
|
return CreatedAtAction(nameof(GetUser), new { id = user.Id }, user);
|
|
|
|
}
|
|
|
|
//PUT: api/users/5
|
|
[HttpPut("{id}")]
|
|
public async Task<IActionResult> UpdateUser(int id, User user)
|
|
{
|
|
if (id != user.Id)
|
|
{
|
|
return BadRequest();
|
|
}
|
|
var existingUser = await _context.Users.FindAsync(id);
|
|
if (existingUser == null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
existingUser.Username = user.Username;
|
|
existingUser.Email = user.Email;
|
|
if (!string.IsNullOrEmpty(user.PasswordHash))
|
|
{
|
|
existingUser.PasswordHash = PasswordHasher.HashPassword(user.PasswordHash);
|
|
}
|
|
existingUser.FirstName = user.FirstName;
|
|
existingUser.LastName = user.LastName;
|
|
existingUser.MandantId = user.MandantId;
|
|
existingUser.IsActive = user.IsActive;
|
|
existingUser.UpdatedAt = DateTime.UtcNow;
|
|
_context.Entry(existingUser).State = EntityState.Modified;
|
|
|
|
await _context.SaveChangesAsync();
|
|
return NoContent();
|
|
}
|
|
|
|
//DELETE: api/users/5
|
|
[HttpDelete("{id}")]
|
|
public async Task<IActionResult> DeleteUser(int id)
|
|
{
|
|
var user = await _context.Users.FindAsync(id);
|
|
if(user == null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
_context.Users.Remove(user);
|
|
await _context.SaveChangesAsync();
|
|
|
|
return NoContent();
|
|
}
|
|
}
|
|
}
|