public void SaveGuess(GuessMatchInformation guess)
 {
     using (var dctx = new DailySoccer.DAC.EF.DailySoccerModelContainer())
     {
         var selectedLastGuessed = dctx.GuessMatches
             .Where(it => it.Account.GuestAccounts.Any(guestAccount => guestAccount.SecretCode.Equals(guess.AccountSecrectCode, StringComparison.CurrentCultureIgnoreCase)))
             .Where(it => it.MatchId == guess.MatchId)
             .FirstOrDefault();
         var isNewGuess = selectedLastGuessed == null;
         if (isNewGuess)
         {
             var selectedAccount = dctx.Accounts.FirstOrDefault(it => it.GuestAccounts
             .Any(guestAccount => guestAccount.SecretCode.Equals(guess.AccountSecrectCode, StringComparison.CurrentCultureIgnoreCase)));
             if (selectedAccount == null) return;
             dctx.GuessMatches.Add(new DailySoccer.DAC.EF.GuessMatch
             {
                 AccountId = selectedAccount.Id,
                 GuessTeamId = guess.GuessTeamId,
                 MatchId = guess.MatchId,
                 PredictionPoints = guess.PredictionPoints
             });
             dctx.SaveChanges();
         }
         else
         {
             selectedLastGuessed.GuessTeamId = guess.GuessTeamId;
             selectedLastGuessed.PredictionPoints = guess.PredictionPoints;
             dctx.SaveChanges();
         }
     }
 }
Example #2
0
        public GuessMatchRespond GuessMatch(GuessMatchRequest request, DateTime currentTime)
        {
            var invalidRespondData = new GuessMatchRespond
            {
                IsSuccessed = false,
                AccountInfo = new AccountInformation(),
                Matches = Enumerable.Empty<MatchInformation>(),
            };

            var isArgumentsValid = request != null && !string.IsNullOrEmpty(request.UserId);
            if (!isArgumentsValid) return invalidRespondData;

            var accountDac = FacadeRepository.Instance.AccountDataAccess;
            var account = accountDac.GetAccountBySecrectCode(request.UserId);
            if (account == null) return invalidRespondData;

            var limitedPastDate = currentTime.Date.AddDays(-2);
            var limitedFutureDate = currentTime.Date.AddDays(2);
            var selectedMatche = FacadeRepository.Instance.MatchDataAccess.GetAllMatches()
                .Where(it => it.BeginDate.Date >= limitedPastDate)
                .Where(it => it.BeginDate.Date <= limitedFutureDate)
                .FirstOrDefault(it => it.Id == request.MatchId);
            if (selectedMatche == null) return invalidRespondData;

            var isMatchEnableToGuess = !selectedMatche.CompletedDate.HasValue;
            if (isMatchEnableToGuess)
            {
                var updateData = new GuessMatchInformation
                {
                    AccountSecrectCode = request.UserId,
                    MatchId = request.MatchId,
                    GuessTeamId = request.IsCancelGuess ? null : request.IsGuessTeamHome ? new Nullable<int>(selectedMatche.TeamHome.Id) : new Nullable<int>(selectedMatche.TeamAway.Id),
                    PredictionPoints = request.IsCancelGuess ? 0 : request.IsGuessTeamHome ? selectedMatche.TeamHome.CurrentPredictionPoints : selectedMatche.TeamAway.CurrentPredictionPoints
                };
                FacadeRepository.Instance.MatchDataAccess.SaveGuess(updateData);
            }

            var respond = GetMatches(new GetMatchesRequest { UserId = request.UserId }, currentTime);
            return new GuessMatchRespond
            {
                IsSuccessed = true,
                AccountInfo = respond.AccountInfo,
                Matches = respond.Matches
            };
        }