public async Task <IActionResult> JoinBetGroup([FromBody] JoinBetGroupCommand command) { var user = await GetCurrentUser(); var betGroup = await _dbContext .BetGroups .SingleOrDefaultAsync(q => q.GroupCode == command.GroupCode); if (betGroup == null) { return(NotFound()); } var existingBetUserGroup = await _dbContext .UserBetGroups. SingleOrDefaultAsync(q => q.BetGroupId == betGroup.Id && q.UserId == user.Id); if (existingBetUserGroup != null) { return(Ok(new { betGroup.Name, betGroup.Id })); } var newBetUserGroup = new UserBetGroup() { BetGroupId = betGroup.Id, UserId = user.Id }; _dbContext.Add(newBetUserGroup); await AddEmptyBonusPredictionsForUser(newBetUserGroup); await _dbContext.SaveChangesAsync(); return(Ok(new { betGroup.Name, betGroup.Id })); }
public async Task Run() { var httpClient = _httpClientFactory.CreateClient("LiveScoreAPIClient"); var httpResponseMessage = await httpClient.GetAsync(_liveUrl); var jsonResult = await httpResponseMessage.Content.ReadAsStringAsync(); dynamic result = JsonConvert.DeserializeObject(jsonResult, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None }); var standings = result.standings as JObject; foreach (var group in standings.Properties()) { foreach (var team in group.Children()) { var firstTeamName = team.ElementAt(0)["team"].Value <string>(); var secondTeamName = team.ElementAt(1)["team"].Value <string>(); var groupName = "Group " + team.ElementAt(0)["group"]; var worldcupGroup = _dbContext.WorldCupGroups.Single(q => q.Name == groupName); var firstTeam = _dbContext.Teams.Single(q => q.Name == firstTeamName); var secondTeam = _dbContext.Teams.Single(q => q.Name == secondTeamName); var lastDateOfGroupMatches = _dbContext.Matches.Where(q => q.MatchType == MatchType.Group && q.HomeTeamScore.Team.WorldCupGroupId == worldcupGroup.Id) .Max(q => q.DateTime); if (DateTime.Now > lastDateOfGroupMatches.ToLocalTime()) { worldcupGroup.WinnerId = firstTeam.Id; worldcupGroup.RunnerupId = secondTeam.Id; } } } await _dbContext.SaveChangesAsync(); }
public async Task Run() { var currentMatches = await _dbContext .Matches .Include(m => m.HomeTeamScore.Team) .Include(m => m.AwayTeamScore.Team) .Where(q => q.DateTime.LocalDateTime < DateTime.Now && q.MatchStatus != MatchStatus.Finished) .ToArrayAsync(); if (currentMatches.Length == 0) { return; } var httpClient = _httpClientFactory.CreateClient("LiveScoreAPIClient"); var httpResponseMessage = await httpClient.GetAsync(_liveUrl); var jsonResult = await httpResponseMessage.Content.ReadAsStringAsync(); dynamic result = JsonConvert.DeserializeObject(jsonResult, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None }); JArray fixtures = result.fixtures; foreach (var match in currentMatches) { var homeTeamName = match.HomeTeamScore.Team.Name; var awayTeamName = match.AwayTeamScore.Team.Name; var matchDate = match.DateTime.LocalDateTime; for (int i = 0; i < fixtures.Count; i++) { dynamic fixture = fixtures[i]; var date = DateTime.Parse((string)fixture.date); if (homeTeamName == (string)fixture.homeTeamName && awayTeamName == (string)fixture.awayTeamName && matchDate == date) { string status = fixture.status; if (status == "IN_PLAY") { match.MatchStatus = MatchStatus.InPlay; } else if (status == "FINISHED") { match.MatchStatus = MatchStatus.Finished; } match.HomeTeamScore.PenaltyResult = (short?)fixture.result.penaltyShootout?.goalsHomeTeam; match.AwayTeamScore.PenaltyResult = (short?)fixture.result.penaltyShootout?.goalsAwayTeam; match.HomeTeamScore.MatchResult = (short?)fixture.result.goalsHomeTeam; match.AwayTeamScore.MatchResult = (short?)fixture.result.goalsAwayTeam; try { match.HomeTeamScore.MatchResult = (short?)fixture.result.extraTime.goalsHomeTeam; match.AwayTeamScore.MatchResult = (short?)fixture.result.extraTime.goalsAwayTeam; } catch (Exception) { } } } } await _dbContext.SaveChangesAsync(); }