package veli import ( "context" "fmt" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/jackc/pgx/v5/pgtype" ) 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, } // Optional fields if req.Size > 0 { sigParams["size"] = fmt.Sprintf("%d", req.Size) } else { sigParams["size"] = "" } if req.Page > 0 { sigParams["page"] = fmt.Sprintf("%d", req.Page) } else { sigParams["page"] = "" } // 2. Call external API var res domain.ProviderResponse if err := s.client.post(ctx, "/game-lists/public/providers", req, sigParams, &res); err != nil { return nil, fmt.Errorf("failed to fetch providers: %w", err) } // 3. Loop through fetched providers and insert into DB for _, p := range res.Items { createParams := dbgen.CreateVirtualGameProviderParams{ ProviderID: p.ProviderID, ProviderName: p.ProviderName, LogoDark: pgtype.Text{String: p.LogoForDark, Valid: true}, LogoLight: pgtype.Text{String: p.LogoForLight, Valid: true}, Enabled: true, } if _, err := s.repo.CreateVirtualGameProvider(ctx, createParams); err != nil { // Log error but continue with other providers return nil, fmt.Errorf("failed to add provider %s: %w", p.ProviderID, err) } } return &res, nil }