public async Task <ActionResult> Create(TrainingSessionInputModel input)
        {
            var userId = this.currentUserService
                         .UserId;

            var result = await this.trainingSessionsService
                         .CreateTrainingSessionAsync(userId, input);


            return(Ok(result));
        }
        public async Task <TrainingSessionDto> CreateTrainingSessionAsync(string userId, TrainingSessionInputModel input)
        {
            var trainingSessionForDb = input.MapTo <TrainingSession>();

            trainingSessionForDb.UserId = userId;

            var messageData = new TrainingSessionCreatedMessage {
                TrainingSessionId = trainingSessionForDb.Id
            };

            var message = new Message(messageData);

            await this.Save(trainingSessionForDb, message);

            await this.publisher.Publish(messageData);

            await this.MarkMessageAsPublished(message.Id);

            var trainingSessionFromDb = await this.context
                                        .TrainingSessions
                                        .Include(x => x.ExercisePractices)
                                        .FirstOrDefaultAsync(x => x.Id == trainingSessionForDb.Id);

            var trainingSessionToReturn = trainingSessionFromDb
                                          .MapTo <TrainingSessionDto>();

            return(trainingSessionToReturn);
        }