From 4b6122f781127729f9a2709e189f9c87509f7bc0 Mon Sep 17 00:00:00 2001 From: maxime Date: Sun, 17 Mar 2024 11:01:51 +0100 Subject: [PATCH 1/2] add logging in admin controllers --- API/Controllers/Admin/TeamsAdminController.cs | 21 ++++++++++------ API/Controllers/Admin/UsersAdminController.cs | 25 +++++++++++++------ UnitTests/AdminTeamsControllerTest.cs | 4 ++- UnitTests/AdminUserControllerTest.cs | 3 ++- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/API/Controllers/Admin/TeamsAdminController.cs b/API/Controllers/Admin/TeamsAdminController.cs index 9cdff0d..6d5e2f8 100644 --- a/API/Controllers/Admin/TeamsAdminController.cs +++ b/API/Controllers/Admin/TeamsAdminController.cs @@ -5,8 +5,13 @@ 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) : ControllerBase +public class TeamsAdminController(ITeamService service, ILogger logger) : ControllerBase { public record CountTeamsResponse(int Value); @@ -14,15 +19,10 @@ public class TeamsAdminController(ITeamService service) : ControllerBase [HttpGet("/admin/teams/count")] public async Task CountTeams() { + logger.LogTrace("Counting teams"); return new CountTeamsResponse(await service.CountTotalTeams()); } - - // [HttpGet("/admin/users/count")] - // public async Task CountUsers() - // { - // return new CountUsersResponse(await service.UsersCount()); - // } - + [HttpGet("/admin/teams")] public Task> ListTeams( [Range(0, int.MaxValue, ErrorMessage = "Only positive number allowed")] @@ -31,6 +31,7 @@ public class TeamsAdminController(ITeamService service) : ControllerBase int n ) { + logger.LogTrace("Listing teams"); return service.ListTeams(start, n); } @@ -39,6 +40,7 @@ public class TeamsAdminController(ITeamService service) : ControllerBase [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); @@ -49,6 +51,7 @@ public class TeamsAdminController(ITeamService service) : ControllerBase [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(); @@ -59,6 +62,8 @@ public class TeamsAdminController(ITeamService service) : ControllerBase [HttpPost("/admin/teams/remove-all")] public async Task DeleteTeams([FromBody] DeleteTeamsRequest req) { + logger.LogTrace("Deleting teams"); + await service.RemoveTeams(req.Teams); return Ok(); } diff --git a/API/Controllers/Admin/UsersAdminController.cs b/API/Controllers/Admin/UsersAdminController.cs index deadca9..10d6a2d 100644 --- a/API/Controllers/Admin/UsersAdminController.cs +++ b/API/Controllers/Admin/UsersAdminController.cs @@ -5,8 +5,12 @@ 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 UsersAdminController(IUserService service) : ControllerBase +public class UsersAdminController(IUserService service, ILogger logger) : ControllerBase { public record CountUsersResponse(int Value); @@ -17,20 +21,17 @@ public class UsersAdminController(IUserService service) : ControllerBase string search ) { + logger.LogTrace("Counting Users"); return new CountUsersResponse(await service.UsersCount(search)); } [HttpGet("/admin/users/count")] public async Task CountUsers() { + logger.LogTrace("Counting Users"); return new CountUsersResponse(await service.UsersCount()); } - - // [HttpGet("/admin/users/count")] - // public async Task CountUsers() - // { - // return new CountUsersResponse(await service.UsersCount()); - // } + [HttpGet("/admin/users")] public async Task> ListUsers( @@ -42,6 +43,8 @@ public class UsersAdminController(IUserService service) : ControllerBase string? search ) { + logger.LogTrace("Listing Users"); + var result = await service.ListUsers(start, n, search); return result; } @@ -52,6 +55,8 @@ public class UsersAdminController(IUserService service) : ControllerBase int id ) { + logger.LogTrace("Getting a specific User ({})", id); + var result = await service.GetUser(id); if (result == null) return NotFound(); @@ -73,6 +78,8 @@ public class UsersAdminController(IUserService service) : ControllerBase [HttpPost("/admin/users")] public Task AddUser([FromBody] AddUserRequest req) { + logger.LogTrace("Adding a User"); + return service.CreateUser(req.Username, req.Email, req.Password, UsersController.DefaultProfilePicture, req.IsAdmin); } @@ -82,6 +89,8 @@ public class UsersAdminController(IUserService service) : ControllerBase [HttpPost("/admin/users/remove-all")] public async Task RemoveUsers([FromBody] RemoveUsersRequest req) { + logger.LogTrace("Removing Users"); + await service.RemoveUsers(req.Identifiers); return Ok(); } @@ -103,6 +112,8 @@ public class UsersAdminController(IUserService service) : ControllerBase { try { + logger.LogTrace("Updating Users"); + await service.UpdateUser(new User(id, req.Username, req.Email, UsersController.DefaultProfilePicture, req.IsAdmin)); return Ok(); diff --git a/UnitTests/AdminTeamsControllerTest.cs b/UnitTests/AdminTeamsControllerTest.cs index 57296ed..2bfa33d 100644 --- a/UnitTests/AdminTeamsControllerTest.cs +++ b/UnitTests/AdminTeamsControllerTest.cs @@ -3,6 +3,7 @@ using DbServices; using FluentAssertions; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using Model; using StubContext; @@ -21,7 +22,8 @@ public class AdminTeamsControllerTest ); context.Database.EnsureCreated(); var controller = new TeamsAdminController( - new DbTeamService(context) + new DbTeamService(context), + new LoggerFactory().CreateLogger() ); return (controller, context); diff --git a/UnitTests/AdminUserControllerTest.cs b/UnitTests/AdminUserControllerTest.cs index 861cf66..14d05b1 100644 --- a/UnitTests/AdminUserControllerTest.cs +++ b/UnitTests/AdminUserControllerTest.cs @@ -4,6 +4,7 @@ using DbServices; using FluentAssertions; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using Model; using StubContext; @@ -23,7 +24,7 @@ public class AdminUserControllerTest ); context.Database.EnsureCreated(); var service = new DbUserService(context); - return new UsersAdminController(service); + return new UsersAdminController(service, new LoggerFactory().CreateLogger()); } From 7d932dac22c9d03abdaf43e682c27ed762d5797d Mon Sep 17 00:00:00 2001 From: maxime Date: Sun, 17 Mar 2024 11:14:15 +0100 Subject: [PATCH 2/2] add sonar --- ci/.drone.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ci/.drone.yml b/ci/.drone.yml index 2555b1d..675e23a 100644 --- a/ci/.drone.yml +++ b/ci/.drone.yml @@ -6,15 +6,22 @@ name: "CI/CD" steps: - image: mcr.microsoft.com/dotnet/sdk:8.0 - name: "Run Tests" + name: "Run Tests and sonar" commands: - - dotnet test + - apt update && apt install openjdk-17-jre -y + - dotnet tool install --global dotnet-sonarscanner + - dotnet tool install --global dotnet-coverage + - export PATH="$PATH:/root/.dotnet/tools" + - dotnet sonarscanner begin /k:"IQBall-WebAPI" /d:sonar.host.url="https://codefirst.iut.uca.fr/sonar" /d:sonar.login="sqp_b16ad09dcce1b9dde920e313b10c2fe85566624c" + - dotnet build + - dotnet-coverage collect "dotnet test" -f xml -o "coverage.xml" + - dotnet sonarscanner end /d:sonar.login="sqp_b16ad09dcce1b9dde920e313b10c2fe85566624c" - image: plugins/docker name: "build and push docker image" depends_on: - - "Run Tests" + - "Run Tests and sonar" settings: dockerfile: ci/API.dockerfile context: .