28-1 Création (Create)
Commençons par créer un événement via l'API.
Coquille Contrôleur/Service/Repository
Pour procéder à une création d'événements, le contrôleur d'API recevra la requête HTTP
pour la traiter, appelera ensuite le service EvenementService
qui pour sa part appellera la couche de données via EvenementRepository
pour procéder à la sauvegarde.
Contrôleur - EvenementsController#Create
Pour créer un événement via l'API, il sera nécessaire d'avoir une action d'API répondant à la méthode HTTP
POST
et recevant en paramètre un DTO
de type CreerEvenementDto
.
-
Créez une classe
CreerEvenementDto
dans le dossierDtos/Evenements
du projetApplication
.Snowfall.Application/Dtos/Evenements/CreerEvenementDto.csnamespace Snowfall.Application.Dtos.Evenements;
public class CreerEvenementDto
{
public required string Nom { get; set; }
public string? Description { get; set; }
public string? ImagePath { get; set; }
public DateTime Date { get; set; }
public Decimal Prix { get; set; }
public int Capacite { get; set; }
public int VilleId { get; set; }
} -
Ajoutez une entré pour AutoMapper
Snowfall.Web.Api/Configurations/AutoMapperConfig.cspublic class AutoMapperConfig : Profile
{
public AutoMapperConfig()
{
CreateMap<Evenement, EvenementDto>().ReverseMap();
CreateMap<CreerEvenementDto, Evenement>();
CreateMap<Ville, VilleDto>().ReverseMap();
}
}infoOn fait la mappage de façon unidirectionnelle, ça ne fait pas de sens de faire le mapping inverse.
-
Créez la coquille de la fonction
Create
au niveau du contrôleurEvenementsController
Snowfall.Web.Api/Controllers/EvenementsController.cs/// <summary>
/// POST /api/evenements
/// Permets de créer un événement.
/// </summary>
/// <param name="creerEvenementDto">Le DTO d'événement contenant les informations de l'événement à créer</param>
/// <returns>L'événement créé</returns>
[HttpPost]
public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
{
throw new NotImplementedException();
}
Repository - EvenementRepository#Create
Dans un second temps, ajoutons à l'interface du repository la fonction Create
qui prend en paramètre un événement et retourne l'événement créé.
public interface IEvenementRepository
{
Task<List<Evenement>> GetAll();
Task<List<Evenement>> FindByVilleId(int villeId);
Task<Evenement?> FindById(int id);
Task<Evenement> Create(Evenement evenement);
}
Ensuite, il est possible de faire Implement missing members
à partir de l'aide contextuelle de Rider dans la classe EvenementRepository
. Cela ajoutera la fonction Create
à l'implémentation du repository.
public async Task<Evenement> Create(Evenement evenement)
{
throw new NotImplementedException();
}
Vous devez implémenter vous-même le détail de la fonction de création du repository, soit l'insertion dans la base de données. Comme point de départ, vous pouvez vous baser sur la fonction de création de questions.
Service EvenementService#Create
Finalement, dans l'interface IEvenementService
, on ajoute la fonction Create
:
public interface IEvenementService
{
Task<List<Evenement>> GetAll();
Task<List<Evenement>> FindByVilleId(int? villeId);
Task<Evenement?> FindById(int id);
Task<Evenement> Create(Evenement evenement);
}
Pour ensuite implémenter via Implement missing members
la fonction dans EvenementService
et appeler le repository.
public async Task<Evenement> Create(Evenement evenement)
{
return await _evenementRepository.Create(evenement);
}
Compléter EvenementController#Create
Si vous avez complété la requête SQL au niveau du repository pour la sauvegarde, nous avons tous les éléments en place pour compléter la fonction Create
du contrôleur d'événements.
- Premièrement, on
map
le DTO reçu enEvenement
pour être en mesure d'envoyer le tout à la coucheService
.Snowfall.Web.Api/Controllers/EvenementsController.cspublic async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
{
Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);
} - Ensuite, on appelle la couche service pour créer et retourner l'événement.
Snowfall.Web.Api/Controllers/EvenementsController.cs
public async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
{
Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);
evenement = await _evenementService.Create(evenement);
} - Pour finir, on retourne l'événement créé en s'assurant de faire le
mappage
enDTO
.Snowfall.Web.Api/Controllers/EvenementsController.cspublic async Task<IActionResult> Create(CreerEvenementDto creerEvenementDto)
{
Evenement evenement = _mapper.Map<Evenement>(creerEvenementDto);
evenement = await _evenementService.Create(evenement);
return Ok(_mapper.Map<EvenementDto>(evenement));
}
Tester via Postman
ou Scalar
Assurez-vous d'avoir implémenté le détail de la fonction d'insertion Create
du repository!
Pour tester, vous pouvez utiliser Postman
ou Scalar
. Dans le cas de Postman:
- Assurez-vous que votre projet .NET est démarré et recompilé pour contenir les derniers changements
- Assurez-vous de choisir
POST
comme méthodeHTTP
- Entrez comme URL http://[url-de-votre-projet]/api/evenements
- Sélectionner
Body/raw/JSON
et entrer leJSON
pour soumettre un nouvel événement.
Pour obtenir rapidement la version JSON
du DTO
attendu, vous pouvez utiliser Scalar
.
Remarquez que vous pouvez faire le test via Scalar
directement!
Ensuite, utiliser Postman pour soumettre la requête. Si tout se passe bien, vous recevrez une réponse 200 OK
et l'événement nouvellement créé au format JSON
.