add administration routes for teams

tests
maxime 1 year ago
parent 8b22c4ae0c
commit 5eaa35ba8f

@ -0,0 +1,67 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Model;
using Services;
namespace API.Controllers;
[ApiController]
public class TeamsController(ITeamService service) : ControllerBase
{
public record CountTeamsResponse(int Value);
[HttpGet("/admin/teams/count")]
public async Task<CountTeamsResponse> CountTeams()
{
return new CountTeamsResponse(await service.CountTeams());
}
// [HttpGet("/admin/users/count")]
// public async Task<CountUsersResponse> CountUsers()
// {
// return new CountUsersResponse(await service.UsersCount());
// }
[HttpGet("/admin/teams")]
public async Task<IEnumerable<Team>> ListTeams(
[Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")]
int start,
[Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")]
int n
)
{
var result = await service.ListTeams();
return result.Skip(start).Take(n);
}
public record AddTeamRequest(string Name, string Picture, string FirstColor, string SecondColor);
[HttpPost("/admin/teams")]
public async Task<IActionResult> AddTeam([FromBody] AddTeamRequest req)
{
var team = await service.AddTeam(req.Name, req.Picture, req.FirstColor, req.SecondColor);
return Ok(team);
}
public record UpdateTeamRequest(int Id, string Name, string Picture, string MainColor, string SecondaryColor);
[HttpPut("/admin/teams/{teamId:int}")]
public async Task<IActionResult> UpdateTeam([FromBody] UpdateTeamRequest req)
{
await service.UpdateTeam(new Team(req.Id, req.Name, req.Picture, req.MainColor, req.SecondaryColor));
return Ok();
}
public record DeleteTeamsRequest(int[] Teams);
[HttpPost("/admin/teams/remove-all")]
public async Task<IActionResult> DeleteTeams([FromBody] DeleteTeamsRequest req)
{
await service.RemoveTeams(req.Teams);
return Ok();
}
}

@ -6,7 +6,7 @@ using Services;
namespace API.Controllers;
[ApiController]
public class AccountsController(IUserService service) : ControllerBase
public class UsersController(IUserService service) : ControllerBase
{
private const string DefaultProfilePicture =
"https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_960_720.png";

@ -3,7 +3,7 @@ namespace AppContext.Entities;
public class TeamEntity
{
public int Id { get; set; }
public required string Name { get; init; }
public required string Name { get; set; }
public required string Picture { get; set; }
public required string MainColor { get; set; }
public required string SecondColor { get; set; }

@ -1,3 +1,4 @@
using AppContext.Entities;
using Converters;
using Microsoft.EntityFrameworkCore;
using Model;
@ -17,4 +18,68 @@ public class DbTeamService(AppContext.AppContext context) : ITeamService
.Select(t => t.ToModel())
);
}
public Task<IEnumerable<Team>> ListTeams(string nameNeedle)
{
return Task.FromResult(
context.Teams.Where(t => t.Name.ToLower().Contains(nameNeedle.ToLower()))
.AsEnumerable()
.Select(e => e.ToModel())
);
}
public Task<IEnumerable<Team>> ListTeams()
{
return Task.FromResult(
context.Teams
.AsEnumerable()
.Select(e => e.ToModel())
);
}
public async Task<int> CountTeams(string nameNeedle)
{
return await context.Teams.CountAsync(t => t.Name.ToLower().Contains(nameNeedle.ToLower()));
}
public async Task<int> CountTeams()
{
return await context.Teams.CountAsync();
}
public async Task<Team> AddTeam(string name, string picture, string firstColor, string secondColor)
{
var entity = new TeamEntity
{
Name = name,
Picture = picture,
MainColor = firstColor,
SecondColor = secondColor
};
await context.Teams.AddAsync(entity);
await context.SaveChangesAsync();
return entity.ToModel();
}
public async Task RemoveTeams(params int[] teams)
{
await context.Teams
.Where(t => teams.Contains(t.Id))
.ExecuteDeleteAsync();
}
public async Task<bool> UpdateTeam(Team team)
{
var entity = await context.Teams.FirstOrDefaultAsync(t => t.Id == team.Id);
if (entity == null)
return false;
entity.Name = team.Name;
entity.MainColor = team.MainColor;
entity.SecondColor = team.SecondColor;
entity.Picture = team.Picture;
return await context.SaveChangesAsync() > 0;
}
}

@ -4,7 +4,14 @@ namespace Services;
public interface ITeamService
{
public Task<IEnumerable<Team>> ListTeamsOf(int userId);
public Task<IEnumerable<Team>> ListTeams();
public Task<int> CountTeams();
public Task<Team> AddTeam(string name, string picture, string firstColor, string secondColor);
public Task RemoveTeams(params int[] teams);
public Task<bool> UpdateTeam(Team team);
}
Loading…
Cancel
Save