private async Task UpdateOdds(EPS3838Sport sport)
        {
            var sinceKey = $"Odds_{(int)sport}";

            await using var db = _serviceProvider.CreateScope().ServiceProvider.GetRequiredService <AppDatabase>();

            var since = await db.Sinces.FirstOrDefaultAsync(f => f.For == sinceKey);

            if (since == null)
            {
                since = new DBSince {
                    For = sinceKey
                };
                await db.Sinces.AddAsync(since);
            }

            var line = await _ps3838Client.OddsV3Async(sport, EPS3838OddsFormat.Decimal, "USD", false, since : since.Value);

            since.Value = line.Last;

            foreach (var @event in line.Leagues.SelectMany(s => s.Events))
            {
                var mainPeriod = @event.Periods.FirstOrDefault(w => w.Number == 0);
                if (mainPeriod?.Moneyline == null)
                {
                    continue;
                }

                var dbEvent = await db.Events.FirstOrDefaultAsync(f => f.Id == @event.Id);

                if (dbEvent == null)
                {
                    continue;
                }

                var item = new DBLine
                {
                    EventId         = dbEvent.Id,
                    T1              = mainPeriod.Moneyline.Home,
                    T2              = mainPeriod.Moneyline.Draw,
                    T3              = mainPeriod.Moneyline.Away,
                    WinMaxRiskStake = (int?)mainPeriod.MaxMoneyline ?? 0,
                    Line            = EDBLine.Moneyline
                };

                if (!dbEvent.Lines.Any())
                {
                    item.Type = EDBLineType.Open;
                    await db.Notifies.AddAsync(new DBNotify { EventId = dbEvent.Id, IsExecuted = _initLoad });
                }
                else
                {
                    item.Type = EDBLineType.Move;
                }

                await db.Lines.AddAsync(item);
            }

            await db.SaveChangesAsync();
        }
        private async Task UpdateFixtures(EPS3838Sport sport)
        {
            var sinceKey = $"Fixtures_{(int)sport}";

            await using var db = _serviceProvider.CreateScope().ServiceProvider.GetRequiredService <AppDatabase>();

            var since = await db.Sinces.FirstOrDefaultAsync(f => f.For == sinceKey);

            if (since == null)
            {
                since = new DBSince {
                    For = sinceKey
                };
                await db.Sinces.AddAsync(since);
            }

            var line = await _ps3838Client.FixturesV3Async(sport, since : since.Value);

            since.Value = line.Last;

            foreach (var league in line.League)
            {
                var existLeague = await db.Leagues.FirstOrDefaultAsync(f => f.Id == league.Id);

                if (existLeague == null)
                {
                    existLeague = new DBLeague {
                        Id = league.Id, Name = league.Name, SportId = (int)sport
                    };
                    await db.Leagues.AddAsync(existLeague);
                }

                foreach (var @event in league.Events.Where(w => w.ParentId == null && w.ResultingUnit == EPS3838Unit.Regular))
                {
                    var existEvent = await db.Events.FirstOrDefaultAsync(f => f.Id == @event.Id);

                    if (existEvent == null)
                    {
                        var newEvent = new DBEvent
                        {
                            Id       = @event.Id,
                            Home     = @event.Home,
                            Away     = @event.Away,
                            IsLive   = @event.LiveStatus == EPS3838LiveStatus.Live,
                            IsOpen   = @event.Status != EPS3838EventStatus.Unavailable,
                            StartAt  = @event.Starts,
                            LeagueId = existLeague.Id
                        };

                        await db.Events.AddAsync(newEvent);
                    }
                    else
                    {
                        existEvent.IsLive = @event.LiveStatus == EPS3838LiveStatus.Live;
                        existEvent.IsOpen = @event.Status != EPS3838EventStatus.Unavailable;
                    }
                }
            }

            await db.SaveChangesAsync();
        }