/// <inheritdoc cref="ITrainingRoomService.StartTrainingSessionAsync(StartTrainingSessionRequest)"/>
        public async Task <StartTrainingSessionResponse> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest)
        {
            TrainingRoom trainingRoom;
            Expression <Func <TrainingRoom, bool> > predicate = tr => tr.Id.Equals(startTrainingSessionRequest.TrainingRoomId);

            if ((trainingRoom = await _trainingRoomRepository.FindSingleOrDefaultAsync(predicate)) == default)
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training room does not exist."));
            }
            if (!await _userRepository.ExistsAsync(usr => usr.Id.Equals(startTrainingSessionRequest.UserId)))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User does not exist."));
            }

            if (!trainingRoom.IsUserAuthorized(startTrainingSessionRequest.UserId))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User is not authorized"));
            }
            if (!trainingRoom.StartTrainingSession(startTrainingSessionRequest.UserId, out TrainingSession trainingSession))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Failed to start a training session."));
            }

            await _trainingRoomRepository.UpdateAsync(trainingRoom);

            TrainingSessionDto trainingSessionDto = EntityToDtoConverter.Convert <TrainingSessionDto, TrainingSession>(trainingSession);

            return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, trainingSessionDto, "Successfully started a training session.", true));
        }
Esempio n. 2
0
        /// <inheritdoc cref="ITrainingRoomService.StartTrainingSessionAsync(StartTrainingSessionRequest)"/>
        public async Task <StartTrainingSessionResponse> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest)
        {
            Expression <Func <TrainingRoom, bool> > predicate = tr => tr.Id.Equals(startTrainingSessionRequest.TrainingRoomId);

            if (!await _trainingRoomRepository.ExistsAsync(predicate))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training room does not exist."));
            }
            if (!await _userRepository.ExistsAsync(usr => usr.Id.Equals(startTrainingSessionRequest.UserId)))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User does not exist."));
            }

            TrainingRoom trainingRoom = await _trainingRoomRepository.FindSingleByExpressionAsync(predicate);

            if (!trainingRoom.IsUserAuthorized(startTrainingSessionRequest.UserId))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User is not authorized"));
            }
            if (!trainingRoom.StartTrainingSession(startTrainingSessionRequest.UserId, out TrainingSession trainingSession))
            {
                return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Failed to start a training session."));
            }

            await _trainingRoomRepository.UpdateAsync(trainingRoom);

            _trainingSessionOrganismsDictionary.TryAdd(trainingSession.Id, new ConcurrentQueue <Organism>(trainingRoom.Species.SelectMany(sp => sp.LastGenerationOrganisms)));

            TrainingSessionDto trainingSessionDto = EntityToDtoConverter.Convert <TrainingSessionDto, TrainingSession>(trainingSession);

            return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, trainingSessionDto, "Successfully started a training session.", true));
        }
 /// <summary>
 /// Initializes an instance of the <see cref="StartTrainingSessionResponse"/> class.
 /// </summary>
 /// <param name="requestId">The request id.</param>
 /// <param name="trainingSession">The training session.</param>
 /// <param name="message">The message.</param>
 /// <param name="success">The success flag.</param>
 public StartTrainingSessionResponse(Guid requestId, TrainingSessionDto trainingSession, string message, bool success = false) : base(requestId, message, success)
 {
     TrainingSession = trainingSession;
 }