コード例 #1
0
        /// <summary>
        ///     данные о имени  пвп должны быть назначенны зарание
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="candidat"></param>
        /// <param name="setCcToData"></param>
        /// <returns></returns>
        public List <CandidatOut> RegisterCandidate(IDbConnection connection, CandidatOut candidat,
                                                    Action <int> setCcToData)
        {
            candidat.ValidateRegistrate();
            var ccModel = _storeService.BalanceCalcResultCc(connection, candidat.UserId, REGISTER_CANDIDATE_CC_PRICE);
            List <CandidatOut> candidates = null;
            var hasError = false;

            candidates =
                _officerCandidatRepository.GetRegistredOfficerCandidatesByTopPvp(connection, MAX_CANDIDATES_COUNT);

            var minPvp = candidates.Min(i => i.PvpPoint);

            if (candidates.Count == 0 || candidates.Min(i => i.PvpPoint) < candidat.PvpPoint)
            {
                if (_isExistCandidate(connection, candidat.UserId))
                {
                    throw new Exception(Error.CantRegisterCandidatAlreadyExist);
                }

                _createAndSaveNewCandidate(connection, candidat, false);
                if (candidates.Count == MAX_CANDIDATES_COUNT)
                {
                    var idx = candidates.FindLastIndex(i => i.PvpPoint == minPvp);
                    candidates.RemoveAt(idx);
                }
                candidates.Add(candidat);
            }
            else
            {
                hasError = true;
            }

            if (hasError)
            {
                throw new Exception(Error.CantRegisterCandidatNotEnoughPvP);
            }
            // todo переместить в один коннекшен
            var newBalance = _storeService.AddOrUpdateBalance(connection, ccModel);

            setCcToData(newBalance.Quantity);
            return(candidates.OrderByDescending(i => i.PvpPoint).ToList());
        }