refresh providers list fix

This commit is contained in:
Yared Yemane 2025-08-26 22:01:04 +03:00
parent 858fd6ce24
commit 70f33f1fa9
5 changed files with 77 additions and 28 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)
}
}

View File

@ -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())