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