From aa85c67029ffe3af1ab759872f7242a22b5767ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yana=C3=ABl=20GRETTE?= Date: Wed, 13 Jan 2021 15:25:01 +0100 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20d'un=20pseudo=20serveur=20colla?= =?UTF-8?q?borateur=20avec=20les=20impl=C3=A9mentations=20suffisantes=20po?= =?UTF-8?q?ur=20le=20serveur=20EP=20et=20donn=C3=A9es=20g=C3=A9n=C3=A9r?= =?UTF-8?q?=C3=A9es=20al=C3=A9atoirement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Attributes/ValidateModelStateAttribute.cs | 61 + .../Controllers/AdresseApi.cs | 158 + ServeurCollaborateur/Controllers/AgenceApi.cs | 158 + .../Controllers/BusinessUnitApi.cs | 158 + .../Controllers/CollaborateurApi.cs | 461 +++ .../Controllers/PeriodeDessaiApi.cs | 122 + ServeurCollaborateur/Controllers/ProjetApi.cs | 190 + .../Filters/BasePathFilter.cs | 51 + .../GeneratePathParamsValidationFilter.cs | 96 + .../IService/ICollaborateurService.cs | 18 + ServeurCollaborateur/Models/Adresse.cs | 203 + ServeurCollaborateur/Models/Agence.cs | 147 + ServeurCollaborateur/Models/BU.cs | 147 + ServeurCollaborateur/Models/Collaborateur.cs | 388 ++ ServeurCollaborateur/Models/Fonction.cs | 133 + ServeurCollaborateur/Models/Genre.cs | 44 + ServeurCollaborateur/Models/IssuePE.cs | 54 + .../Models/NouveauCollaborateur.cs | 392 ++ ServeurCollaborateur/Models/NouveauProjet.cs | 175 + .../Models/NouvelleAdresse.cs | 189 + ServeurCollaborateur/Models/NouvelleAgence.cs | 133 + ServeurCollaborateur/Models/NouvelleBU.cs | 133 + .../Models/NouvellePeriodeEssai.cs | 175 + ServeurCollaborateur/Models/PeriodeEssai.cs | 189 + ServeurCollaborateur/Models/Projet.cs | 189 + ServeurCollaborateur/Models/Statut.cs | 49 + ServeurCollaborateur/Models/Technologie.cs | 133 + ServeurCollaborateur/Program.cs | 26 + .../Properties/launchSettings.json | 30 + .../ServeurCollaborateur.csproj | 15 + .../Service/CollaborateurService.cs | 89 + ServeurCollaborateur/Startup.cs | 54 + .../appsettings.Development.json | 9 + ServeurCollaborateur/appsettings.json | 10 + .../Debug/netcoreapp3.1/Microsoft.OpenApi.dll | Bin 0 -> 173960 bytes .../Microsoft.Web.Infrastructure.dll | Bin 0 -> 45416 bytes .../Debug/netcoreapp3.1/Newtonsoft.Json.dll | Bin 0 -> 693680 bytes .../ServeurCollaborateur.deps.json | 3679 +++++++++++++++++ .../netcoreapp3.1/ServeurCollaborateur.dll | Bin 0 -> 75776 bytes .../netcoreapp3.1/ServeurCollaborateur.exe | Bin 0 -> 174592 bytes .../netcoreapp3.1/ServeurCollaborateur.pdb | Bin 0 -> 40476 bytes ...erveurCollaborateur.runtimeconfig.dev.json | 8 + .../ServeurCollaborateur.runtimeconfig.json | 13 + .../Swashbuckle.AspNetCore.Annotations.dll | Bin 0 -> 19968 bytes .../Swashbuckle.AspNetCore.Swagger.dll | Bin 0 -> 15872 bytes .../Swashbuckle.AspNetCore.SwaggerGen.dll | Bin 0 -> 80384 bytes .../Debug/netcoreapp3.1/Swashbuckle.Core.dll | Bin 0 -> 4129280 bytes .../System.Net.Http.Formatting.dll | Bin 0 -> 168544 bytes .../netcoreapp3.1/System.Web.Http.WebHost.dll | Bin 0 -> 73312 bytes .../Debug/netcoreapp3.1/System.Web.Http.dll | Bin 0 -> 323168 bytes .../Debug/netcoreapp3.1/WebActivatorEx.dll | Bin 0 -> 10752 bytes .../appsettings.Development.json | 9 + .../bin/Debug/netcoreapp3.1/appsettings.json | 10 + .../collaborateurs - Copier.json | 1483 +++++++ .../Debug/netcoreapp3.1/collaborateurs.json | 1481 +++++++ ServeurCollaborateur/collaborateurs.json | 1481 +++++++ ...CoreApp,Version=v3.1.AssemblyAttributes.cs | 4 + .../ServeurCollaborateur.AssemblyInfo.cs | 23 + ...veurCollaborateur.AssemblyInfoInputs.cache | 1 + ...teur.MvcApplicationPartsAssemblyInfo.cache | 0 ...orateur.MvcApplicationPartsAssemblyInfo.cs | 18 + ...ollaborateur.RazorTargetAssemblyInfo.cache | 1 + .../ServeurCollaborateur.assets.cache | Bin 0 -> 8025 bytes .../ServeurCollaborateur.csproj.CopyComplete | 0 ...llaborateur.csproj.CoreCompileInputs.cache | 1 + ...rCollaborateur.csproj.FileListAbsolute.txt | 35 + ...ollaborateur.csprojAssemblyReference.cache | Bin 0 -> 210715 bytes .../netcoreapp3.1/ServeurCollaborateur.dll | Bin 0 -> 75776 bytes ...erveurCollaborateur.genruntimeconfig.cache | 1 + .../netcoreapp3.1/ServeurCollaborateur.pdb | Bin 0 -> 40476 bytes .../obj/Debug/netcoreapp3.1/apphost.exe | Bin 0 -> 174592 bytes ...llaborateur.StaticWebAssets.Manifest.cache | 0 .../ServeurCollaborateur.StaticWebAssets.xml | 1 + ...veurCollaborateur.csproj.nuget.dgspec.json | 83 + .../ServeurCollaborateur.csproj.nuget.g.props | 18 + ...erveurCollaborateur.csproj.nuget.g.targets | 6 + ServeurCollaborateur/obj/project.assets.json | 519 +++ ServeurCollaborateur/obj/project.nuget.cache | 93 + ServeurCollaborateurSolution.sln | 25 + 79 files changed, 13572 insertions(+) create mode 100644 ServeurCollaborateur/Attributes/ValidateModelStateAttribute.cs create mode 100644 ServeurCollaborateur/Controllers/AdresseApi.cs create mode 100644 ServeurCollaborateur/Controllers/AgenceApi.cs create mode 100644 ServeurCollaborateur/Controllers/BusinessUnitApi.cs create mode 100644 ServeurCollaborateur/Controllers/CollaborateurApi.cs create mode 100644 ServeurCollaborateur/Controllers/PeriodeDessaiApi.cs create mode 100644 ServeurCollaborateur/Controllers/ProjetApi.cs create mode 100644 ServeurCollaborateur/Filters/BasePathFilter.cs create mode 100644 ServeurCollaborateur/Filters/GeneratePathParamsValidationFilter.cs create mode 100644 ServeurCollaborateur/IService/ICollaborateurService.cs create mode 100644 ServeurCollaborateur/Models/Adresse.cs create mode 100644 ServeurCollaborateur/Models/Agence.cs create mode 100644 ServeurCollaborateur/Models/BU.cs create mode 100644 ServeurCollaborateur/Models/Collaborateur.cs create mode 100644 ServeurCollaborateur/Models/Fonction.cs create mode 100644 ServeurCollaborateur/Models/Genre.cs create mode 100644 ServeurCollaborateur/Models/IssuePE.cs create mode 100644 ServeurCollaborateur/Models/NouveauCollaborateur.cs create mode 100644 ServeurCollaborateur/Models/NouveauProjet.cs create mode 100644 ServeurCollaborateur/Models/NouvelleAdresse.cs create mode 100644 ServeurCollaborateur/Models/NouvelleAgence.cs create mode 100644 ServeurCollaborateur/Models/NouvelleBU.cs create mode 100644 ServeurCollaborateur/Models/NouvellePeriodeEssai.cs create mode 100644 ServeurCollaborateur/Models/PeriodeEssai.cs create mode 100644 ServeurCollaborateur/Models/Projet.cs create mode 100644 ServeurCollaborateur/Models/Statut.cs create mode 100644 ServeurCollaborateur/Models/Technologie.cs create mode 100644 ServeurCollaborateur/Program.cs create mode 100644 ServeurCollaborateur/Properties/launchSettings.json create mode 100644 ServeurCollaborateur/ServeurCollaborateur.csproj create mode 100644 ServeurCollaborateur/Service/CollaborateurService.cs create mode 100644 ServeurCollaborateur/Startup.cs create mode 100644 ServeurCollaborateur/appsettings.Development.json create mode 100644 ServeurCollaborateur/appsettings.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.OpenApi.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.Web.Infrastructure.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Newtonsoft.Json.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.deps.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.exe create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.pdb create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.runtimeconfig.dev.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/ServeurCollaborateur.runtimeconfig.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.Annotations.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.Swagger.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.SwaggerGen.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/Swashbuckle.Core.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/System.Net.Http.Formatting.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/System.Web.Http.WebHost.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/System.Web.Http.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/WebActivatorEx.dll create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/appsettings.Development.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/appsettings.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/collaborateurs - Copier.json create mode 100644 ServeurCollaborateur/bin/Debug/netcoreapp3.1/collaborateurs.json create mode 100644 ServeurCollaborateur/collaborateurs.json create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.AssemblyInfo.cs create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.AssemblyInfoInputs.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.MvcApplicationPartsAssemblyInfo.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.MvcApplicationPartsAssemblyInfo.cs create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.RazorTargetAssemblyInfo.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.assets.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.csproj.CopyComplete create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.csproj.CoreCompileInputs.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.csproj.FileListAbsolute.txt create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.csprojAssemblyReference.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.dll create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.genruntimeconfig.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/ServeurCollaborateur.pdb create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/apphost.exe create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/staticwebassets/ServeurCollaborateur.StaticWebAssets.Manifest.cache create mode 100644 ServeurCollaborateur/obj/Debug/netcoreapp3.1/staticwebassets/ServeurCollaborateur.StaticWebAssets.xml create mode 100644 ServeurCollaborateur/obj/ServeurCollaborateur.csproj.nuget.dgspec.json create mode 100644 ServeurCollaborateur/obj/ServeurCollaborateur.csproj.nuget.g.props create mode 100644 ServeurCollaborateur/obj/ServeurCollaborateur.csproj.nuget.g.targets create mode 100644 ServeurCollaborateur/obj/project.assets.json create mode 100644 ServeurCollaborateur/obj/project.nuget.cache create mode 100644 ServeurCollaborateurSolution.sln diff --git a/ServeurCollaborateur/Attributes/ValidateModelStateAttribute.cs b/ServeurCollaborateur/Attributes/ValidateModelStateAttribute.cs new file mode 100644 index 0000000..07cfabe --- /dev/null +++ b/ServeurCollaborateur/Attributes/ValidateModelStateAttribute.cs @@ -0,0 +1,61 @@ +using System.ComponentModel.DataAnnotations; +using System.Reflection; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace IO.Swagger.Attributes +{ + /// + /// Model state validation attribute + /// + public class ValidateModelStateAttribute : ActionFilterAttribute + { + /// + /// Called before the action method is invoked + /// + /// + public override void OnActionExecuting(ActionExecutingContext context) + { + // Per https://blog.markvincze.com/how-to-validate-action-parameters-with-dataannotation-attributes/ + var descriptor = context.ActionDescriptor as ControllerActionDescriptor; + if (descriptor != null) + { + foreach (var parameter in descriptor.MethodInfo.GetParameters()) + { + object args = null; + if (context.ActionArguments.ContainsKey(parameter.Name)) + { + args = context.ActionArguments[parameter.Name]; + } + + ValidateAttributes(parameter, args, context.ModelState); + } + } + + if (!context.ModelState.IsValid) + { + context.Result = new BadRequestObjectResult(context.ModelState); + } + } + + private void ValidateAttributes(ParameterInfo parameter, object args, ModelStateDictionary modelState) + { + foreach (var attributeData in parameter.CustomAttributes) + { + var attributeInstance = parameter.GetCustomAttribute(attributeData.AttributeType); + + var validationAttribute = attributeInstance as ValidationAttribute; + if (validationAttribute != null) + { + var isValid = validationAttribute.IsValid(args); + if (!isValid) + { + modelState.AddModelError(parameter.Name, validationAttribute.FormatErrorMessage(parameter.Name)); + } + } + } + } + } +} diff --git a/ServeurCollaborateur/Controllers/AdresseApi.cs b/ServeurCollaborateur/Controllers/AdresseApi.cs new file mode 100644 index 0000000..3f9fa03 --- /dev/null +++ b/ServeurCollaborateur/Controllers/AdresseApi.cs @@ -0,0 +1,158 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; + +namespace IO.Swagger.Controllers +{ + /// + /// + /// + [ApiController] + public class AdresseApiController : ControllerBase + { + /// + /// ajout d'une nouvelle adresse + /// + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPost] + [Route("/adresses")] + [ValidateModelState] + [SwaggerOperation("AjoutAdresse")] + public virtual IActionResult AjoutAdresse([FromBody]NouvelleAdresse body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// rechercher une adresse + /// + /// rechercher une adresse à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant de l'adresse recherchée + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/adresses/{adresseId}")] + [ValidateModelState] + [SwaggerOperation("ChercherAdresse")] + [SwaggerResponse(statusCode: 200, type: typeof(Adresse), description: "résultat de la recherche")] + public virtual IActionResult ChercherAdresse([FromRoute][Required]long? adresseId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(Adresse)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(Adresse); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher toutes les adresses + /// + /// Cette requette demande de récupérer toutes les adresses existantes + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas d'adresse + [HttpGet] + [Route("/adresses")] + [ValidateModelState] + [SwaggerOperation("ChercherAdresses")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherAdresses() + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n}, {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// mettre à jour une adresse + /// + /// Ce paramêtre permet de renseigner l'identifiant de l'adresse recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/adresses/{adresseId}")] + [ValidateModelState] + [SwaggerOperation("MajAdresse")] + public virtual IActionResult MajAdresse([FromRoute][Required]long? adresseId, [FromBody]NouvelleAdresse body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour une adresse + /// + /// Ce paramêtre permet de renseigner l'identifiant de l'adresse recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/adresses/{adresseId}")] + [ValidateModelState] + [SwaggerOperation("MajAdressepatch")] + public virtual IActionResult MajAdressepatch([FromRoute][Required]long? adresseId, [FromBody]NouvelleAdresse body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Controllers/AgenceApi.cs b/ServeurCollaborateur/Controllers/AgenceApi.cs new file mode 100644 index 0000000..5da33b8 --- /dev/null +++ b/ServeurCollaborateur/Controllers/AgenceApi.cs @@ -0,0 +1,158 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; + +namespace IO.Swagger.Controllers +{ + /// + /// + /// + [ApiController] + public class AgenceApiController : ControllerBase + { + /// + /// ajout d'une nouvelle agence + /// + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPost] + [Route("/agences")] + [ValidateModelState] + [SwaggerOperation("AjoutAgence")] + public virtual IActionResult AjoutAgence([FromBody]NouvelleAgence body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// rechercher une adresse + /// + /// rechercher une agence à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant de l'agence recherchée + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/agences/{agenceId}")] + [ValidateModelState] + [SwaggerOperation("ChercherAgence")] + [SwaggerResponse(statusCode: 200, type: typeof(Agence), description: "résultat de la recherche")] + public virtual IActionResult ChercherAgence([FromRoute][Required]long? agenceId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(Agence)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(Agence); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher toutes les agences + /// + /// Cette requette demande de récupérer toutes les agences existantes + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas d'agence + [HttpGet] + [Route("/agences")] + [ValidateModelState] + [SwaggerOperation("ChercherAgences")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherAgences() + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n}, {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// mettre à jour une agence + /// + /// Ce paramêtre permet de renseigner l'identifiant de l'agence recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/agences/{agenceId}")] + [ValidateModelState] + [SwaggerOperation("MajAgence")] + public virtual IActionResult MajAgence([FromRoute][Required]long? agenceId, [FromBody]NouvelleAgence body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour une agence + /// + /// Ce paramêtre permet de renseigner l'identifiant de l'agence recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/agences/{agenceId}")] + [ValidateModelState] + [SwaggerOperation("MajAgencepatch")] + public virtual IActionResult MajAgencepatch([FromRoute][Required]long? agenceId, [FromBody]NouvelleAgence body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Controllers/BusinessUnitApi.cs b/ServeurCollaborateur/Controllers/BusinessUnitApi.cs new file mode 100644 index 0000000..505bfef --- /dev/null +++ b/ServeurCollaborateur/Controllers/BusinessUnitApi.cs @@ -0,0 +1,158 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; + +namespace IO.Swagger.Controllers +{ + /// + /// + /// + [ApiController] + public class BusinessUnitApiController : ControllerBase + { + /// + /// ajout d'une nouvelle business-unit + /// + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPost] + [Route("/bus")] + [ValidateModelState] + [SwaggerOperation("AjoutBU")] + public virtual IActionResult AjoutBU([FromBody]NouvelleBU body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// rechercher une business-unit + /// + /// rechercher une business-unit à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant de la business-unit recherchée + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/bus/{buId}")] + [ValidateModelState] + [SwaggerOperation("ChercherBU")] + [SwaggerResponse(statusCode: 200, type: typeof(BU), description: "résultat de la recherche")] + public virtual IActionResult ChercherBU([FromRoute][Required]long? buId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(BU)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(BU); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher toutes les business-units + /// + /// Cette requette demande de récupérer toutes les business-units existantes + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de business-unit + [HttpGet] + [Route("/bus")] + [ValidateModelState] + [SwaggerOperation("ChercherBUs")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherBUs() + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n}, {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// mettre à jour une business-unit + /// + /// Ce paramêtre permet de renseigner l'identifiant de la business-unit recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/bus/{buId}")] + [ValidateModelState] + [SwaggerOperation("MajBU")] + public virtual IActionResult MajBU([FromRoute][Required]long? buId, [FromBody]NouvelleBU body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour une business-unit + /// + /// Ce paramêtre permet de renseigner l'identifiant de la business-unit recherchée + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/bus/{buId}")] + [ValidateModelState] + [SwaggerOperation("MajBUpatch")] + public virtual IActionResult MajBUpatch([FromRoute][Required]long? buId, [FromBody]NouvelleBU body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Controllers/CollaborateurApi.cs b/ServeurCollaborateur/Controllers/CollaborateurApi.cs new file mode 100644 index 0000000..0d2e7bb --- /dev/null +++ b/ServeurCollaborateur/Controllers/CollaborateurApi.cs @@ -0,0 +1,461 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; +using ServeurCollaborateur.IService; +using System.Threading.Tasks; + +namespace IO.Swagger.Controllers +{ + + + + /// + /// + /// + [ApiController] + public class CollaborateurApiController : ControllerBase + { + readonly ICollaborateurService collaborateurService; + + public CollaborateurApiController(ICollaborateurService _collaborateurService) + { + collaborateurService = _collaborateurService; + } + /// + /// ajout d'un nouveau collaborateur + /// + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPost] + [Route("/collaborateurs")] + [ValidateModelState] + [SwaggerOperation("AjoutCollab")] + public virtual IActionResult AjoutCollab([FromBody]NouveauCollaborateur body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// rechercher tous les collaborateurs + /// + /// Cette requette demande de récupérer tous les collaborateurs existant + /// Ce paramêtre permet de renseigner la liste des identifiants des collaborateurs recherchés + /// Ce paramêtre permet de filtrer les anciens collaborateurs qui ne sont plus chez Apside + /// Ce paramêtre permet de renseigner la liste des rôles des collaborateurs à récupérer. Si elle est vide ou null, on récupère tout le monde. + /// Ce paramêtre permet de renseigner la liste des identifiants des BU auxquelles sont rattachés les collaborateur + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur + [HttpGet] + [Route("/collaborateurs")] + [ValidateModelState] + [SwaggerOperation("ChercherCollab")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherCollab([FromQuery]List collabsId, [FromQuery]bool? ancienCollaborateur, [FromQuery]List roles, [FromQuery]List buIds) + { + IEnumerable collaborateurs; + try + { + collaborateurs = collaborateurService.GetCollaborateurs(collabsId, ancienCollaborateur, roles, buIds); + } + catch(Exception e) + { + Console.WriteLine(e.Message); + return StatusCode(400, "Ché plus c'est quoi le problème"); + } + return Ok(collaborateurs) ; + } + + /// + /// rechercher tous les collaborateurs d'un Business-unit + /// + /// Cette requette demande de récupérer tous les collaborateurs existant au sein d'une agence + /// Ce paramêtre permet de renseigner l'identifiant de l'agence recherchée + /// Ce paramêtre permet de renseigner la liste des rôles des collaborateurs à récupérer. Si elle est vide ou null, on récupère tout le monde. + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur + [HttpGet] + [Route("/collaborateurs/agence/{agenceId}")] + [ValidateModelState] + [SwaggerOperation("ChercherCollabAgence")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherCollabAgence([FromRoute][Required]long? agenceId, [FromQuery]List roles) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher tous les collaborateurs d'un Business-unit + /// + /// Cette requette demande de récupérer tous les collaborateurs existant au sein d'une business-unit + /// Ce paramêtre permet de renseigner l'identifiant de la business-unit recherchée + /// Ce paramêtre permet de renseigner la liste des rôles des collaborateurs à récupérer. Si elle est vide ou null, on récupère tout le monde. + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur + [HttpGet] + [Route("/collaborateurs/bu/{buId}")] + [ValidateModelState] + [SwaggerOperation("ChercherCollabBU")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherCollabBU([FromRoute][Required]long? buId, [FromQuery]List roles) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher un collaborateur + /// + /// rechercher un collaborateur à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/collaborateurs/{collabId}")] + [ValidateModelState] + [SwaggerOperation("ChercherCollabId")] + [SwaggerResponse(statusCode: 200, type: typeof(Collaborateur), description: "résultat de la recherche")] + public virtual IActionResult ChercherCollabId([FromRoute][Required]Guid? collabId) + { + Collaborateur collaborateur; + try + { + collaborateur = collaborateurService.GetCollaborateurById(collabId); + } + catch(Exception e) + { + return NotFound("Pas trouvé"); + } + return Ok(collaborateur); + } + + /// + /// rechercher un collaborateur + /// + /// rechercher un collaborateur à l'aide de son mail apside + /// Ce paramêtre permet de renseigner le mail apside du collaborateur recherché /!\\ \"@\" doit être changé en \"%40\" /!\\ + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/collaborateurs/mail/{mailApside}")] + [ValidateModelState] + [SwaggerOperation("ChercherCollabMail")] + [SwaggerResponse(statusCode: 200, type: typeof(Collaborateur), description: "résultat de la recherche")] + public virtual IActionResult ChercherCollabMail([FromRoute][Required]string mailApside) + { + Collaborateur collaborateur; + try + { + collaborateur = collaborateurService.GetCollaborateurByMail(mailApside); + } + catch (Exception e) + { + return NotFound("Pas trouvé"); + } + return Ok(collaborateur); + } + + /// + /// rechercher tous les collaborateurs d'un référent + /// + /// Cette requette demande de récupérer tous les collaborateurs d'un référent + /// Ce paramêtre permet de renseigner l'identifiant du référent recherché + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur + [HttpGet] + [Route("/collaborateurs/referent/{refId}")] + [ValidateModelState] + [SwaggerOperation("ChercherCollabRef")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherCollabRef([FromRoute][Required]Guid? refId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher le référent actuel + /// + /// rechercher le référent actuel du collaborateur à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/collaborateurs/{collabId}/referent")] + [ValidateModelState] + [SwaggerOperation("ChercherRefActuelId")] + [SwaggerResponse(statusCode: 200, type: typeof(Collaborateur), description: "résultat de la recherche")] + public virtual IActionResult ChercherRefActuelId([FromRoute][Required]Guid? collabId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(Collaborateur)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(Collaborateur); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher le référent actuel + /// + /// rechercher le référent actuel du collaborateur l'aide de son mail apside + /// Ce paramêtre permet de renseigner le mail apside du collaborateur recherché /!\\ \"@\" doit être changé en \"%40\" /!\\ + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur associé à ce mail + [HttpGet] + [Route("/collaborateurs/{mailApside}/referent")] + [ValidateModelState] + [SwaggerOperation("ChercherRefActuelMail")] + [SwaggerResponse(statusCode: 200, type: typeof(Collaborateur), description: "résultat de la recherche")] + public virtual IActionResult ChercherRefActuelMail([FromRoute][Required]string mailApside) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(Collaborateur)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(Collaborateur); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher les référents + /// + /// rechercher les référents d'un collaborateur à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/collaborateurs/{collabId}/referents")] + [ValidateModelState] + [SwaggerOperation("ChercherRefCollabId")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultat de la recherche")] + public virtual IActionResult ChercherRefCollabId([FromRoute][Required]Guid? collabId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher les référents + /// + /// rechercher les référents d'un collaborateur à l'aide de son mail apside + /// Ce paramêtre permet de renseigner le mail apside du collaborateur recherché /!\\ \"@\" doit être changé en \"%40\" /!\\ + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de collaborateur associé à ce mail + [HttpGet] + [Route("/collaborateurs/{mailApside}/referents")] + [ValidateModelState] + [SwaggerOperation("ChercherRefCollabMail")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultat de la recherche")] + public virtual IActionResult ChercherRefCollabMail([FromRoute][Required]string mailApside) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bus\" : [ null, null ],\n \"id\" : 5,\n \"nom\" : \"nom\"\n },\n \"id\" : 1,\n \"nom\" : \"nom\"\n },\n \"dateNaissance\" : \"2000-01-23\",\n \"mailPerso\" : \"\",\n \"mailApside\" : \"\",\n \"technologiesPref\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"telephone\" : \"telephone\",\n \"dateDepart\" : \"2000-01-23\",\n \"nom\" : \"nom\",\n \"periodeEssai\" : [ {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n }, {\n \"dateDebut\" : \"2000-01-23\",\n \"dateFinPrev\" : \"2000-01-23\",\n \"issuePE\" : \"VALIDEE\",\n \"id\" : 2,\n \"dateFinEffect\" : \"2000-01-23\",\n \"commentaire\" : \"commentaire\"\n } ],\n \"fonctions\" : [ {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n }, {\n \"code\" : \"code\",\n \"intitule\" : \"intitule\"\n } ],\n \"projets\" : [ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n }, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n } ],\n \"genre\" : \"FEMININ\",\n \"adresse\" : {\n \"ville\" : \"ville\",\n \"rue\" : \"rue\",\n \"dateDebut\" : \"2000-01-23\",\n \"id\" : 6,\n \"codePostal\" : \"codePostal\",\n \"dateFin\" : \"2000-01-23\",\n \"pays\" : \"pays\"\n },\n \"dateArrivee\" : \"2000-01-23\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nbEnfants\" : 0,\n \"prenom\" : \"prenom\",\n \"statut\" : \"CADRE\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// mettre à jour un collaborateur + /// + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/collaborateurs/{collabId}")] + [ValidateModelState] + [SwaggerOperation("MajCollab")] + public virtual IActionResult MajCollab([FromRoute][Required]Guid? collabId, [FromBody]NouveauCollaborateur body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour un collaborateur + /// + /// Ce paramêtre permet de renseigner le mail apside du collaborateur recherché /!\\ \"@\" doit être changé en \"%40\" /!\\ + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/collaborateurs/mail/{mailApside}")] + [ValidateModelState] + [SwaggerOperation("MajCollabMail")] + public virtual IActionResult MajCollabMail([FromRoute][Required]string mailApside, [FromBody]NouveauCollaborateur body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour un collaborateur + /// + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/collaborateurs/{collabId}")] + [ValidateModelState] + [SwaggerOperation("MajCollabpatch")] + public virtual IActionResult MajCollabpatch([FromRoute][Required]Guid? collabId, [FromBody]NouveauCollaborateur body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour un collaborateur + /// + /// Ce paramêtre permet de renseigner le mail apside du collaborateur recherché /!\\ \"@\" doit être changé en \"%40\" /!\\ + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/collaborateurs/{mailApside}")] + [ValidateModelState] + [SwaggerOperation("MajCollabpatchMail")] + public virtual IActionResult MajCollabpatchMail([FromRoute][Required]string mailApside, [FromBody]NouveauCollaborateur body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Controllers/PeriodeDessaiApi.cs b/ServeurCollaborateur/Controllers/PeriodeDessaiApi.cs new file mode 100644 index 0000000..308042e --- /dev/null +++ b/ServeurCollaborateur/Controllers/PeriodeDessaiApi.cs @@ -0,0 +1,122 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; + +namespace IO.Swagger.Controllers +{ + /// + /// + /// + [ApiController] + public class PeriodeDessaiApiController : ControllerBase + { + /// + /// mettre à jour la première partie de la péridode d'essai + /// + /// La différence entre la première et celle en cours est que, si une période d'essai est prolongee, il y en a techniquement 2 + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/collaborateurs/{collabId}/PremierePeriodeEssai")] + [ValidateModelState] + [SwaggerOperation("Maj1PE")] + public virtual IActionResult Maj1PE([FromRoute][Required]Guid? collabId, [FromBody]NouvellePeriodeEssai body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour la première partie de la péridode d'essai + /// + /// La différence entre la première et celle en cours est que, si une période d'essai est prolongee, il y en a techniquement 2 + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/collaborateurs/{collabId}/PremierePeriodeEssai")] + [ValidateModelState] + [SwaggerOperation("Maj1PEPatch")] + public virtual IActionResult Maj1PEPatch([FromRoute][Required]Guid? collabId, [FromBody]NouvellePeriodeEssai body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour une péridode d'essai + /// + /// La différence entre la première et celle en cours est que, si une période d'essai est prolongee, il y en a techniquement 2 + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/collaborateurs/{collabId}/PeriodeEssai")] + [ValidateModelState] + [SwaggerOperation("MajPE")] + public virtual IActionResult MajPE([FromRoute][Required]Guid? collabId, [FromBody]NouvellePeriodeEssai body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour une péridode d'essai en cours + /// + /// La différence entre la première et celle en cours est que, si une période d'essai est prolongee, il y en a techniquement 2 + /// Ce paramêtre permet de renseigner l'identifiant du collaborateur recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/collaborateurs/{collabId}/PeriodeEssai")] + [ValidateModelState] + [SwaggerOperation("MajPEPatch")] + public virtual IActionResult MajPEPatch([FromRoute][Required]Guid? collabId, [FromBody]NouvellePeriodeEssai body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Controllers/ProjetApi.cs b/ServeurCollaborateur/Controllers/ProjetApi.cs new file mode 100644 index 0000000..a694ae9 --- /dev/null +++ b/ServeurCollaborateur/Controllers/ProjetApi.cs @@ -0,0 +1,190 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using Swashbuckle.AspNetCore.Annotations; +using Swashbuckle.AspNetCore.SwaggerGen; +using Newtonsoft.Json; +using System.ComponentModel.DataAnnotations; +using IO.Swagger.Attributes; + +using Microsoft.AspNetCore.Authorization; +using IO.Swagger.Models; + +namespace IO.Swagger.Controllers +{ + /// + /// + /// + [ApiController] + public class ProjetApiController : ControllerBase + { + /// + /// ajout d'un nouveau projet + /// + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPost] + [Route("/projets")] + [ValidateModelState] + [SwaggerOperation("AjoutProjet")] + public virtual IActionResult AjoutProjet([FromBody]NouveauProjet body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// rechercher un projet + /// + /// rechercher un projet à l'aide de son identifiant + /// Ce paramêtre permet de renseigner l'identifiant du projet recherché + /// résultat de la recherche + /// Mauvais paramètre + /// il n'y a pas de d'objet recherché possédant cet id + [HttpGet] + [Route("/projets/{projetId}")] + [ValidateModelState] + [SwaggerOperation("ChercherProjet")] + [SwaggerResponse(statusCode: 200, type: typeof(Projet), description: "résultat de la recherche")] + public virtual IActionResult ChercherProjet([FromRoute][Required]long? projetId) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(Projet)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "{\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n}"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject(exampleJson) + : default(Projet); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher toutes les projets + /// + /// Cette requette demande de récupérer tous les projets existants + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de projet + [HttpGet] + [Route("/projets")] + [ValidateModelState] + [SwaggerOperation("ChercherProjets")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherProjets() + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n}, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// rechercher tous les projets + /// + /// Cette requette demande de récupérer tous les projets existants + /// Ce paramêtre permet de renseigner le nom du client lié au projet + /// résultats de la recherche + /// Mauvais paramètre + /// il n'y a pas de projet + [HttpGet] + [Route("/projets/{nomClient}")] + [ValidateModelState] + [SwaggerOperation("ChercherProjetsClient")] + [SwaggerResponse(statusCode: 200, type: typeof(List), description: "résultats de la recherche")] + public virtual IActionResult ChercherProjetsClient([FromRoute][Required]string nomClient) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200, default(List)); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(404); + string exampleJson = null; + exampleJson = "[ {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n}, {\n \"debut\" : \"2000-01-23\",\n \"client\" : \"client\",\n \"description\" : \"description\",\n \"fin\" : \"2000-01-23\",\n \"id\" : 5,\n \"nom\" : \"nom\"\n} ]"; + + var example = exampleJson != null + ? JsonConvert.DeserializeObject>(exampleJson) + : default(List); //TODO: Change the data returned + return new ObjectResult(example); + } + + /// + /// mettre à jour un projet + /// + /// Ce paramêtre permet de renseigner l'identifiant du projet recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPut] + [Route("/projets/{projetId}")] + [ValidateModelState] + [SwaggerOperation("MajProjet")] + public virtual IActionResult MajProjet([FromRoute][Required]long? projetId, [FromBody]NouveauProjet body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + + /// + /// mettre à jour un projet + /// + /// Ce paramêtre permet de renseigner l'identifiant du projet recherché + /// + /// Opération terminée avec succès + /// Mauvais paramètre + [HttpPatch] + [Route("/projets/{projetId}")] + [ValidateModelState] + [SwaggerOperation("MajProjetpatch")] + public virtual IActionResult MajProjetpatch([FromRoute][Required]long? projetId, [FromBody]NouveauProjet body) + { + //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(200); + + //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... + // return StatusCode(400); + + throw new NotImplementedException(); + } + } +} diff --git a/ServeurCollaborateur/Filters/BasePathFilter.cs b/ServeurCollaborateur/Filters/BasePathFilter.cs new file mode 100644 index 0000000..c9d95d6 --- /dev/null +++ b/ServeurCollaborateur/Filters/BasePathFilter.cs @@ -0,0 +1,51 @@ +using System.Linq; +using System.Text.RegularExpressions; +using Swashbuckle.AspNetCore.Swagger; +using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi.Models; + +namespace IO.Swagger.Filters +{ + /// + /// BasePath Document Filter sets BasePath property of Swagger and removes it from the individual URL paths + /// + public class BasePathFilter : IDocumentFilter + { + /// + /// Constructor + /// + /// BasePath to remove from Operations + public BasePathFilter(string basePath) + { + BasePath = basePath; + } + + /// + /// Gets the BasePath of the Swagger Doc + /// + /// The BasePath of the Swagger Doc + public string BasePath { get; } + + /// + /// Apply the filter + /// + /// OpenApiDocument + /// FilterContext + public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) + { + swaggerDoc.Servers.Add(new OpenApiServer() { Url = this.BasePath }); + + var pathsToModify = swaggerDoc.Paths.Where(p => p.Key.StartsWith(this.BasePath)).ToList(); + + foreach (var path in pathsToModify) + { + if (path.Key.StartsWith(this.BasePath)) + { + string newKey = Regex.Replace(path.Key, $"^{this.BasePath}", string.Empty); + swaggerDoc.Paths.Remove(path.Key); + swaggerDoc.Paths.Add(newKey, path.Value); + } + } + } + } +} diff --git a/ServeurCollaborateur/Filters/GeneratePathParamsValidationFilter.cs b/ServeurCollaborateur/Filters/GeneratePathParamsValidationFilter.cs new file mode 100644 index 0000000..1845e56 --- /dev/null +++ b/ServeurCollaborateur/Filters/GeneratePathParamsValidationFilter.cs @@ -0,0 +1,96 @@ +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace IO.Swagger.Filters +{ + /// + /// Path Parameter Validation Rules Filter + /// + public class GeneratePathParamsValidationFilter : IOperationFilter + { + /// + /// Constructor + /// + /// Operation + /// OperationFilterContext + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + var pars = context.ApiDescription.ParameterDescriptions; + + foreach (var par in pars) + { + var swaggerParam = operation.Parameters.SingleOrDefault(p => p.Name == par.Name); + + var attributes = ((ControllerParameterDescriptor)par.ParameterDescriptor).ParameterInfo.CustomAttributes; + + if (attributes != null && attributes.Count() > 0 && swaggerParam != null) + { + // Required - [Required] + var requiredAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RequiredAttribute)); + if (requiredAttr != null) + { + swaggerParam.Required = true; + } + + // Regex Pattern [RegularExpression] + var regexAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RegularExpressionAttribute)); + if (regexAttr != null) + { + string regex = (string)regexAttr.ConstructorArguments[0].Value; + if (swaggerParam is OpenApiParameter) + { + ((OpenApiParameter)swaggerParam).Schema.Pattern = regex; + } + } + + // String Length [StringLength] + int? minLenght = null, maxLength = null; + var stringLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(StringLengthAttribute)); + if (stringLengthAttr != null) + { + if (stringLengthAttr.NamedArguments.Count == 1) + { + minLenght = (int)stringLengthAttr.NamedArguments.Single(p => p.MemberName == "MinimumLength").TypedValue.Value; + } + maxLength = (int)stringLengthAttr.ConstructorArguments[0].Value; + } + + var minLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MinLengthAttribute)); + if (minLengthAttr != null) + { + minLenght = (int)minLengthAttr.ConstructorArguments[0].Value; + } + + var maxLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MaxLengthAttribute)); + if (maxLengthAttr != null) + { + maxLength = (int)maxLengthAttr.ConstructorArguments[0].Value; + } + + if (swaggerParam is OpenApiParameter) + { + ((OpenApiParameter)swaggerParam).Schema.MinLength = minLenght; + ((OpenApiParameter)swaggerParam).Schema.MaxLength = maxLength; + } + + // Range [Range] + var rangeAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RangeAttribute)); + if (rangeAttr != null) + { + int rangeMin = (int)rangeAttr.ConstructorArguments[0].Value; + int rangeMax = (int)rangeAttr.ConstructorArguments[1].Value; + + if (swaggerParam is OpenApiParameter) + { + ((OpenApiParameter)swaggerParam).Schema.Minimum = rangeMin; + ((OpenApiParameter)swaggerParam).Schema.Maximum = rangeMax; + } + } + } + } + } + } +} diff --git a/ServeurCollaborateur/IService/ICollaborateurService.cs b/ServeurCollaborateur/IService/ICollaborateurService.cs new file mode 100644 index 0000000..21095f6 --- /dev/null +++ b/ServeurCollaborateur/IService/ICollaborateurService.cs @@ -0,0 +1,18 @@ +using IO.Swagger.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace ServeurCollaborateur.IService +{ + public interface ICollaborateurService + { + + public Collaborateur GetCollaborateurById(Guid? id); + public Collaborateur GetCollaborateurByMail(string mail); + public IEnumerable GetCollaborateurs(List collabsId, bool? ancienCollaborateur, List roles, List buIds); + + + } +} diff --git a/ServeurCollaborateur/Models/Adresse.cs b/ServeurCollaborateur/Models/Adresse.cs new file mode 100644 index 0000000..9bfc8e6 --- /dev/null +++ b/ServeurCollaborateur/Models/Adresse.cs @@ -0,0 +1,203 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Adresse : IEquatable + { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Rue + /// + [DataMember(Name="rue")] + public string Rue { get; set; } + + /// + /// Gets or Sets Ville + /// + [DataMember(Name="ville")] + public string Ville { get; set; } + + /// + /// Gets or Sets CodePostal + /// + [DataMember(Name="codePostal")] + public string CodePostal { get; set; } + + /// + /// Gets or Sets Pays + /// + [DataMember(Name="pays")] + public string Pays { get; set; } + + /// + /// Gets or Sets DateDebut + /// + [DataMember(Name="dateDebut")] + public DateTime? DateDebut { get; set; } + + /// + /// Gets or Sets DateFin + /// + [DataMember(Name="dateFin")] + public DateTime? DateFin { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Adresse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Rue: ").Append(Rue).Append("\n"); + sb.Append(" Ville: ").Append(Ville).Append("\n"); + sb.Append(" CodePostal: ").Append(CodePostal).Append("\n"); + sb.Append(" Pays: ").Append(Pays).Append("\n"); + sb.Append(" DateDebut: ").Append(DateDebut).Append("\n"); + sb.Append(" DateFin: ").Append(DateFin).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Adresse)obj); + } + + /// + /// Returns true if Adresse instances are equal + /// + /// Instance of Adresse to be compared + /// Boolean + public bool Equals(Adresse other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + Rue == other.Rue || + Rue != null && + Rue.Equals(other.Rue) + ) && + ( + Ville == other.Ville || + Ville != null && + Ville.Equals(other.Ville) + ) && + ( + CodePostal == other.CodePostal || + CodePostal != null && + CodePostal.Equals(other.CodePostal) + ) && + ( + Pays == other.Pays || + Pays != null && + Pays.Equals(other.Pays) + ) && + ( + DateDebut == other.DateDebut || + DateDebut != null && + DateDebut.Equals(other.DateDebut) + ) && + ( + DateFin == other.DateFin || + DateFin != null && + DateFin.Equals(other.DateFin) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (Rue != null) + hashCode = hashCode * 59 + Rue.GetHashCode(); + if (Ville != null) + hashCode = hashCode * 59 + Ville.GetHashCode(); + if (CodePostal != null) + hashCode = hashCode * 59 + CodePostal.GetHashCode(); + if (Pays != null) + hashCode = hashCode * 59 + Pays.GetHashCode(); + if (DateDebut != null) + hashCode = hashCode * 59 + DateDebut.GetHashCode(); + if (DateFin != null) + hashCode = hashCode * 59 + DateFin.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Adresse left, Adresse right) + { + return Equals(left, right); + } + + public static bool operator !=(Adresse left, Adresse right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Agence.cs b/ServeurCollaborateur/Models/Agence.cs new file mode 100644 index 0000000..380eda7 --- /dev/null +++ b/ServeurCollaborateur/Models/Agence.cs @@ -0,0 +1,147 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Agence : IEquatable + { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Bus + /// + [DataMember(Name="bus")] + public List Bus { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Agence {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Bus: ").Append(Bus).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Agence)obj); + } + + /// + /// Returns true if Agence instances are equal + /// + /// Instance of Agence to be compared + /// Boolean + public bool Equals(Agence other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Bus == other.Bus || + Bus != null && + Bus.SequenceEqual(other.Bus) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Bus != null) + hashCode = hashCode * 59 + Bus.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Agence left, Agence right) + { + return Equals(left, right); + } + + public static bool operator !=(Agence left, Agence right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/BU.cs b/ServeurCollaborateur/Models/BU.cs new file mode 100644 index 0000000..fb9de99 --- /dev/null +++ b/ServeurCollaborateur/Models/BU.cs @@ -0,0 +1,147 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class BU : IEquatable + { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Agence + /// + [DataMember(Name="agence")] + public Agence Agence { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class BU {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Agence: ").Append(Agence).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((BU)obj); + } + + /// + /// Returns true if BU instances are equal + /// + /// Instance of BU to be compared + /// Boolean + public bool Equals(BU other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Agence == other.Agence || + Agence != null && + Agence.Equals(other.Agence) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Agence != null) + hashCode = hashCode * 59 + Agence.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(BU left, BU right) + { + return Equals(left, right); + } + + public static bool operator !=(BU left, BU right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Collaborateur.cs b/ServeurCollaborateur/Models/Collaborateur.cs new file mode 100644 index 0000000..969a115 --- /dev/null +++ b/ServeurCollaborateur/Models/Collaborateur.cs @@ -0,0 +1,388 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Collaborateur : IEquatable + { + /// + /// Gets or Sets Id + /// + [Required] + [DataMember(Name="id")] + public Guid? Id { get; set; } + + /// + /// Gets or Sets Nom + /// + [Required] + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Prenom + /// + [Required] + [DataMember(Name="prenom")] + public string Prenom { get; set; } + + /// + /// Gets or Sets Genre + /// + [DataMember(Name="genre")] + public Genre Genre { get; set; } + + /// + /// Gets or Sets DateNaissance + /// + [DataMember(Name="dateNaissance")] + public DateTime? DateNaissance { get; set; } + + /// + /// Gets or Sets NbEnfants + /// + [DataMember(Name="nbEnfants")] + public int? NbEnfants { get; set; } + + /// + /// Gets or Sets Adresse + /// + [DataMember(Name="adresse")] + public Adresse Adresse { get; set; } + + /// + /// Gets or Sets Telephone + /// + [DataMember(Name="telephone")] + public string Telephone { get; set; } + + /// + /// Gets or Sets MailPerso + /// + [DataMember(Name="mailPerso")] + public string MailPerso { get; set; } + + /// + /// Gets or Sets MailApside + /// + [DataMember(Name="mailApside")] + public string MailApside { get; set; } + + /// + /// Gets or Sets Statut + /// + [DataMember(Name="statut")] + public Statut Statut { get; set; } + + /// + /// Gets or Sets Fonctions + /// + [DataMember(Name="fonctions")] + public List Fonctions { get; set; } + + /// + /// Gets or Sets BusinessUnit + /// + [DataMember(Name="businessUnit")] + public BU BusinessUnit { get; set; } + + /// + /// Gets or Sets Referent + /// + [DataMember(Name="referent")] + public Collaborateur Referent { get; set; } + + /// + /// Gets or Sets Parrain + /// + [DataMember(Name="parrain")] + public Collaborateur Parrain { get; set; } + + /// + /// Gets or Sets Projets + /// + [DataMember(Name="projets")] + public List Projets { get; set; } + + /// + /// Gets or Sets TechnologiesPref + /// + [DataMember(Name="technologiesPref")] + public List TechnologiesPref { get; set; } + + /// + /// Gets or Sets PeriodeEssai + /// + [DataMember(Name="periodeEssai")] + public List PeriodeEssai { get; set; } + + /// + /// Gets or Sets DateArrivee + /// + [DataMember(Name="dateArrivee")] + public DateTime? DateArrivee { get; set; } + + /// + /// Gets or Sets DateDepart + /// + [DataMember(Name="dateDepart")] + public DateTime? DateDepart { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Collaborateur {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Prenom: ").Append(Prenom).Append("\n"); + sb.Append(" Genre: ").Append(Genre).Append("\n"); + sb.Append(" DateNaissance: ").Append(DateNaissance).Append("\n"); + sb.Append(" NbEnfants: ").Append(NbEnfants).Append("\n"); + sb.Append(" Adresse: ").Append(Adresse).Append("\n"); + sb.Append(" Telephone: ").Append(Telephone).Append("\n"); + sb.Append(" MailPerso: ").Append(MailPerso).Append("\n"); + sb.Append(" MailApside: ").Append(MailApside).Append("\n"); + sb.Append(" Statut: ").Append(Statut).Append("\n"); + sb.Append(" Fonctions: ").Append(Fonctions).Append("\n"); + sb.Append(" BusinessUnit: ").Append(BusinessUnit).Append("\n"); + sb.Append(" Referent: ").Append(Referent).Append("\n"); + sb.Append(" Parrain: ").Append(Parrain).Append("\n"); + sb.Append(" Projets: ").Append(Projets).Append("\n"); + sb.Append(" TechnologiesPref: ").Append(TechnologiesPref).Append("\n"); + sb.Append(" PeriodeEssai: ").Append(PeriodeEssai).Append("\n"); + sb.Append(" DateArrivee: ").Append(DateArrivee).Append("\n"); + sb.Append(" DateDepart: ").Append(DateDepart).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Collaborateur)obj); + } + + /// + /// Returns true if Collaborateur instances are equal + /// + /// Instance of Collaborateur to be compared + /// Boolean + public bool Equals(Collaborateur other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Prenom == other.Prenom || + Prenom != null && + Prenom.Equals(other.Prenom) + ) && + ( + Genre == other.Genre || + Genre != null && + Genre.Equals(other.Genre) + ) && + ( + DateNaissance == other.DateNaissance || + DateNaissance != null && + DateNaissance.Equals(other.DateNaissance) + ) && + ( + NbEnfants == other.NbEnfants || + NbEnfants != null && + NbEnfants.Equals(other.NbEnfants) + ) && + ( + Adresse == other.Adresse || + Adresse != null && + Adresse.Equals(other.Adresse) + ) && + ( + Telephone == other.Telephone || + Telephone != null && + Telephone.Equals(other.Telephone) + ) && + ( + MailPerso == other.MailPerso || + MailPerso != null && + MailPerso.Equals(other.MailPerso) + ) && + ( + MailApside == other.MailApside || + MailApside != null && + MailApside.Equals(other.MailApside) + ) && + ( + Statut == other.Statut || + Statut != null && + Statut.Equals(other.Statut) + ) && + ( + Fonctions == other.Fonctions || + Fonctions != null && + Fonctions.SequenceEqual(other.Fonctions) + ) && + ( + BusinessUnit == other.BusinessUnit || + BusinessUnit != null && + BusinessUnit.Equals(other.BusinessUnit) + ) && + ( + Referent == other.Referent || + Referent != null && + Referent.Equals(other.Referent) + ) && + ( + Parrain == other.Parrain || + Parrain != null && + Parrain.Equals(other.Parrain) + ) && + ( + Projets == other.Projets || + Projets != null && + Projets.SequenceEqual(other.Projets) + ) && + ( + TechnologiesPref == other.TechnologiesPref || + TechnologiesPref != null && + TechnologiesPref.SequenceEqual(other.TechnologiesPref) + ) && + ( + PeriodeEssai == other.PeriodeEssai || + PeriodeEssai != null && + PeriodeEssai.SequenceEqual(other.PeriodeEssai) + ) && + ( + DateArrivee == other.DateArrivee || + DateArrivee != null && + DateArrivee.Equals(other.DateArrivee) + ) && + ( + DateDepart == other.DateDepart || + DateDepart != null && + DateDepart.Equals(other.DateDepart) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Prenom != null) + hashCode = hashCode * 59 + Prenom.GetHashCode(); + if (Genre != null) + hashCode = hashCode * 59 + Genre.GetHashCode(); + if (DateNaissance != null) + hashCode = hashCode * 59 + DateNaissance.GetHashCode(); + if (NbEnfants != null) + hashCode = hashCode * 59 + NbEnfants.GetHashCode(); + if (Adresse != null) + hashCode = hashCode * 59 + Adresse.GetHashCode(); + if (Telephone != null) + hashCode = hashCode * 59 + Telephone.GetHashCode(); + if (MailPerso != null) + hashCode = hashCode * 59 + MailPerso.GetHashCode(); + if (MailApside != null) + hashCode = hashCode * 59 + MailApside.GetHashCode(); + if (Statut != null) + hashCode = hashCode * 59 + Statut.GetHashCode(); + if (Fonctions != null) + hashCode = hashCode * 59 + Fonctions.GetHashCode(); + if (BusinessUnit != null) + hashCode = hashCode * 59 + BusinessUnit.GetHashCode(); + if (Referent != null) + hashCode = hashCode * 59 + Referent.GetHashCode(); + if (Parrain != null) + hashCode = hashCode * 59 + Parrain.GetHashCode(); + if (Projets != null) + hashCode = hashCode * 59 + Projets.GetHashCode(); + if (TechnologiesPref != null) + hashCode = hashCode * 59 + TechnologiesPref.GetHashCode(); + if (PeriodeEssai != null) + hashCode = hashCode * 59 + PeriodeEssai.GetHashCode(); + if (DateArrivee != null) + hashCode = hashCode * 59 + DateArrivee.GetHashCode(); + if (DateDepart != null) + hashCode = hashCode * 59 + DateDepart.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Collaborateur left, Collaborateur right) + { + return Equals(left, right); + } + + public static bool operator !=(Collaborateur left, Collaborateur right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Fonction.cs b/ServeurCollaborateur/Models/Fonction.cs new file mode 100644 index 0000000..5af87c3 --- /dev/null +++ b/ServeurCollaborateur/Models/Fonction.cs @@ -0,0 +1,133 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Fonction : IEquatable + { + /// + /// Gets or Sets Code + /// + [DataMember(Name="code")] + public string Code { get; set; } + + /// + /// Gets or Sets Intitule + /// + [DataMember(Name="intitule")] + public string Intitule { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Fonction {\n"); + sb.Append(" Code: ").Append(Code).Append("\n"); + sb.Append(" Intitule: ").Append(Intitule).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Fonction)obj); + } + + /// + /// Returns true if Fonction instances are equal + /// + /// Instance of Fonction to be compared + /// Boolean + public bool Equals(Fonction other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Code == other.Code || + Code != null && + Code.Equals(other.Code) + ) && + ( + Intitule == other.Intitule || + Intitule != null && + Intitule.Equals(other.Intitule) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Code != null) + hashCode = hashCode * 59 + Code.GetHashCode(); + if (Intitule != null) + hashCode = hashCode * 59 + Intitule.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Fonction left, Fonction right) + { + return Equals(left, right); + } + + public static bool operator !=(Fonction left, Fonction right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Genre.cs b/ServeurCollaborateur/Models/Genre.cs new file mode 100644 index 0000000..01f984b --- /dev/null +++ b/ServeurCollaborateur/Models/Genre.cs @@ -0,0 +1,44 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// Gets or Sets Genre + /// + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum Genre + { + /// + /// Enum FEMININEnum for FEMININ + /// + [EnumMember(Value = "FEMININ")] + FEMININEnum = 0, + /// + /// Enum MASCULINEnum for MASCULIN + /// + [EnumMember(Value = "MASCULIN")] + MASCULINEnum = 1, + /// + /// Enum NEUTREEnum for NEUTRE + /// + [EnumMember(Value = "NEUTRE")] + NEUTREEnum = 2 } +} diff --git a/ServeurCollaborateur/Models/IssuePE.cs b/ServeurCollaborateur/Models/IssuePE.cs new file mode 100644 index 0000000..10d015a --- /dev/null +++ b/ServeurCollaborateur/Models/IssuePE.cs @@ -0,0 +1,54 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// Gets or Sets IssuePE + /// + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum IssuePE + { + /// + /// Enum VALIDEEEnum for VALIDEE + /// + [EnumMember(Value = "VALIDEE")] + VALIDEEEnum = 0, + /// + /// Enum PROLONGEECOLLABEnum for PROLONGEE_COLLAB + /// + [EnumMember(Value = "PROLONGEE_COLLAB")] + PROLONGEECOLLABEnum = 1, + /// + /// Enum PROLONGEEAPSIDEEnum for PROLONGEE_APSIDE + /// + [EnumMember(Value = "PROLONGEE_APSIDE")] + PROLONGEEAPSIDEEnum = 2, + /// + /// Enum ARRETEECOLLABEnum for ARRETEE_COLLAB + /// + [EnumMember(Value = "ARRETEE_COLLAB")] + ARRETEECOLLABEnum = 3, + /// + /// Enum ARRETEEAPSIDEEnum for ARRETEE_APSIDE + /// + [EnumMember(Value = "ARRETEE_APSIDE")] + ARRETEEAPSIDEEnum = 4 } +} diff --git a/ServeurCollaborateur/Models/NouveauCollaborateur.cs b/ServeurCollaborateur/Models/NouveauCollaborateur.cs new file mode 100644 index 0000000..fd4448c --- /dev/null +++ b/ServeurCollaborateur/Models/NouveauCollaborateur.cs @@ -0,0 +1,392 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouveauCollaborateur : IEquatable + { + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Prenom + /// + [DataMember(Name="prenom")] + public string Prenom { get; set; } + + /// + /// Gets or Sets Genre + /// + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum GenreEnum + { + /// + /// Enum FEMININEnum for FEMININ + /// + [EnumMember(Value = "FEMININ")] + FEMININEnum = 0, + /// + /// Enum MASCULINEnum for MASCULIN + /// + [EnumMember(Value = "MASCULIN")] + MASCULINEnum = 1, + /// + /// Enum NEUTREEnum for NEUTRE + /// + [EnumMember(Value = "NEUTRE")] + NEUTREEnum = 2 } + + /// + /// Gets or Sets Genre + /// + [DataMember(Name="genre")] + public GenreEnum? Genre { get; set; } + + /// + /// Gets or Sets DateNaissance + /// + [DataMember(Name="dateNaissance")] + public DateTime? DateNaissance { get; set; } + + /// + /// Gets or Sets NbEnfants + /// + [DataMember(Name="nbEnfants")] + public int? NbEnfants { get; set; } + + /// + /// Gets or Sets Adresse + /// + [DataMember(Name="adresse")] + public string Adresse { get; set; } + + /// + /// Gets or Sets AdresseId + /// + [DataMember(Name="adresseId")] + public long? AdresseId { get; set; } + + /// + /// Gets or Sets Telephone + /// + [DataMember(Name="telephone")] + public string Telephone { get; set; } + + /// + /// Gets or Sets MailPerso + /// + [DataMember(Name="mailPerso")] + public string MailPerso { get; set; } + + /// + /// Gets or Sets MailApside + /// + [DataMember(Name="mailApside")] + public string MailApside { get; set; } + + /// + /// Gets or Sets Statut + /// + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum StatutEnum + { + /// + /// Enum CADREEnum for CADRE + /// + [EnumMember(Value = "CADRE")] + CADREEnum = 0, + /// + /// Enum NONCADREEnum for NON-CADRE + /// + [EnumMember(Value = "NON-CADRE")] + NONCADREEnum = 1, + /// + /// Enum ALTERNANTEnum for ALTERNANT + /// + [EnumMember(Value = "ALTERNANT")] + ALTERNANTEnum = 2, + /// + /// Enum STAGIAIREEnum for STAGIAIRE + /// + [EnumMember(Value = "STAGIAIRE")] + STAGIAIREEnum = 3 } + + /// + /// Gets or Sets Statut + /// + [DataMember(Name="statut")] + public StatutEnum? Statut { get; set; } + + /// + /// Gets or Sets Fonctions + /// + [DataMember(Name="fonctions")] + public string Fonctions { get; set; } + + /// + /// Gets or Sets BusinessUnit + /// + [DataMember(Name="businessUnit")] + public long? BusinessUnit { get; set; } + + /// + /// Gets or Sets Parrain + /// + [DataMember(Name="parrain")] + public long? Parrain { get; set; } + + /// + /// Gets or Sets TechnologiesPref + /// + [DataMember(Name="technologiesPref")] + public List TechnologiesPref { get; set; } + + /// + /// Gets or Sets DateDebutPE + /// + [DataMember(Name="dateDebutPE")] + public DateTime? DateDebutPE { get; set; } + + /// + /// Gets or Sets DateFinPE + /// + [DataMember(Name="dateFinPE")] + public DateTime? DateFinPE { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouveauCollaborateur {\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Prenom: ").Append(Prenom).Append("\n"); + sb.Append(" Genre: ").Append(Genre).Append("\n"); + sb.Append(" DateNaissance: ").Append(DateNaissance).Append("\n"); + sb.Append(" NbEnfants: ").Append(NbEnfants).Append("\n"); + sb.Append(" Adresse: ").Append(Adresse).Append("\n"); + sb.Append(" AdresseId: ").Append(AdresseId).Append("\n"); + sb.Append(" Telephone: ").Append(Telephone).Append("\n"); + sb.Append(" MailPerso: ").Append(MailPerso).Append("\n"); + sb.Append(" MailApside: ").Append(MailApside).Append("\n"); + sb.Append(" Statut: ").Append(Statut).Append("\n"); + sb.Append(" Fonctions: ").Append(Fonctions).Append("\n"); + sb.Append(" BusinessUnit: ").Append(BusinessUnit).Append("\n"); + sb.Append(" Parrain: ").Append(Parrain).Append("\n"); + sb.Append(" TechnologiesPref: ").Append(TechnologiesPref).Append("\n"); + sb.Append(" DateDebutPE: ").Append(DateDebutPE).Append("\n"); + sb.Append(" DateFinPE: ").Append(DateFinPE).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouveauCollaborateur)obj); + } + + /// + /// Returns true if NouveauCollaborateur instances are equal + /// + /// Instance of NouveauCollaborateur to be compared + /// Boolean + public bool Equals(NouveauCollaborateur other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Prenom == other.Prenom || + Prenom != null && + Prenom.Equals(other.Prenom) + ) && + ( + Genre == other.Genre || + Genre != null && + Genre.Equals(other.Genre) + ) && + ( + DateNaissance == other.DateNaissance || + DateNaissance != null && + DateNaissance.Equals(other.DateNaissance) + ) && + ( + NbEnfants == other.NbEnfants || + NbEnfants != null && + NbEnfants.Equals(other.NbEnfants) + ) && + ( + Adresse == other.Adresse || + Adresse != null && + Adresse.Equals(other.Adresse) + ) && + ( + AdresseId == other.AdresseId || + AdresseId != null && + AdresseId.Equals(other.AdresseId) + ) && + ( + Telephone == other.Telephone || + Telephone != null && + Telephone.Equals(other.Telephone) + ) && + ( + MailPerso == other.MailPerso || + MailPerso != null && + MailPerso.Equals(other.MailPerso) + ) && + ( + MailApside == other.MailApside || + MailApside != null && + MailApside.Equals(other.MailApside) + ) && + ( + Statut == other.Statut || + Statut != null && + Statut.Equals(other.Statut) + ) && + ( + Fonctions == other.Fonctions || + Fonctions != null && + Fonctions.Equals(other.Fonctions) + ) && + ( + BusinessUnit == other.BusinessUnit || + BusinessUnit != null && + BusinessUnit.Equals(other.BusinessUnit) + ) && + ( + Parrain == other.Parrain || + Parrain != null && + Parrain.Equals(other.Parrain) + ) && + ( + TechnologiesPref == other.TechnologiesPref || + TechnologiesPref != null && + TechnologiesPref.SequenceEqual(other.TechnologiesPref) + ) && + ( + DateDebutPE == other.DateDebutPE || + DateDebutPE != null && + DateDebutPE.Equals(other.DateDebutPE) + ) && + ( + DateFinPE == other.DateFinPE || + DateFinPE != null && + DateFinPE.Equals(other.DateFinPE) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Prenom != null) + hashCode = hashCode * 59 + Prenom.GetHashCode(); + if (Genre != null) + hashCode = hashCode * 59 + Genre.GetHashCode(); + if (DateNaissance != null) + hashCode = hashCode * 59 + DateNaissance.GetHashCode(); + if (NbEnfants != null) + hashCode = hashCode * 59 + NbEnfants.GetHashCode(); + if (Adresse != null) + hashCode = hashCode * 59 + Adresse.GetHashCode(); + if (AdresseId != null) + hashCode = hashCode * 59 + AdresseId.GetHashCode(); + if (Telephone != null) + hashCode = hashCode * 59 + Telephone.GetHashCode(); + if (MailPerso != null) + hashCode = hashCode * 59 + MailPerso.GetHashCode(); + if (MailApside != null) + hashCode = hashCode * 59 + MailApside.GetHashCode(); + if (Statut != null) + hashCode = hashCode * 59 + Statut.GetHashCode(); + if (Fonctions != null) + hashCode = hashCode * 59 + Fonctions.GetHashCode(); + if (BusinessUnit != null) + hashCode = hashCode * 59 + BusinessUnit.GetHashCode(); + if (Parrain != null) + hashCode = hashCode * 59 + Parrain.GetHashCode(); + if (TechnologiesPref != null) + hashCode = hashCode * 59 + TechnologiesPref.GetHashCode(); + if (DateDebutPE != null) + hashCode = hashCode * 59 + DateDebutPE.GetHashCode(); + if (DateFinPE != null) + hashCode = hashCode * 59 + DateFinPE.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouveauCollaborateur left, NouveauCollaborateur right) + { + return Equals(left, right); + } + + public static bool operator !=(NouveauCollaborateur left, NouveauCollaborateur right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/NouveauProjet.cs b/ServeurCollaborateur/Models/NouveauProjet.cs new file mode 100644 index 0000000..9d190f8 --- /dev/null +++ b/ServeurCollaborateur/Models/NouveauProjet.cs @@ -0,0 +1,175 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouveauProjet : IEquatable + { + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Client + /// + [DataMember(Name="client")] + public string Client { get; set; } + + /// + /// Gets or Sets Debut + /// + [DataMember(Name="debut")] + public DateTime? Debut { get; set; } + + /// + /// Gets or Sets Fin + /// + [DataMember(Name="fin")] + public DateTime? Fin { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name="description")] + public string Description { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouveauProjet {\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Client: ").Append(Client).Append("\n"); + sb.Append(" Debut: ").Append(Debut).Append("\n"); + sb.Append(" Fin: ").Append(Fin).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouveauProjet)obj); + } + + /// + /// Returns true if NouveauProjet instances are equal + /// + /// Instance of NouveauProjet to be compared + /// Boolean + public bool Equals(NouveauProjet other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Client == other.Client || + Client != null && + Client.Equals(other.Client) + ) && + ( + Debut == other.Debut || + Debut != null && + Debut.Equals(other.Debut) + ) && + ( + Fin == other.Fin || + Fin != null && + Fin.Equals(other.Fin) + ) && + ( + Description == other.Description || + Description != null && + Description.Equals(other.Description) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Client != null) + hashCode = hashCode * 59 + Client.GetHashCode(); + if (Debut != null) + hashCode = hashCode * 59 + Debut.GetHashCode(); + if (Fin != null) + hashCode = hashCode * 59 + Fin.GetHashCode(); + if (Description != null) + hashCode = hashCode * 59 + Description.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouveauProjet left, NouveauProjet right) + { + return Equals(left, right); + } + + public static bool operator !=(NouveauProjet left, NouveauProjet right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/NouvelleAdresse.cs b/ServeurCollaborateur/Models/NouvelleAdresse.cs new file mode 100644 index 0000000..2aa16b0 --- /dev/null +++ b/ServeurCollaborateur/Models/NouvelleAdresse.cs @@ -0,0 +1,189 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouvelleAdresse : IEquatable + { + /// + /// Gets or Sets Rue + /// + [DataMember(Name="rue")] + public string Rue { get; set; } + + /// + /// Gets or Sets Ville + /// + [DataMember(Name="ville")] + public string Ville { get; set; } + + /// + /// Gets or Sets CodePostal + /// + [DataMember(Name="codePostal")] + public string CodePostal { get; set; } + + /// + /// Gets or Sets Pays + /// + [DataMember(Name="pays")] + public string Pays { get; set; } + + /// + /// Gets or Sets DateDebut + /// + [DataMember(Name="dateDebut")] + public DateTime? DateDebut { get; set; } + + /// + /// Gets or Sets DateFin + /// + [DataMember(Name="dateFin")] + public DateTime? DateFin { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouvelleAdresse {\n"); + sb.Append(" Rue: ").Append(Rue).Append("\n"); + sb.Append(" Ville: ").Append(Ville).Append("\n"); + sb.Append(" CodePostal: ").Append(CodePostal).Append("\n"); + sb.Append(" Pays: ").Append(Pays).Append("\n"); + sb.Append(" DateDebut: ").Append(DateDebut).Append("\n"); + sb.Append(" DateFin: ").Append(DateFin).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouvelleAdresse)obj); + } + + /// + /// Returns true if NouvelleAdresse instances are equal + /// + /// Instance of NouvelleAdresse to be compared + /// Boolean + public bool Equals(NouvelleAdresse other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Rue == other.Rue || + Rue != null && + Rue.Equals(other.Rue) + ) && + ( + Ville == other.Ville || + Ville != null && + Ville.Equals(other.Ville) + ) && + ( + CodePostal == other.CodePostal || + CodePostal != null && + CodePostal.Equals(other.CodePostal) + ) && + ( + Pays == other.Pays || + Pays != null && + Pays.Equals(other.Pays) + ) && + ( + DateDebut == other.DateDebut || + DateDebut != null && + DateDebut.Equals(other.DateDebut) + ) && + ( + DateFin == other.DateFin || + DateFin != null && + DateFin.Equals(other.DateFin) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Rue != null) + hashCode = hashCode * 59 + Rue.GetHashCode(); + if (Ville != null) + hashCode = hashCode * 59 + Ville.GetHashCode(); + if (CodePostal != null) + hashCode = hashCode * 59 + CodePostal.GetHashCode(); + if (Pays != null) + hashCode = hashCode * 59 + Pays.GetHashCode(); + if (DateDebut != null) + hashCode = hashCode * 59 + DateDebut.GetHashCode(); + if (DateFin != null) + hashCode = hashCode * 59 + DateFin.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouvelleAdresse left, NouvelleAdresse right) + { + return Equals(left, right); + } + + public static bool operator !=(NouvelleAdresse left, NouvelleAdresse right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/NouvelleAgence.cs b/ServeurCollaborateur/Models/NouvelleAgence.cs new file mode 100644 index 0000000..18b792a --- /dev/null +++ b/ServeurCollaborateur/Models/NouvelleAgence.cs @@ -0,0 +1,133 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouvelleAgence : IEquatable + { + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Bus + /// + [DataMember(Name="bus")] + public List Bus { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouvelleAgence {\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Bus: ").Append(Bus).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouvelleAgence)obj); + } + + /// + /// Returns true if NouvelleAgence instances are equal + /// + /// Instance of NouvelleAgence to be compared + /// Boolean + public bool Equals(NouvelleAgence other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Bus == other.Bus || + Bus != null && + Bus.SequenceEqual(other.Bus) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Bus != null) + hashCode = hashCode * 59 + Bus.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouvelleAgence left, NouvelleAgence right) + { + return Equals(left, right); + } + + public static bool operator !=(NouvelleAgence left, NouvelleAgence right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/NouvelleBU.cs b/ServeurCollaborateur/Models/NouvelleBU.cs new file mode 100644 index 0000000..be35323 --- /dev/null +++ b/ServeurCollaborateur/Models/NouvelleBU.cs @@ -0,0 +1,133 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouvelleBU : IEquatable + { + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Agence + /// + [DataMember(Name="agence")] + public Agence Agence { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouvelleBU {\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Agence: ").Append(Agence).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouvelleBU)obj); + } + + /// + /// Returns true if NouvelleBU instances are equal + /// + /// Instance of NouvelleBU to be compared + /// Boolean + public bool Equals(NouvelleBU other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Agence == other.Agence || + Agence != null && + Agence.Equals(other.Agence) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Agence != null) + hashCode = hashCode * 59 + Agence.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouvelleBU left, NouvelleBU right) + { + return Equals(left, right); + } + + public static bool operator !=(NouvelleBU left, NouvelleBU right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/NouvellePeriodeEssai.cs b/ServeurCollaborateur/Models/NouvellePeriodeEssai.cs new file mode 100644 index 0000000..82e2cee --- /dev/null +++ b/ServeurCollaborateur/Models/NouvellePeriodeEssai.cs @@ -0,0 +1,175 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class NouvellePeriodeEssai : IEquatable + { + /// + /// Gets or Sets DateDebut + /// + [DataMember(Name="dateDebut")] + public DateTime? DateDebut { get; set; } + + /// + /// Gets or Sets DateFinPrev + /// + [DataMember(Name="dateFinPrev")] + public DateTime? DateFinPrev { get; set; } + + /// + /// Gets or Sets DateFinEffect + /// + [DataMember(Name="dateFinEffect")] + public DateTime? DateFinEffect { get; set; } + + /// + /// Gets or Sets Commentaire + /// + [DataMember(Name="commentaire")] + public string Commentaire { get; set; } + + /// + /// Gets or Sets IssuePE + /// + [DataMember(Name="issuePE")] + public IssuePE IssuePE { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class NouvellePeriodeEssai {\n"); + sb.Append(" DateDebut: ").Append(DateDebut).Append("\n"); + sb.Append(" DateFinPrev: ").Append(DateFinPrev).Append("\n"); + sb.Append(" DateFinEffect: ").Append(DateFinEffect).Append("\n"); + sb.Append(" Commentaire: ").Append(Commentaire).Append("\n"); + sb.Append(" IssuePE: ").Append(IssuePE).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((NouvellePeriodeEssai)obj); + } + + /// + /// Returns true if NouvellePeriodeEssai instances are equal + /// + /// Instance of NouvellePeriodeEssai to be compared + /// Boolean + public bool Equals(NouvellePeriodeEssai other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + DateDebut == other.DateDebut || + DateDebut != null && + DateDebut.Equals(other.DateDebut) + ) && + ( + DateFinPrev == other.DateFinPrev || + DateFinPrev != null && + DateFinPrev.Equals(other.DateFinPrev) + ) && + ( + DateFinEffect == other.DateFinEffect || + DateFinEffect != null && + DateFinEffect.Equals(other.DateFinEffect) + ) && + ( + Commentaire == other.Commentaire || + Commentaire != null && + Commentaire.Equals(other.Commentaire) + ) && + ( + IssuePE == other.IssuePE || + IssuePE != null && + IssuePE.Equals(other.IssuePE) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (DateDebut != null) + hashCode = hashCode * 59 + DateDebut.GetHashCode(); + if (DateFinPrev != null) + hashCode = hashCode * 59 + DateFinPrev.GetHashCode(); + if (DateFinEffect != null) + hashCode = hashCode * 59 + DateFinEffect.GetHashCode(); + if (Commentaire != null) + hashCode = hashCode * 59 + Commentaire.GetHashCode(); + if (IssuePE != null) + hashCode = hashCode * 59 + IssuePE.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(NouvellePeriodeEssai left, NouvellePeriodeEssai right) + { + return Equals(left, right); + } + + public static bool operator !=(NouvellePeriodeEssai left, NouvellePeriodeEssai right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/PeriodeEssai.cs b/ServeurCollaborateur/Models/PeriodeEssai.cs new file mode 100644 index 0000000..94018ab --- /dev/null +++ b/ServeurCollaborateur/Models/PeriodeEssai.cs @@ -0,0 +1,189 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class PeriodeEssai : IEquatable + { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id")] + public long? Id { get; set; } + + /// + /// Gets or Sets DateDebut + /// + [DataMember(Name="dateDebut")] + public DateTime? DateDebut { get; set; } + + /// + /// Gets or Sets DateFinPrev + /// + [DataMember(Name="dateFinPrev")] + public DateTime? DateFinPrev { get; set; } + + /// + /// Gets or Sets DateFinEffect + /// + [DataMember(Name="dateFinEffect")] + public DateTime? DateFinEffect { get; set; } + + /// + /// Gets or Sets Commentaire + /// + [DataMember(Name="commentaire")] + public string Commentaire { get; set; } + + /// + /// Gets or Sets IssuePE + /// + [DataMember(Name="issuePE")] + public IssuePE IssuePE { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class PeriodeEssai {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" DateDebut: ").Append(DateDebut).Append("\n"); + sb.Append(" DateFinPrev: ").Append(DateFinPrev).Append("\n"); + sb.Append(" DateFinEffect: ").Append(DateFinEffect).Append("\n"); + sb.Append(" Commentaire: ").Append(Commentaire).Append("\n"); + sb.Append(" IssuePE: ").Append(IssuePE).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((PeriodeEssai)obj); + } + + /// + /// Returns true if PeriodeEssai instances are equal + /// + /// Instance of PeriodeEssai to be compared + /// Boolean + public bool Equals(PeriodeEssai other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + DateDebut == other.DateDebut || + DateDebut != null && + DateDebut.Equals(other.DateDebut) + ) && + ( + DateFinPrev == other.DateFinPrev || + DateFinPrev != null && + DateFinPrev.Equals(other.DateFinPrev) + ) && + ( + DateFinEffect == other.DateFinEffect || + DateFinEffect != null && + DateFinEffect.Equals(other.DateFinEffect) + ) && + ( + Commentaire == other.Commentaire || + Commentaire != null && + Commentaire.Equals(other.Commentaire) + ) && + ( + IssuePE == other.IssuePE || + IssuePE != null && + IssuePE.Equals(other.IssuePE) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (DateDebut != null) + hashCode = hashCode * 59 + DateDebut.GetHashCode(); + if (DateFinPrev != null) + hashCode = hashCode * 59 + DateFinPrev.GetHashCode(); + if (DateFinEffect != null) + hashCode = hashCode * 59 + DateFinEffect.GetHashCode(); + if (Commentaire != null) + hashCode = hashCode * 59 + Commentaire.GetHashCode(); + if (IssuePE != null) + hashCode = hashCode * 59 + IssuePE.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(PeriodeEssai left, PeriodeEssai right) + { + return Equals(left, right); + } + + public static bool operator !=(PeriodeEssai left, PeriodeEssai right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Projet.cs b/ServeurCollaborateur/Models/Projet.cs new file mode 100644 index 0000000..eb9b409 --- /dev/null +++ b/ServeurCollaborateur/Models/Projet.cs @@ -0,0 +1,189 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Projet : IEquatable + { + /// + /// Gets or Sets Id + /// + [DataMember(Name="id")] + public long? Id { get; set; } + + /// + /// Gets or Sets Nom + /// + [DataMember(Name="nom")] + public string Nom { get; set; } + + /// + /// Gets or Sets Client + /// + [DataMember(Name="client")] + public string Client { get; set; } + + /// + /// Gets or Sets Debut + /// + [DataMember(Name="debut")] + public DateTime? Debut { get; set; } + + /// + /// Gets or Sets Fin + /// + [DataMember(Name="fin")] + public DateTime? Fin { get; set; } + + /// + /// Gets or Sets Description + /// + [DataMember(Name="description")] + public string Description { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Projet {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Nom: ").Append(Nom).Append("\n"); + sb.Append(" Client: ").Append(Client).Append("\n"); + sb.Append(" Debut: ").Append(Debut).Append("\n"); + sb.Append(" Fin: ").Append(Fin).Append("\n"); + sb.Append(" Description: ").Append(Description).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Projet)obj); + } + + /// + /// Returns true if Projet instances are equal + /// + /// Instance of Projet to be compared + /// Boolean + public bool Equals(Projet other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Id == other.Id || + Id != null && + Id.Equals(other.Id) + ) && + ( + Nom == other.Nom || + Nom != null && + Nom.Equals(other.Nom) + ) && + ( + Client == other.Client || + Client != null && + Client.Equals(other.Client) + ) && + ( + Debut == other.Debut || + Debut != null && + Debut.Equals(other.Debut) + ) && + ( + Fin == other.Fin || + Fin != null && + Fin.Equals(other.Fin) + ) && + ( + Description == other.Description || + Description != null && + Description.Equals(other.Description) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Id != null) + hashCode = hashCode * 59 + Id.GetHashCode(); + if (Nom != null) + hashCode = hashCode * 59 + Nom.GetHashCode(); + if (Client != null) + hashCode = hashCode * 59 + Client.GetHashCode(); + if (Debut != null) + hashCode = hashCode * 59 + Debut.GetHashCode(); + if (Fin != null) + hashCode = hashCode * 59 + Fin.GetHashCode(); + if (Description != null) + hashCode = hashCode * 59 + Description.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Projet left, Projet right) + { + return Equals(left, right); + } + + public static bool operator !=(Projet left, Projet right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Models/Statut.cs b/ServeurCollaborateur/Models/Statut.cs new file mode 100644 index 0000000..bda26c5 --- /dev/null +++ b/ServeurCollaborateur/Models/Statut.cs @@ -0,0 +1,49 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// Gets or Sets Statut + /// + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum Statut + { + /// + /// Enum CADREEnum for CADRE + /// + [EnumMember(Value = "CADRE")] + CADREEnum = 0, + /// + /// Enum NONCADREEnum for NON-CADRE + /// + [EnumMember(Value = "NON-CADRE")] + NONCADREEnum = 1, + /// + /// Enum ALTERNANTEnum for ALTERNANT + /// + [EnumMember(Value = "ALTERNANT")] + ALTERNANTEnum = 2, + /// + /// Enum STAGIAIREEnum for STAGIAIRE + /// + [EnumMember(Value = "STAGIAIRE")] + STAGIAIREEnum = 3 } +} diff --git a/ServeurCollaborateur/Models/Technologie.cs b/ServeurCollaborateur/Models/Technologie.cs new file mode 100644 index 0000000..1f0da77 --- /dev/null +++ b/ServeurCollaborateur/Models/Technologie.cs @@ -0,0 +1,133 @@ +/* + * Service Collaborateur API + * + * Api du service Collaborateur, utilisée pour récupérer les données des collaborateurs d'Apside + * + * OpenAPI spec version: 1.1.3 + * Contact: lilian.gayet@apside-groupe.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; +using Newtonsoft.Json; + +namespace IO.Swagger.Models +{ + /// + /// + /// + [DataContract] + public partial class Technologie : IEquatable + { + /// + /// Gets or Sets Code + /// + [DataMember(Name="code")] + public string Code { get; set; } + + /// + /// Gets or Sets Intitule + /// + [DataMember(Name="intitule")] + public string Intitule { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class Technologie {\n"); + sb.Append(" Code: ").Append(Code).Append("\n"); + sb.Append(" Intitule: ").Append(Intitule).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + return obj.GetType() == GetType() && Equals((Technologie)obj); + } + + /// + /// Returns true if Technologie instances are equal + /// + /// Instance of Technologie to be compared + /// Boolean + public bool Equals(Technologie other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return + ( + Code == other.Code || + Code != null && + Code.Equals(other.Code) + ) && + ( + Intitule == other.Intitule || + Intitule != null && + Intitule.Equals(other.Intitule) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + var hashCode = 41; + // Suitable nullity checks etc, of course :) + if (Code != null) + hashCode = hashCode * 59 + Code.GetHashCode(); + if (Intitule != null) + hashCode = hashCode * 59 + Intitule.GetHashCode(); + return hashCode; + } + } + + #region Operators + #pragma warning disable 1591 + + public static bool operator ==(Technologie left, Technologie right) + { + return Equals(left, right); + } + + public static bool operator !=(Technologie left, Technologie right) + { + return !Equals(left, right); + } + + #pragma warning restore 1591 + #endregion Operators + } +} diff --git a/ServeurCollaborateur/Program.cs b/ServeurCollaborateur/Program.cs new file mode 100644 index 0000000..0267d79 --- /dev/null +++ b/ServeurCollaborateur/Program.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace ServeurCollaborateur +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/ServeurCollaborateur/Properties/launchSettings.json b/ServeurCollaborateur/Properties/launchSettings.json new file mode 100644 index 0000000..45dd7e6 --- /dev/null +++ b/ServeurCollaborateur/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:4300", + "sslPort": 44318 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "collaborateurs/", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "ServeurCollaborateur": { + "commandName": "Project", + "launchBrowser": false, + "launchUrl": "weatherforecast", + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/ServeurCollaborateur/ServeurCollaborateur.csproj b/ServeurCollaborateur/ServeurCollaborateur.csproj new file mode 100644 index 0000000..31c13cd --- /dev/null +++ b/ServeurCollaborateur/ServeurCollaborateur.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp3.1 + + + + + + + + + + + diff --git a/ServeurCollaborateur/Service/CollaborateurService.cs b/ServeurCollaborateur/Service/CollaborateurService.cs new file mode 100644 index 0000000..4d4ad82 --- /dev/null +++ b/ServeurCollaborateur/Service/CollaborateurService.cs @@ -0,0 +1,89 @@ +using IO.Swagger.Models; +using ServeurCollaborateur.IService; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using Newtonsoft.Json; +using System.Threading.Tasks; + +namespace ServeurCollaborateur.Service +{ + public class CollaborateurService : ICollaborateurService + { + private readonly string fileName = "./collaborateurs.json"; + private readonly Dictionary collaborateurs; + + public CollaborateurService() + { + string jsonString = File.ReadAllText(fileName); + + IEnumerable _collaborateurs = JsonConvert.DeserializeObject>(jsonString); + + collaborateurs = new Dictionary(); + + foreach(Collaborateur c in _collaborateurs) + { + collaborateurs.Add(c.Id, c); + Console.WriteLine(c.Nom + " " + c.Prenom); + } + } + + public Collaborateur GetCollaborateurById(Guid? id) + { + bool trouve = collaborateurs.TryGetValue(id, out Collaborateur collaborateur); + if (!trouve) + { + throw new Exception("Collaborateur not found"); + } + return collaborateur; + } + + public Collaborateur GetCollaborateurByMail(string mail) + { + Collaborateur collaborateur = collaborateurs.Values.Where(c => c.MailApside.Equals(mail)).FirstOrDefault(); + if (collaborateur == null) + { + throw new Exception("Collaborateur not found"); + } + return collaborateur; + } + + public IEnumerable GetCollaborateurs(List collabsId, bool? ancienCollaborateur, List roles, List buIds) + { + IEnumerable res_collaborateurs; + if (collabsId != null && collabsId.Count > 0) + { + return collaborateurs.Values.Where(c => collabsId.Contains(c.Id.Value)); + } + else + { + res_collaborateurs = collaborateurs.Values; + } + if(!ancienCollaborateur.HasValue || !ancienCollaborateur.Value) + { + res_collaborateurs = res_collaborateurs.Where(c => c.DateDepart == null); + } + if (roles != null && roles.Count > 0) + { + res_collaborateurs = res_collaborateurs.Where(c => HasRole(c, roles)); + } + if (buIds != null && buIds.Count > 0) + { + res_collaborateurs = res_collaborateurs.Where(c => buIds.Contains(c.BusinessUnit.Id)); + } + return res_collaborateurs; + } + + private bool HasRole(Collaborateur c, List roles) + { + foreach (Fonction fonction in c.Fonctions) + { + if (roles.Contains(fonction.Intitule)) + return true; + } + return false; + } + } +} diff --git a/ServeurCollaborateur/Startup.cs b/ServeurCollaborateur/Startup.cs new file mode 100644 index 0000000..e868dc2 --- /dev/null +++ b/ServeurCollaborateur/Startup.cs @@ -0,0 +1,54 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using ServeurCollaborateur.IService; +using ServeurCollaborateur.Service; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace ServeurCollaborateur +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + services.AddScoped(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseHttpsRedirection(); + + app.UseRouting(); + + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + } + } +} diff --git a/ServeurCollaborateur/appsettings.Development.json b/ServeurCollaborateur/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/ServeurCollaborateur/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/ServeurCollaborateur/appsettings.json b/ServeurCollaborateur/appsettings.json new file mode 100644 index 0000000..d9d9a9b --- /dev/null +++ b/ServeurCollaborateur/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.OpenApi.dll b/ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.OpenApi.dll new file mode 100644 index 0000000000000000000000000000000000000000..14f3deda4c8bb3312e048ad2db667d05e68a4fca GIT binary patch literal 173960 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%0DtVO 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

a{cT>&!L_Np2@md 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 X(C((l{{4eWqKB#{&TB9n2?+WxAn4Io literal 0 HcmV?d00001 diff --git a/ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.Web.Infrastructure.dll b/ServeurCollaborateur/bin/Debug/netcoreapp3.1/Microsoft.Web.Infrastructure.dll new file mode 100644 index 0000000000000000000000000000000000000000..85f1138c57b711e57118dce935ac1863954349a8 GIT binary patch literal 45416 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