using System.ComponentModel.DataAnnotations; using Microsoft.AspNetCore.Mvc; using Model; using Services; namespace API.Controllers.Admin; /// /// WARNING: This controller does not requires the requester to be authenticated, see https://codefirst.iut.uca.fr/git/IQBall/Server-Panel/issues/2 /// /// [ApiController] public class TeamsAdminController(ITeamService service, ILogger logger) : ControllerBase { public record CountTeamsResponse(int Value); [HttpGet("/admin/teams/count")] public async Task CountTeams() { logger.LogTrace("Counting teams"); return new CountTeamsResponse(await service.CountTotalTeams()); } [HttpGet("/admin/teams")] public Task> ListTeams( [Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")] int start, [Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")] int n ) { logger.LogTrace("Listing teams"); return service.ListTeams(start, n); } public record AddTeamRequest(string Name, string Picture, string FirstColor, string SecondColor); [HttpPost("/admin/teams")] public async Task AddTeam([FromBody] AddTeamRequest req) { logger.LogTrace("Adding teams"); var team = await service.AddTeam(req.Name, req.Picture, req.FirstColor, req.SecondColor); return Ok(team); } public record UpdateTeamRequest(string Name, string Picture, string MainColor, string SecondaryColor); [HttpPut("/admin/teams/{teamId:int}")] public async Task UpdateTeam(int teamId, [FromBody] UpdateTeamRequest req) { logger.LogTrace("Updating teams"); await service.UpdateTeam(new Team(teamId, req.Name, req.Picture, req.MainColor, req.SecondaryColor)); return Ok(); } public record DeleteTeamsRequest(int[] Teams); [HttpPost("/admin/teams/remove-all")] public async Task DeleteTeams([FromBody] DeleteTeamsRequest req) { logger.LogTrace("Deleting teams"); await service.RemoveTeams(req.Teams); return Ok(); } }