80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
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
|
|
}
|