public async Task <IActionResult> CreateOrUpdateSession([FromRoute] int?userId, [FromBody] WorkoutSessionRequest sessionRequest) { if (userId == null) { return(BadRequest()); } if (!ModelState.IsValid || sessionRequest.CurrentDate.HasValue == false) { return(new UnprocessableEntityObjectResult(ModelState)); } var routines = Mapper.Map <List <WorkoutRoutine> >(sessionRequest.Routines); var exercises = Mapper.Map <List <Exercise> >(sessionRequest.Exercises); var concreteExercises = Mapper.Map <List <ConcreteExercise> >(sessionRequest.ConcreteExercises); var session = await _repository.AddOrUpdateSession(userId, sessionRequest.CurrentDate.Value, routines, exercises, concreteExercises); if (session == null) { return(BadRequest("Add or udpate Failed for Session...")); } var sessionToReturn = Mapper.Map <WorkoutSessionDTO>(session); return(CreatedAtRoute( routeName: "GetSession", routeValues: new { userId = userId, sessionId = sessionToReturn.ID }, value: sessionToReturn)); }