public static async Task SetStarsAccordingToTries( MissionRequest request, IMissionRequestRepository missionRequestRepository) { Expression <Func <MissionRequest, bool> > filter = a => a.MissionId == request.MissionId && a.UserId == request.UserId; var previousRequiests = await missionRequestRepository.GetMissionRequests(new QueryOptions <MissionRequest> { Filter = filter }); var tries = previousRequiests.Count + 1; if (tries <= request.Mission.TriesFor3Stars) { request.StarsCount = 3; } else if (tries <= request.Mission.TriesFor2Stars) { request.StarsCount = 2; } else if (tries <= request.Mission.TriesFor1Star) { request.StarsCount = 1; } else { throw new Exception("Can't pass mission with more tries than allowed"); } }
/// <summary> /// Initializes a new instance of the <see cref="MissionService" /> class. /// </summary> /// <param name="missionRepository">The mission repository.</param> /// <param name="userRepository">The user repository.</param> /// <param name="missionSetRepository">The mission set repository.</param> /// <param name="missionRequestRepository">The mission request repository.</param> /// <param name="hintRequestRepository">The hint request repository.</param> /// <param name="ratingService">The rating service.</param> /// <param name="commonPlacesRepository">The common places repository.</param> public MissionService( IMissionRepository missionRepository, IUserRepository userRepository, IMissionSetRepository missionSetRepository, IMissionRequestRepository missionRequestRepository, IHintRequestRepository hintRequestRepository, RatingService ratingService, ICommonPlacesRepository commonPlacesRepository) { _missionRepository = missionRepository; _userRepository = userRepository; _ratingService = ratingService; _missionSetRepository = missionSetRepository; _missionRequestRepository = missionRequestRepository; _hintRequestRepository = hintRequestRepository; _commonPlacesRepository = commonPlacesRepository; }
/// <summary> /// Initializes a new instance of the <see cref="MissionRequestService" /> class. /// </summary> /// <param name="missionRequestRepository">The mission request repository.</param> /// <param name="missionRepository">The mission repository.</param> /// <param name="userRepository">The user repository.</param> /// <param name="commonPlacesRepository">The _common places repository.</param> /// <param name="ratingService">The rating service.</param> /// <param name="notificationService">The notification service.</param> /// <param name="appCountersService">The application counters service.</param> public MissionRequestService( IMissionRequestRepository missionRequestRepository, IMissionRepository missionRepository, IUserRepository userRepository, ICommonPlacesRepository commonPlacesRepository, RatingService ratingService, NotificationService notificationService, AppCountersService appCountersService) { _missionRequestRepository = missionRequestRepository; _missionRepository = missionRepository; _userRepository = userRepository; _ratingService = ratingService; _notificationService = notificationService; _appCountersService = appCountersService; _commonPlacesRepository = commonPlacesRepository; }
public static async Task <MissionCompletionResult> ProcessIncorrectTry( MissionRequest request, IMissionRepository missionRepository, IMissionRequestRepository missionRequestRepository) { Expression <Func <MissionRequest, bool> > filter = a => a.MissionId == request.MissionId && a.UserId == request.UserId; var previousRequiests = await missionRequestRepository.GetMissionRequests(new QueryOptions <MissionRequest> { Filter = filter }); var tryCount = previousRequiests.Count + 1; if (tryCount >= request.Mission.TriesFor1Star) { request.DeclineReason = "Увы, достигнуто максимальное количество попыток."; await RewardsCalculator.UpdateUserAfterMissionDecline(request, missionRepository); await missionRequestRepository.AddMissionRequest(request); return(new MissionCompletionResult { MissionCompletionStatus = MissionCompletionStatus.Fail, Description = request.DeclineReason }); } var rejectResult = new MissionCompletionResult { MissionCompletionStatus = MissionCompletionStatus.IntermediateFail, TryCount = tryCount }; var failedRequesResult = await missionRequestRepository.AddMissionRequest(request); return(failedRequesResult.Status != OperationResultStatus.Success ? MissionCompletionResult.FromOperationResult(failedRequesResult) : rejectResult); }
internal static async Task <MissionCompletionResult> Process( Type uniqueMissionType, MissionRequest missionRequest, IMissionRequestRepository missionRequestRepository, IUserRepository userRepository, RatingService ratingService) { var oldUserPoints = missionRequest.User.Points; var uniqueMission = GetUniqueMission(uniqueMissionType); var result = await uniqueMission.ProcessRequest(missionRequest); if (result.Status != OperationResultStatus.Success) { return(result); } var requestResult = await missionRequestRepository.AddMissionRequest(missionRequest); if (requestResult.Status != OperationResultStatus.Success) { return(MissionCompletionResult.FromOperationResult(requestResult)); } var userUpdateResult = await userRepository.UpdateUser(missionRequest.User); //after any mission completion user should be updated if (userUpdateResult.Status != OperationResultStatus.Error) { if (!missionRequest.User.Points.HasValue) { throw new Exception($"Points are null for userId {missionRequest.UserId}, mission {missionRequest.MissionId}, status {userUpdateResult.Status}"); } await ratingService.UpdateUserRating(missionRequest.User, oldUserPoints, missionRequest.User.Points.Value); } return(userUpdateResult.Status == OperationResultStatus.Success ? result : MissionCompletionResult.FromOperationResult(userUpdateResult)); }
/// <summary> /// Initializes a new instance of the <see cref="Radar" /> class. /// </summary> /// <param name="missionRepository">The mission repository.</param> /// <param name="missionRequestRepository">The mission request repository.</param> public Radar(IMissionRepository missionRepository, IMissionRequestRepository missionRequestRepository) { _missionRepository = missionRepository; _missionRequestRepository = missionRequestRepository; }
/// <summary> /// Initializes a new instance of the <see cref="Outpost" /> class. /// </summary> /// <param name="missionRepository">The mission repository.</param> /// <param name="missionRequestRepository">The mission request repository.</param> public Outpost(IMissionRepository missionRepository, IMissionRequestRepository missionRequestRepository) { _missionRepository = missionRepository; _missionRequestRepository = missionRequestRepository; }