/// <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)); }
/// <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; }