From 70f33f1fa93f7a628cd6a1bcb97195263e71e4c3 Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Tue, 26 Aug 2025 22:01:04 +0300 Subject: [PATCH] refresh providers list fix --- db/query/virtual_games.sql | 3 + gen/db/virtual_games.sql.go | 9 +++ internal/repository/virtual_game.go | 11 ++- .../virtualGame/veli/game_orchestration.go | 10 ++- internal/web_server/cron.go | 72 ++++++++++++------- 5 files changed, 77 insertions(+), 28 deletions(-) diff --git a/db/query/virtual_games.sql b/db/query/virtual_games.sql index 213923a..2cdc7a5 100644 --- a/db/query/virtual_games.sql +++ b/db/query/virtual_games.sql @@ -9,6 +9,9 @@ INSERT INTO virtual_game_providers ( DELETE FROM virtual_game_providers WHERE provider_id = $1; +-- name: DeleteAllVirtualGameProviders :exec +DELETE FROM virtual_game_providers; + -- name: GetVirtualGameProviderByID :one SELECT id, provider_id, provider_name, logo_dark, logo_light, enabled, created_at, updated_at FROM virtual_game_providers diff --git a/gen/db/virtual_games.sql.go b/gen/db/virtual_games.sql.go index 710b5e6..79bce9e 100644 --- a/gen/db/virtual_games.sql.go +++ b/gen/db/virtual_games.sql.go @@ -275,6 +275,15 @@ func (q *Queries) CreateVirtualGameTransaction(ctx context.Context, arg CreateVi return i, err } +const DeleteAllVirtualGameProviders = `-- name: DeleteAllVirtualGameProviders :exec +DELETE FROM virtual_game_providers +` + +func (q *Queries) DeleteAllVirtualGameProviders(ctx context.Context) error { + _, err := q.db.Exec(ctx, DeleteAllVirtualGameProviders) + return err +} + const DeleteVirtualGameProvider = `-- name: DeleteVirtualGameProvider :exec DELETE FROM virtual_game_providers WHERE provider_id = $1 diff --git a/internal/repository/virtual_game.go b/internal/repository/virtual_game.go index 82b7d64..03512a7 100644 --- a/internal/repository/virtual_game.go +++ b/internal/repository/virtual_game.go @@ -15,6 +15,7 @@ type VirtualGameRepository interface { CountVirtualGameProviders(ctx context.Context) (int64, error) CreateVirtualGameProvider(ctx context.Context, arg dbgen.CreateVirtualGameProviderParams) (dbgen.VirtualGameProvider, error) DeleteVirtualGameProvider(ctx context.Context, providerID string) error + DeleteAllVirtualGameProviders(ctx context.Context) error GetVirtualGameProviderByID(ctx context.Context, providerID string) (dbgen.VirtualGameProvider, error) ListVirtualGameProviders(ctx context.Context, limit, offset int32) ([]dbgen.VirtualGameProvider, error) UpdateVirtualGameProviderEnabled(ctx context.Context, providerID string, enabled bool) (dbgen.VirtualGameProvider, error) @@ -93,6 +94,14 @@ func (r *VirtualGameRepo) CreateVirtualGameProvider(ctx context.Context, arg dbg return r.store.queries.CreateVirtualGameProvider(ctx, arg) } +func (r *VirtualGameRepo) RemoveVirtualGameProvider(ctx context.Context, arg dbgen.CreateVirtualGameProviderParams) (dbgen.VirtualGameProvider, error) { + return r.store.queries.CreateVirtualGameProvider(ctx, arg) +} + +func (r *VirtualGameRepo) DeleteAllVirtualGameProviders(ctx context.Context) error { + return r.store.queries.DeleteAllVirtualGameProviders(ctx) +} + func (r *VirtualGameRepo) DeleteVirtualGameProvider(ctx context.Context, providerID string) error { return r.store.queries.DeleteVirtualGameProvider(ctx, providerID) } @@ -103,7 +112,7 @@ func (r *VirtualGameRepo) GetVirtualGameProviderByID(ctx context.Context, provid func (r *VirtualGameRepo) ListVirtualGameProviders(ctx context.Context, limit, offset int32) ([]dbgen.VirtualGameProvider, error) { args := dbgen.ListVirtualGameProvidersParams{ - Limit: limit, + Limit: limit, Offset: offset, } return r.store.queries.ListVirtualGameProviders(ctx, args) diff --git a/internal/services/virtualGame/veli/game_orchestration.go b/internal/services/virtualGame/veli/game_orchestration.go index 59d8d2f..b2187b0 100644 --- a/internal/services/virtualGame/veli/game_orchestration.go +++ b/internal/services/virtualGame/veli/game_orchestration.go @@ -10,6 +10,11 @@ import ( ) func (s *Service) AddProviders(ctx context.Context, req domain.ProviderRequest) (*domain.ProviderResponse, error) { + // 0. Remove all existing providers first + if err := s.repo.DeleteAllVirtualGameProviders(ctx); err != nil { + return nil, fmt.Errorf("failed to clear existing providers: %w", err) + } + // 1. Prepare signature parameters sigParams := map[string]any{ "brandId": req.BrandID, @@ -44,10 +49,9 @@ func (s *Service) AddProviders(ctx context.Context, req domain.ProviderRequest) Enabled: true, } - _, err := s.repo.CreateVirtualGameProvider(ctx, createParams) - if err != nil { + if _, err := s.repo.CreateVirtualGameProvider(ctx, createParams); err != nil { // Log error but continue with other providers - return nil, err + return nil, fmt.Errorf("failed to add provider %s: %w", p.ProviderID, err) } } diff --git a/internal/web_server/cron.go b/internal/web_server/cron.go index 4734886..16f02a4 100644 --- a/internal/web_server/cron.go +++ b/internal/web_server/cron.go @@ -144,8 +144,8 @@ func SetupReportandVirtualGameCronJobs( period string }{ { - spec: "60 0 0 * * *", // 1 Minute - period: "1 minute", + spec: "*/60 * * * * *", // Every 1 minute for testing + period: "test", }, { spec: "0 0 0 * * *", // Daily at midnight @@ -183,33 +183,55 @@ func SetupReportandVirtualGameCronJobs( to = firstOfMonth.Add(-time.Second) default: log.Printf("Unknown period: %s", period) - return + // return } - // --- Generate Reports --- - log.Printf("Running %s report for period %s -> %s", period, from.Format(time.RFC3339), to.Format(time.RFC3339)) - if err := reportService.GenerateReport(ctx, from, to); err != nil { - log.Printf("Error generating %s report: %v", period, err) - } else { - log.Printf("Successfully generated %s report", period) - } - - // --- Fetch and Add Virtual Game Providers (daily only) --- - if period == "1 minute" { - log.Println("Fetching and adding virtual game providers...") - req := domain.ProviderRequest{ - BrandID: os.Getenv("VELI_BRAND_ID"), // adjust to your actual brand ID - ExtraData: true, - Size: 1000, // or any default value - Page: 1, // start from first page - } - - if _, err := virtualGameService.AddProviders(ctx, req); err != nil { - log.Printf("Error adding virtual game providers: %v", err) + // --- Generate Reports (skip for test) --- + if period != "test" { + log.Printf("Running %s report for period %s -> %s", period, from.Format(time.RFC3339), to.Format(time.RFC3339)) + if err := reportService.GenerateReport(ctx, from, to); err != nil { + log.Printf("Error generating %s report: %v", period, err) } else { - log.Println("Successfully added virtual game providers") + log.Printf("Successfully generated %s report", period) } } + + // --- Fetch and Add Virtual Game Providers (daily + test) --- + if period == "daily" || period == "test" { + log.Printf("Fetching and adding virtual game providers (%s)...", period) + + brandID := os.Getenv("VELI_BRAND_ID") + if brandID == "" { + log.Println("VELI_BRAND_ID not set, skipping provider sync") + return + } + + page := 1 + size := 1000 + for { + req := domain.ProviderRequest{ + BrandID: brandID, + ExtraData: true, + Size: int(size), + Page: int(page), + } + + res, err := virtualGameService.AddProviders(ctx, req) + if err != nil { + log.Printf("Error adding virtual game providers on page %d: %v", page, err) + break + } + + log.Printf("[%s] Successfully processed page %d: %d providers", period, page, len(res.Items)) + + if len(res.Items) < size { + // Last page reached + break + } + page++ + } + log.Printf("[%s] Finished fetching and adding virtual game providers", period) + } }); err != nil { log.Fatalf("Failed to schedule %s cron job: %v", period, err) } @@ -219,6 +241,8 @@ func SetupReportandVirtualGameCronJobs( log.Printf("Cron jobs started. Reports will be saved to: %s", outputDir) } + + func ProcessBetCashback(ctx context.Context, betService *betSvc.Service) { c := cron.New(cron.WithSeconds())