soit le code de mon controller :
using [Link];
using [Link];
using [Link];
using [Link];
namespace [Link]
{
[Route("api/[controller]")]
[ApiController]
public class TrainingSessionController : ControllerBase
{
#region Constructor
private readonly ITrainingSession _trainingSession;
private readonly IWebHostEnvironment _webHostEnvironment;
public TrainingSessionController(ITrainingSession trainingSession,
IWebHostEnvironment webHostEnvironment)
{
_trainingSession = trainingSession;
_webHostEnvironment = webHostEnvironment;
}
#endregion
#region Training Session
#region Get Training Sessions List
[HttpGet("training-sessions-list")]
public IActionResult TrainingSessionList()
{
try
{
var trainingSessionList = _trainingSession.GetAllTrainingSessions;
return Ok(trainingSessionList);
}
catch (Exception ex)
{
return BadRequest(ex);
}
}
#endregion
#region Get training Session By Id
[HttpGet("get-training-session-by-id")]
public IActionResult GetTrainingSessionById(Guid id)
{
try
{
var trainingSession = _trainingSession.GetTrainingSessionById(id);
return Ok(trainingSession);
}
catch (Exception ex)
{
return BadRequest(ex);
}
}
#endregion
#region Count Training Sessions
[HttpGet("count-training-sessions")]
public IActionResult CountTrainingSession()
{
try
{
var nb_training_session = _trainingSession.CountTrainingSessions;
return Ok(nb_training_session);
}
catch (Exception ex)
{
return BadRequest(ex);
}
}
#endregion
#region Create Training Session
[HttpPost("create-training-session")]
public IActionResult CreateTrainingSession(TrainingSessionVM
trainingSession, Guid[] participantsList, Guid[] trainersList)
{
var validationResult = new
TrainingSessionVMValidator().Validate(trainingSession);
ResponseVM response =
[Link](validationResult);
if ([Link])
{
try
{
if (_trainingSession.CreateTrainingSession(trainingSession,
participantsList, trainersList))
{
[Link] = true;
[Link] = "Training Session created
successfully.";
return Ok(response);
}
else
{
[Link] = false;
[Link] = "An error occurred while registering the
trainer.";
return Ok(response);
}
}
catch (Exception ex)
{
return BadRequest(response);
}
}
return BadRequest(response);
}
#endregion
#region Update Training Session
[HttpPut("update-training-session")]
public IActionResult UpdateParticipant(TrainingSessionVM trainingSession,
Guid[] participantsList, Guid[] trainersList)
{
var validationResult = new
TrainingSessionVMValidator().Validate(trainingSession);
ResponseVM response =
[Link](validationResult);
if ([Link])
{
try
{
if (_trainingSession.UpdateTrainingSession(trainingSession,
participantsList, trainersList))
{
[Link] = true;
[Link] = "Training Session modified
successfully.";
return Ok(response);
}
else
{
[Link] = false;
[Link] = "An error occurred while registering the
trainer.";
return Ok(response);
}
}
catch (Exception ex)
{
return BadRequest(response);
}
}
return BadRequest(response);
}
#endregion
#region Delete Training Session
[HttpDelete("delete-training-session")]
public IActionResult DeleteTrainingSession(Guid id)
{
ResponseVM response = new ResponseVM();
try
{
if (_trainingSession.DeleteTrainingSession(id))
{
[Link] = true;
[Link] = "Training Session deleted successfully.";
return Ok(response);
}
else
{
[Link] = false;
[Link] = "Error during the operation.";
return Ok(response);
}
}
catch (Exception ex)
{
return BadRequest(response);
}
}
#endregion
#endregion
}
}
soit le code de mon interface :
using [Link];
using [Link];
namespace [Link]
{
public interface ITrainingSession
{
#region Training Session Services Interface
IEnumerable<TrainingSessionVM> GetAllTrainingSessions { get; }
TrainingSession GetTrainingSessionById(Guid trainingSessionId);
bool CreateTrainingSession(TrainingSessionVM trainingSession, Guid[]
participantsList, Guid[] trainersList);
bool UpdateTrainingSession(TrainingSessionVM trainingSession, Guid[]
participantsList, Guid[] trainersList);
bool DeleteTrainingSession(Guid trainingSessionId);
int CountTrainingSessions { get; }
#endregion
}
}
soit le code de mon repository :
using [Link];
using [Link];
using [Link];
using [Link];
using [Link];
namespace [Link]
{
public class TrainingSessionServices : ITrainingSession
{
#region Constructor
private readonly IUnitOfWork _unitOfWork;
protected readonly ILogger _logger;
private readonly IWebHostEnvironment _hostingEnv;
public TrainingSessionServices(IUnitOfWork unitOfWork, ILoggerFactory
loggerFactory,
IWebHostEnvironment hostingEnv)
{
_unitOfWork = unitOfWork;
_logger = [Link]("logs");
_hostingEnv = hostingEnv;
}
#endregion
#region Training Session Services
#region Get All Training Sessions Method
public IEnumerable<TrainingSessionVM> GetAllTrainingSessions =>
_unitOfWork.[Link]
.Where(ts => ![Link])
.Select(ts => new TrainingSessionVM
{
TrainingSessionId = [Link],
Label = [Link],
Description = [Link],
Location = [Link],
NumberOfDate = [Link],
StartingDate = [Link],
EndingDate = [Link],
Status = [Link],
})
.ToList();
#endregion
#region Count Training Sessions Method
public int CountTrainingSessions => _unitOfWork.[Link]();
#endregion
#region Create Training Session Method
public bool CreateTrainingSession(TrainingSessionVM trainingSession, Guid[]
participantsList, Guid[] trainersList)
{
try
{
var trainingSessionObj = new TrainingSession
{
Label = [Link],
Description = [Link],
Location = [Link],
NumberOfDate = [Link],
StartingDate = [Link],
EndingDate = [Link],
Status = [Link],
};
_unitOfWork.[Link](trainingSessionObj);
_unitOfWork.Commit();
foreach (var participantId in participantsList)
{
var trainingSession_participantObj = new
TrainingSessionParticipant
{
TrainingSessionId = [Link],
ParticipantId = participantId,
};
_unitOfWork.[Link](trainingSession_participantObj);
_unitOfWork.Commit();
}
foreach (var trainerId in trainersList)
{
var trainingSession_trainerObj = new TrainingSessionTrainer
{
TrainingSessionId = [Link],
TrainerId = trainerId,
};
_unitOfWork.[Link](trainingSession_trainerObj);
_unitOfWork.Commit();
}
return true;
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex, $"{ex} Error durig the operation: ",
typeof(TrainingSessionServices));
return false;
}
}
#endregion
#region Delete Training Session Method
public bool DeleteTrainingSession(Guid trainingSessionId)
{
try
{
_unitOfWork.[Link](trainingSessionId);
_unitOfWork.Commit();
return true;
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex, $"{ex} Error durig the operation: ",
typeof(TrainingSessionServices));
return false;
}
}
#endregion
#region Get Training Session By Id Method
public TrainingSession GetTrainingSessionById(Guid trainingSessionId)
{
try
{
var trainingSession =
_unitOfWork.[Link](trainingSessionId);
if (trainingSession != null)
{
return trainingSession;
}
_logger.LogError($"Training Session with Id equal to
{trainingSessionId} is not found", typeof(TrainingSessionServices));
return null;
}
catch (Exception ex)
{
_logger.LogError(ex, $"{ex} Error durig the operation: ",
typeof(TrainingSessionServices));
return null;
}
}
#endregion
#region Update Training Session Method
public bool UpdateTrainingSession(TrainingSessionVM trainingSession, Guid[]
participantsList, Guid[] trainersList)
{
try
{
var trainingSessionEntity =
GetTrainingSessionById((Guid)[Link]);
if (trainingSessionEntity != null)
{
var trainingSessionObj = new TrainingSession
{
Id = [Link],
Label = [Link],
Description = [Link],
Location = [Link],
NumberOfDate = [Link],
StartingDate = [Link],
EndingDate = [Link],
Status = [Link],
CreatedAt = [Link],
ModifiedAt = [Link]
};
_unitOfWork.[Link](trainingSessionObj);
_unitOfWork.Commit();
var existingParticipants =
_unitOfWork.[Link]([Link]);
return true;
}
_logger.LogError($"Training Session with Id equal to
{[Link]} is not found",
typeof(TrainingSessionServices));
return false;
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex, $"{ex} Error durig the operation: ",
typeof(TrainingSessionServices));
return false;
}
}
#endregion
#endregion
}
}
soit le code de mon view model :
using [Link];
namespace [Link]
{
public class TrainingSessionVM
{
#region Training Session Formation Properties
/// <summary>
/// Property for storing Training Session Id Key
/// </summary>
public Guid? TrainingSessionId { get; set; }
/// <summary>
/// Property for storing Label
/// </summary>
public string Label { get; set; }
/// <summary>
/// Property for storing Description
/// </summary>
public string Description { get; set; }
/// <summary>
/// Property for storing Location
/// </summary>
public string Location { get; set; }
/// <summary>
/// Property for storing Number Of Date
/// </summary>
public int NumberOfDate { get; set; }
/// <summary>
/// Property for storing Starting Date
/// </summary>
public DateTime StartingDate { get; set; }
/// <summary>
/// Property for storing Ending Date
/// </summary>
public DateTime EndingDate { get; set; }
/// <summary>
/// Property for storing Status
/// </summary>
public TrainingSessionStatus Status { get; set; }
#endregion
}
}
Erreur :
An error occurred while starting the application.
InvalidOperationException: Action
'[Link]
(GestFormAPI)' has more than one parameter that was specified or inferred as bound
from request body. Only one parameter per action may be bound from body. Inspect
the following parameters, and use 'FromQueryAttribute' to specify bound from query,
'FromRouteAttribute' to specify bound from route, and 'FromBodyAttribute' for
parameters to be bound from body:
TrainingSessionVM trainingSession
Guid[] participantsList
Guid[] trainersList