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: p.LogoForDark != ""}, LogoLight: pgtype.Text{String: p.LogoForLight, Valid: p.LogoForLight != ""}, Enabled: true, } if _, err := s.repo.CreateVirtualGameProvider(ctx, createParams); err != nil { return nil, fmt.Errorf("failed to add provider %s: %w", p.ProviderID, err) } } // 4. Always add "popok" provider manually popokParams := dbgen.CreateVirtualGameProviderParams{ ProviderID: "popok", ProviderName: "Popok Gaming", LogoDark: pgtype.Text{String: "/static/logos/popok-dark.png", Valid: true}, // adjust as needed LogoLight: pgtype.Text{String: "/static/logos/popok-light.png", Valid: true}, // adjust as needed Enabled: true, } if _, err := s.repo.CreateVirtualGameProvider(ctx, popokParams); err != nil { return nil, fmt.Errorf("failed to add popok provider: %w", err) } // Optionally also append it to the response for consistency // res.Items = append(res.Items, domain.VirtualGameProvider{ // ProviderID: uuid.New().String(), // ProviderName: "Popok Gaming", // LogoForDark: "/static/logos/popok-dark.png", // LogoForLight: "/static/logos/popok-light.png", // }) return &res, nil }