using System.Collections.Frozen; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Moonlight.Api.Database; using Moonlight.Api.Database.Entities; using Moonlight.Api.Services; using Moonlight.Shared; namespace Moonlight.Api.Http.Controllers.Admin.Users; [ApiController] [Route("api/admin/users")] [Authorize(Policy = Permissions.Users.Delete)] public class UserDeletionController : Controller { private readonly UserDeletionService UserDeletionService; private readonly DatabaseRepository Repository; public UserDeletionController(UserDeletionService userDeletionService, DatabaseRepository repository) { UserDeletionService = userDeletionService; Repository = repository; } [HttpDelete("{id:int}")] public async Task DeleteAsync([FromRoute] int id) { var userExists = await Repository .Query() .AnyAsync(user => user.Id == id); if (!userExists) return Problem("No user with this id found", statusCode: 404); var validationResult = await UserDeletionService.ValidateAsync(id); if (!validationResult.IsValid) { return ValidationProblem( new ValidationProblemDetails( new Dictionary() { { string.Empty, validationResult.ErrorMessages.ToArray() } } ) ); } await UserDeletionService.DeleteAsync(id); return NoContent(); } }