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; 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>> GetUsers() { return await _context.Users.AsNoTracking().ToListAsync(); } //GET: api/users/5 [HttpGet("{id}")] public async Task> GetUser(int id) { var user = await _context.Users.FindAsync(id); if (user == null) { return NotFound(); } return user; } //POST: api/users [AllowAnonymous] [HttpPost] public async Task> 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 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 DeleteUser(int id) { var user = await _context.Users.FindAsync(id); if(user == null) { return NotFound(); } _context.Users.Remove(user); await _context.SaveChangesAsync(); return NoContent(); } } }