OnProfNext/OnProfNext.Server/Controllers/UsersController.cs
2025-10-15 15:01:00 +02:00

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();
}
}
}