187 lines
5.7 KiB
Go
187 lines
5.7 KiB
Go
package domain
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
type CreateOddMarket struct {
|
|
EventID string
|
|
MarketCategory string
|
|
MarketType string
|
|
MarketName string
|
|
MarketID string
|
|
UpdatedAt time.Time
|
|
Odds []map[string]interface{}
|
|
}
|
|
|
|
type OddMarket struct {
|
|
ID int64 `json:"id"`
|
|
EventID string `json:"event_id"`
|
|
MarketType string `json:"market_type"`
|
|
MarketName string `json:"market_name"`
|
|
MarketCategory string `json:"market_category"`
|
|
MarketID string `json:"market_id"`
|
|
RawOdds []json.RawMessage `json:"raw_odds"`
|
|
FetchedAt time.Time `json:"fetched_at"`
|
|
ExpiresAt time.Time `json:"expires_at"`
|
|
DefaultIsActive bool `json:"is_active"`
|
|
IsMonitored bool `json:"is_monitored"`
|
|
IsLive bool `json:"is_live"`
|
|
Status EventStatus `json:"status"`
|
|
Source EventSource `json:"source"`
|
|
}
|
|
type OddMarketWithSettings struct {
|
|
ID int64 `json:"id"`
|
|
EventID string `json:"event_id"`
|
|
MarketType string `json:"market_type"`
|
|
MarketName string `json:"market_name"`
|
|
MarketCategory string `json:"market_category"`
|
|
MarketID string `json:"market_id"`
|
|
RawOdds []json.RawMessage `json:"raw_odds"`
|
|
FetchedAt time.Time `json:"fetched_at"`
|
|
ExpiresAt time.Time `json:"expires_at"`
|
|
IsActive bool `json:"is_active"`
|
|
}
|
|
|
|
type OddMarketSettings struct {
|
|
CompanyID int64
|
|
OddMarketID int64
|
|
IsActive ValidBool
|
|
CustomRawOdds string
|
|
UpdatedAt time.Time
|
|
}
|
|
type CreateOddMarketSettings struct {
|
|
CompanyID int64
|
|
OddMarketID int64
|
|
IsActive ValidBool
|
|
CustomRawOdds []map[string]interface{}
|
|
}
|
|
|
|
// type RawOddsByMarketID struct {
|
|
// ID int64 `json:"id"`
|
|
// MarketName string `json:"market_name"`
|
|
// Handicap string `json:"handicap"`
|
|
// RawOdds []json.RawMessage `json:"raw_odds"`
|
|
// FetchedAt time.Time `json:"fetched_at"`
|
|
// ExpiresAt time.Time `json:"expires_at"`
|
|
// }
|
|
|
|
type OddMarketFilter struct {
|
|
Limit ValidInt32
|
|
Offset ValidInt32
|
|
}
|
|
type OddMarketWithEventFilter struct {
|
|
Limit ValidInt32
|
|
Offset ValidInt32
|
|
}
|
|
|
|
func ConvertDBOddMarket(oddMarket dbgen.OddsMarketWithEvent) (OddMarket, error) {
|
|
var rawOdds []json.RawMessage
|
|
if len(oddMarket.RawOdds) > 0 {
|
|
if err := json.Unmarshal(oddMarket.RawOdds, &rawOdds); err != nil {
|
|
return OddMarket{}, err
|
|
}
|
|
} else {
|
|
rawOdds = []json.RawMessage{} // explicit empty slice
|
|
}
|
|
return OddMarket{
|
|
ID: oddMarket.ID,
|
|
EventID: oddMarket.EventID,
|
|
MarketType: oddMarket.MarketType,
|
|
MarketName: oddMarket.MarketName,
|
|
MarketCategory: oddMarket.MarketCategory,
|
|
MarketID: oddMarket.MarketID,
|
|
RawOdds: rawOdds,
|
|
FetchedAt: oddMarket.FetchedAt.Time,
|
|
ExpiresAt: oddMarket.ExpiresAt.Time,
|
|
DefaultIsActive: oddMarket.DefaultIsActive,
|
|
IsMonitored: oddMarket.IsMonitored,
|
|
IsLive: oddMarket.IsLive,
|
|
Status: EventStatus(oddMarket.Status),
|
|
Source: EventSource(oddMarket.Source),
|
|
}, nil
|
|
}
|
|
|
|
func ConvertDBOddMarkets(oddMarkets []dbgen.OddsMarketWithEvent) ([]OddMarket, error) {
|
|
result := make([]OddMarket, len(oddMarkets))
|
|
for i, om := range oddMarkets {
|
|
convertedMarket, err := ConvertDBOddMarket(om)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result[i] = convertedMarket
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func ConvertCreateOddMarket(oddMarket CreateOddMarket) (dbgen.InsertOddsMarketParams, error) {
|
|
rawOddsBytes, err := json.Marshal(oddMarket.Odds)
|
|
if err != nil {
|
|
return dbgen.InsertOddsMarketParams{}, err
|
|
}
|
|
|
|
return dbgen.InsertOddsMarketParams{
|
|
EventID: oddMarket.EventID,
|
|
MarketType: oddMarket.MarketType,
|
|
MarketName: oddMarket.MarketName,
|
|
MarketCategory: oddMarket.MarketCategory,
|
|
MarketID: oddMarket.MarketID,
|
|
RawOdds: rawOddsBytes,
|
|
FetchedAt: pgtype.Timestamp{Time: time.Now(), Valid: true},
|
|
ExpiresAt: pgtype.Timestamp{Time: (time.Now()).Add(time.Hour), Valid: true},
|
|
}, nil
|
|
}
|
|
|
|
func ConvertCreateOddMarketSetting(oms CreateOddMarketSettings) (dbgen.InsertOddSettingsParams, error) {
|
|
rawOddsBytes, err := json.Marshal(oms.CustomRawOdds)
|
|
if err != nil {
|
|
return dbgen.InsertOddSettingsParams{}, err
|
|
}
|
|
return dbgen.InsertOddSettingsParams{
|
|
CompanyID: oms.CompanyID,
|
|
OddsMarketID: oms.OddMarketID,
|
|
IsActive: oms.IsActive.ToPG(),
|
|
CustomRawOdds: rawOddsBytes,
|
|
}, nil
|
|
}
|
|
|
|
func ConvertDBOddMarketWithSetting(oms dbgen.OddsMarketWithSetting) (OddMarketWithSettings, error) {
|
|
var rawOdds []json.RawMessage
|
|
if len(oms.RawOdds) > 0 {
|
|
if err := json.Unmarshal(oms.RawOdds, &rawOdds); err != nil {
|
|
return OddMarketWithSettings{}, err
|
|
}
|
|
} else {
|
|
rawOdds = []json.RawMessage{} // explicit empty slice
|
|
}
|
|
return OddMarketWithSettings{
|
|
ID: oms.ID,
|
|
EventID: oms.EventID,
|
|
MarketType: oms.MarketType,
|
|
MarketName: oms.MarketName,
|
|
MarketCategory: oms.MarketCategory,
|
|
MarketID: oms.MarketID,
|
|
RawOdds: rawOdds,
|
|
FetchedAt: oms.FetchedAt.Time,
|
|
ExpiresAt: oms.ExpiresAt.Time,
|
|
IsActive: oms.IsActive,
|
|
}, nil
|
|
}
|
|
|
|
func ConvertDBOddMarketWithSettings(oms []dbgen.OddsMarketWithSetting) ([]OddMarketWithSettings, error) {
|
|
result := make([]OddMarketWithSettings, len(oms))
|
|
for i, o := range oms {
|
|
converted, err := ConvertDBOddMarketWithSetting(o)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result[i] = converted
|
|
}
|
|
|
|
return result, nil
|
|
}
|