Esempio n. 1
0
        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");
            }
        }
Esempio n. 2
0
 /// <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;
 }
Esempio n. 3
0
 /// <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;
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
 /// <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;
 }
Esempio n. 7
0
 /// <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;
 }