pipeline #4

Merged
louis.laborie merged 19 commits from pipeline into main 4 months ago

@ -0,0 +1,75 @@
kind: pipeline
type: docker
name: default
trigger:
event:
- push
steps:
- name: build
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- dotnet restore API_dotnet.sln
- dotnet build API_dotnet.sln -c Release --no-restore
- dotnet publish API_dotnet.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
- name: tests
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- dotnet restore API_dotnet.sln
- dotnet test API_dotnet.sln --no-restore
depends_on: [build]
- name: code-inspection
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet8
secrets: [ SECRET_SONAR_LOGIN ]
environment:
sonar_host: https://codefirst.iut.uca.fr/sonar/
sonar_token:
from_secret: SECRET_SONAR_LOGIN # Secret de Drone
project_key: Optifit_API_ef
commands:
- dotnet restore API_dotnet.sln
- dotnet sonarscanner begin /k:$${project_key} /d:sonar.host.url=$${sonar_host} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.login=$${sonar_token}
- dotnet build API_dotnet.sln -c Release --no-restore
- dotnet test API_dotnet.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish API_dotnet.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
- dotnet sonarscanner end /d:sonar.login=$${sonar_token}
when:
branch:
- master
event:
- push
- pull_request
depends_on: [build,tests]
- name: docker-build-and-push
image: plugins/docker
settings:
dockerfile: Dockerfile
context: .
registry: hub.codefirst.iut.uca.fr
repo: hub.codefirst.iut.uca.fr/louis.laborie/optifit_ef_api
username:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
when:
branch:
- main
- rebase
- pipeline
- name: deploy-container
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
IMAGENAME: hub.codefirst.iut.uca.fr/louis.laborie/optifit_ef_api:latest
CONTAINERNAME: optifit-ef-api
COMMAND: create
OVERWRITE: true
CODEFIRST_CLIENTDRONE_ENV_ASPNETCORE_HTTP_PORTS: 80
ADMINS: louislaborie,tonyfages,anthonyrichard
depends_on:
- docker-build-and-push

@ -0,0 +1,29 @@
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
EXPOSE 8080
EXPOSE 8081
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Infrastructure/Infrastructure.csproj", "Infrastructure/"]
COPY ["Server/Server.csproj", "Server/"]
COPY ["Shared/Shared.csproj", "Shared/"]
RUN dotnet restore "Server/Server.csproj"
COPY . .
WORKDIR "/src/Server"
RUN dotnet build "Server.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "Server.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Server.dll"]

@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc;
using Server.Dto.Request;
using Server.Dto.Response;
using Asp.Versioning;
using Microsoft.AspNetCore.Authorization;
using Server.IServices;
namespace Server.Controller.v1;
@ -39,4 +40,39 @@ public class UsersController : ControllerBase
var alumni = _dataServices.GetUserById(id);
return alumni.Result == null ? NotFound() : Ok(alumni);
}
[HttpPost]
[ProducesResponseType(typeof(ResponseUserDto), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[AllowAnonymous]
public async Task<IActionResult> CreateUser([FromBody] RequestUserDto request)
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var createdUser = await _dataServices.CreateUser(request);
return CreatedAtAction(nameof(GetAlumniById), new { id = createdUser.Id }, createdUser);
}
[HttpPut("{id}")]
[ProducesResponseType(typeof(ResponseUserDto), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[AllowAnonymous]
public async Task<IActionResult> UpdateUser(string id, [FromBody] RequestUserDto request)
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var updatedProgram = await _dataServices.UpdateUser(id, request);
return updatedProgram == null ? NotFound() : Ok(updatedProgram);
}
[HttpDelete("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[AllowAnonymous]
public async Task<IActionResult> DeleteUser(string id)
{
var deleted = await _dataServices.DeleteUser(id);
return deleted ? NoContent() : NotFound();
}
}

@ -9,4 +9,8 @@ public interface IUsersService
{
Task<ResponseUserDto?> GetUserById(string id);
Task<PaginatedResult<ResponseUserDto>> GetUsers(int page, int size, bool ascending = true);
Task<ResponseUserDto?> CreateUser(RequestUserDto request);
Task<ResponseUserDto?> UpdateUser(string id, RequestUserDto request);
Task<bool> DeleteUser(string id);
}

@ -67,9 +67,9 @@ if (app.Environment.IsDevelopment())
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Optifit API v1");
c.RoutePrefix = string.Empty; // Serve Swagger UI at the app's root
});
app.UseHttpsRedirection();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

@ -3,6 +3,9 @@ using Infrastructure.Repositories;
using Server.Dto.Response;
using Server.IServices;
using AutoMapper;
using Azure;
using Infrastructure.Entities;
using Server.Dto.Request;
using Shared;
namespace Server.Services;
@ -31,8 +34,39 @@ public class UsersService : IUsersService
return userDto;
}
public Task<PaginatedResult<ResponseUserDto>> GetUsers(int page, int size, bool ascending = true)
public async Task<PaginatedResult<ResponseUserDto>> GetUsers(int page, int size, bool ascending = true)
{
throw new NotImplementedException();
var users = await _userRepository.GetPaginatedListAsync(page - 1, size, null, null);
var result = _mapper.Map<PaginatedResult<ResponseUserDto>>(users);
return result;
}
public async Task<ResponseUserDto?> CreateUser(RequestUserDto request)
{
var user = _mapper.Map<User>(request);
await _userRepository.InsertAsync(user);
await _context.SaveChangesAsync();
return _mapper.Map<ResponseUserDto>(user);
}
public async Task<ResponseUserDto?> UpdateUser(string id,RequestUserDto request)
{
var user = await _userRepository.GetByIdAsync(id);
if (user == null) return null;
_mapper.Map(request, user);
_userRepository.Update(user);
await _context.SaveChangesAsync();
return _mapper.Map<ResponseUserDto>(user);
}
public async Task<bool> DeleteUser(string id)
{
var user = await _userRepository.GetByIdAsync(id);
if (user == null) return false;
_userRepository.Delete(id);
await _context.SaveChangesAsync();
return true;
}
}

@ -0,0 +1,8 @@
namespace Shared;
public enum ECategory
{
WARM_UP,
TRAINING,
STRETCHING
}

@ -0,0 +1,9 @@
namespace Shared;
public enum ETarget
{
LEG,
ARM,
CARDIO,
HAMSTRING
}
Loading…
Cancel
Save