187 lines
5.5 KiB
Go
187 lines
5.5 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/ports"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
|
|
|
|
func NewMarketSettingStore(s *Store) ports.MarketSettingStore { return s }
|
|
|
|
func (s *Store) InsertGlobalMarketSettings(ctx context.Context, setting domain.CreateGlobalMarketSettings) error {
|
|
err := s.queries.InsertGlobalMarketSettings(ctx, domain.ConvertCreateGlobalMarketSettings(setting))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Store) InsertCompanyMarketSettings(ctx context.Context, setting domain.CreateCompanyMarketSettings) error {
|
|
err := s.queries.InsertCompanyMarketSettings(ctx, domain.ConvertCreateCompanyMarketSettings(setting))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Store) GetAllGlobalMarketSettings(ctx context.Context, filter domain.MarketSettingFilter) ([]domain.MarketSettings, error) {
|
|
settings, err := s.queries.GetAllGlobalMarketSettings(ctx, dbgen.GetAllGlobalMarketSettingsParams{
|
|
Offset: pgtype.Int4{
|
|
Int32: int32(filter.Offset.Value * filter.Limit.Value),
|
|
Valid: filter.Offset.Valid,
|
|
},
|
|
Limit: filter.Limit.ToPG(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return domain.ConvertDBGlobalMarketSettingsList(settings), nil
|
|
}
|
|
|
|
func (s *Store) GetGlobalMarketSettingsByID(ctx context.Context, Id int64) (domain.MarketSettings, error) {
|
|
setting, err := s.queries.GetGlobalMarketSettingsByID(ctx, Id)
|
|
if err != nil {
|
|
return domain.MarketSettings{}, err
|
|
}
|
|
|
|
return domain.ConvertDBGlobalMarketSettings(setting), nil
|
|
}
|
|
|
|
func (s *Store) GetAllCompanyMarketSettings(ctx context.Context, filter domain.CompanyMarketSettingFilter) ([]domain.CompanyMarketSettings, error) {
|
|
settings, err := s.queries.GetAllCompanyMarketSettings(ctx, dbgen.GetAllCompanyMarketSettingsParams{
|
|
Offset: pgtype.Int4{
|
|
Int32: int32(filter.Offset.Value * filter.Limit.Value),
|
|
Valid: filter.Offset.Valid,
|
|
},
|
|
Limit: filter.Limit.ToPG(),
|
|
CompanyID: filter.CompanyID.ToPG(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return domain.ConvertDBCompanyMarketSettingsList(settings), nil
|
|
}
|
|
|
|
func (s *Store) GetCompanyMarketSettings(ctx context.Context, ID int64) (domain.CompanyMarketSettings, error) {
|
|
setting, err := s.queries.GetCompanyMarketSettingsByID(ctx, ID)
|
|
if err != nil {
|
|
return domain.CompanyMarketSettings{}, err
|
|
}
|
|
|
|
return domain.ConvertDBCompanyMarketSettings(setting), nil
|
|
}
|
|
|
|
func (s *Store) GetAllOverrideMarketSettings(ctx context.Context, companyID int64, filter domain.MarketSettingFilter) ([]domain.MarketSettings, error) {
|
|
settings, err := s.queries.GetAllOverrideMarketSettings(ctx, dbgen.GetAllOverrideMarketSettingsParams{
|
|
CompanyID: companyID,
|
|
Offset: pgtype.Int4{
|
|
Int32: int32(filter.Offset.Value * filter.Limit.Value),
|
|
Valid: filter.Offset.Valid,
|
|
},
|
|
Limit: filter.Limit.ToPG(),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return domain.ConvertDBGetAllOverrideMarketSettingsList(settings), nil
|
|
}
|
|
|
|
func (s *Store) GetOverrideMarketSettingByID(ctx context.Context, companyID int64, marketID int64) (domain.MarketSettings, error) {
|
|
setting, err := s.queries.GetOverrideMarketSettingByID(ctx, dbgen.GetOverrideMarketSettingByIDParams{
|
|
CompanyID: companyID,
|
|
MarketID: marketID,
|
|
})
|
|
|
|
if err != nil {
|
|
return domain.MarketSettings{}, nil
|
|
}
|
|
|
|
return domain.ConvertDBGetOverrideMarketSettingsByID(setting), nil
|
|
}
|
|
|
|
func (s *Store) DeleteAllCompanyMarketSettings(ctx context.Context, companyID int64) error {
|
|
err := s.queries.DeleteAllMarketSettingsForCompany(ctx, companyID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Store) DeleteCompanyMarketSettings(ctx context.Context, companyID int64, marketID int64) error {
|
|
err := s.queries.DeleteCompanyMarketSettings(ctx, dbgen.DeleteCompanyMarketSettingsParams{
|
|
MarketID: marketID,
|
|
CompanyID: companyID,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Store) EnsureAllMarketSettingsExist(ctx context.Context) error {
|
|
dbMarketSettings, err := s.GetAllGlobalMarketSettings(ctx, domain.MarketSettingFilter{})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to fetch global market settings: %w", err)
|
|
}
|
|
|
|
dbCompanies, err := s.GetAllCompanies(ctx, domain.CompanyFilter{})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to fetch companies: %w", err)
|
|
}
|
|
existing := map[int64]struct{}{}
|
|
for _, s := range dbMarketSettings {
|
|
existing[s.MarketID] = struct{}{}
|
|
}
|
|
|
|
for id, defaultIsActive := range domain.SupportedMarkets {
|
|
if _, found := existing[id]; !found {
|
|
name, err := domain.GetMarketName(id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = s.InsertGlobalMarketSettings(ctx, domain.CreateGlobalMarketSettings{
|
|
MarketID: id,
|
|
MarketName: name,
|
|
IsActive: defaultIsActive,
|
|
})
|
|
if err != nil{
|
|
return fmt.Errorf("failed to insert market %d (%s): %w", id, name, err)
|
|
}
|
|
}
|
|
|
|
// This is to auto disabled markets that haven't been tested yet
|
|
for _, company := range dbCompanies {
|
|
if company.Slug == "fortunebets" {
|
|
continue
|
|
}
|
|
|
|
if _, found := domain.DisabledMarkets[id]; !found {
|
|
continue
|
|
}
|
|
name, err := domain.GetMarketName(id)
|
|
err = s.InsertCompanyMarketSettings(ctx, domain.CreateCompanyMarketSettings{
|
|
CompanyID: company.ID,
|
|
MarketID: id,
|
|
MarketName: name,
|
|
IsActive: domain.ValidBool{
|
|
Value: false,
|
|
Valid: true,
|
|
},
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to insert company market %d (%s): %w", id, name, err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
|
|
} |