fix: minor fixes

This commit is contained in:
Samuel Tariku 2025-08-13 22:49:20 +03:00
parent 2ce6255908
commit 192cdb3b26
4 changed files with 117 additions and 113 deletions

View File

@ -19,7 +19,6 @@ CREATE TABLE IF NOT EXISTS users (
OR phone_number IS NOT NULL OR phone_number IS NOT NULL
) )
); );
CREATE TABLE IF NOT EXISTS wallets ( CREATE TABLE IF NOT EXISTS wallets (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,
balance BIGINT NOT NULL DEFAULT 0, balance BIGINT NOT NULL DEFAULT 0,
@ -32,7 +31,6 @@ CREATE TABLE IF NOT EXISTS wallets (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
); );
CREATE TABLE refresh_tokens ( CREATE TABLE refresh_tokens (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL, user_id BIGINT NOT NULL,
@ -42,26 +40,6 @@ CREATE TABLE refresh_tokens (
revoked BOOLEAN DEFAULT FALSE NOT NULL, revoked BOOLEAN DEFAULT FALSE NOT NULL,
CONSTRAINT unique_token UNIQUE (token) CONSTRAINT unique_token UNIQUE (token)
); );
CREATE TABLE direct_deposits (
id BIGSERIAL PRIMARY KEY,
customer_id BIGINT NOT NULL REFERENCES users(id),
wallet_id BIGINT NOT NULL REFERENCES wallets(id),
amount NUMERIC(15, 2) NOT NULL,
bank_reference TEXT NOT NULL,
sender_account TEXT NOT NULL,
status TEXT NOT NULL CHECK (status IN ('pending', 'completed', 'rejected')),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
verified_by BIGINT REFERENCES users(id),
verification_notes TEXT,
verified_at TIMESTAMP
);
CREATE INDEX idx_direct_deposits_status ON direct_deposits(status);
CREATE INDEX idx_direct_deposits_customer ON direct_deposits(customer_id);
CREATE INDEX idx_direct_deposits_reference ON direct_deposits(bank_reference);
----- -----
CREATE TABLE otps ( CREATE TABLE otps (
id BIGSERIAL PRIMARY KEY, id BIGSERIAL PRIMARY KEY,

View File

@ -22,7 +22,7 @@ func (q *Queries) DeleteEvent(ctx context.Context, id string) error {
} }
const GetAllUpcomingEvents = `-- name: GetAllUpcomingEvents :many const GetAllUpcomingEvents = `-- name: GetAllUpcomingEvents :many
SELECT id, sport_id, match_name, home_team, away_team, home_team_id, away_team_id, home_kit_image, away_kit_image, league_id, league_name, league_cc, start_time, score, match_minute, timer_status, added_time, match_period, is_live, status, fetched_at, source, is_featured, is_monitored, is_active SELECT id, sport_id, match_name, home_team, away_team, home_team_id, away_team_id, home_kit_image, away_kit_image, league_id, league_name, league_cc, start_time, score, match_minute, timer_status, added_time, match_period, is_live, status, fetched_at, source, is_featured, is_monitored, winning_upper_limit, is_active
FROM events FROM events
WHERE start_time > now() WHERE start_time > now()
AND is_live = false AND is_live = false
@ -64,6 +64,7 @@ func (q *Queries) GetAllUpcomingEvents(ctx context.Context) ([]Event, error) {
&i.Source, &i.Source,
&i.IsFeatured, &i.IsFeatured,
&i.IsMonitored, &i.IsMonitored,
&i.WinningUpperLimit,
&i.IsActive, &i.IsActive,
); err != nil { ); err != nil {
return nil, err return nil, err
@ -77,7 +78,7 @@ func (q *Queries) GetAllUpcomingEvents(ctx context.Context) ([]Event, error) {
} }
const GetExpiredUpcomingEvents = `-- name: GetExpiredUpcomingEvents :many const GetExpiredUpcomingEvents = `-- name: GetExpiredUpcomingEvents :many
SELECT events.id, events.sport_id, events.match_name, events.home_team, events.away_team, events.home_team_id, events.away_team_id, events.home_kit_image, events.away_kit_image, events.league_id, events.league_name, events.league_cc, events.start_time, events.score, events.match_minute, events.timer_status, events.added_time, events.match_period, events.is_live, events.status, events.fetched_at, events.source, events.is_featured, events.is_monitored, events.is_active, SELECT events.id, events.sport_id, events.match_name, events.home_team, events.away_team, events.home_team_id, events.away_team_id, events.home_kit_image, events.away_kit_image, events.league_id, events.league_name, events.league_cc, events.start_time, events.score, events.match_minute, events.timer_status, events.added_time, events.match_period, events.is_live, events.status, events.fetched_at, events.source, events.is_featured, events.is_monitored, events.winning_upper_limit, events.is_active,
leagues.country_code as league_cc leagues.country_code as league_cc
FROM events FROM events
LEFT JOIN leagues ON leagues.id = league_id LEFT JOIN leagues ON leagues.id = league_id
@ -114,6 +115,7 @@ type GetExpiredUpcomingEventsRow struct {
Source pgtype.Text `json:"source"` Source pgtype.Text `json:"source"`
IsFeatured bool `json:"is_featured"` IsFeatured bool `json:"is_featured"`
IsMonitored bool `json:"is_monitored"` IsMonitored bool `json:"is_monitored"`
WinningUpperLimit int32 `json:"winning_upper_limit"`
IsActive bool `json:"is_active"` IsActive bool `json:"is_active"`
LeagueCc_2 pgtype.Text `json:"league_cc_2"` LeagueCc_2 pgtype.Text `json:"league_cc_2"`
} }
@ -152,6 +154,7 @@ func (q *Queries) GetExpiredUpcomingEvents(ctx context.Context, status pgtype.Te
&i.Source, &i.Source,
&i.IsFeatured, &i.IsFeatured,
&i.IsMonitored, &i.IsMonitored,
&i.WinningUpperLimit,
&i.IsActive, &i.IsActive,
&i.LeagueCc_2, &i.LeagueCc_2,
); err != nil { ); err != nil {
@ -166,7 +169,7 @@ func (q *Queries) GetExpiredUpcomingEvents(ctx context.Context, status pgtype.Te
} }
const GetPaginatedUpcomingEvents = `-- name: GetPaginatedUpcomingEvents :many const GetPaginatedUpcomingEvents = `-- name: GetPaginatedUpcomingEvents :many
SELECT events.id, events.sport_id, events.match_name, events.home_team, events.away_team, events.home_team_id, events.away_team_id, events.home_kit_image, events.away_kit_image, events.league_id, events.league_name, events.league_cc, events.start_time, events.score, events.match_minute, events.timer_status, events.added_time, events.match_period, events.is_live, events.status, events.fetched_at, events.source, events.is_featured, events.is_monitored, events.is_active, SELECT events.id, events.sport_id, events.match_name, events.home_team, events.away_team, events.home_team_id, events.away_team_id, events.home_kit_image, events.away_kit_image, events.league_id, events.league_name, events.league_cc, events.start_time, events.score, events.match_minute, events.timer_status, events.added_time, events.match_period, events.is_live, events.status, events.fetched_at, events.source, events.is_featured, events.is_monitored, events.winning_upper_limit, events.is_active,
leagues.country_code as league_cc leagues.country_code as league_cc
FROM events FROM events
LEFT JOIN leagues ON leagues.id = league_id LEFT JOIN leagues ON leagues.id = league_id
@ -243,6 +246,7 @@ type GetPaginatedUpcomingEventsRow struct {
Source pgtype.Text `json:"source"` Source pgtype.Text `json:"source"`
IsFeatured bool `json:"is_featured"` IsFeatured bool `json:"is_featured"`
IsMonitored bool `json:"is_monitored"` IsMonitored bool `json:"is_monitored"`
WinningUpperLimit int32 `json:"winning_upper_limit"`
IsActive bool `json:"is_active"` IsActive bool `json:"is_active"`
LeagueCc_2 pgtype.Text `json:"league_cc_2"` LeagueCc_2 pgtype.Text `json:"league_cc_2"`
} }
@ -291,6 +295,7 @@ func (q *Queries) GetPaginatedUpcomingEvents(ctx context.Context, arg GetPaginat
&i.Source, &i.Source,
&i.IsFeatured, &i.IsFeatured,
&i.IsMonitored, &i.IsMonitored,
&i.WinningUpperLimit,
&i.IsActive, &i.IsActive,
&i.LeagueCc_2, &i.LeagueCc_2,
); err != nil { ); err != nil {
@ -367,7 +372,7 @@ func (q *Queries) GetTotalEvents(ctx context.Context, arg GetTotalEventsParams)
} }
const GetUpcomingByID = `-- name: GetUpcomingByID :one const GetUpcomingByID = `-- name: GetUpcomingByID :one
SELECT id, sport_id, match_name, home_team, away_team, home_team_id, away_team_id, home_kit_image, away_kit_image, league_id, league_name, league_cc, start_time, score, match_minute, timer_status, added_time, match_period, is_live, status, fetched_at, source, is_featured, is_monitored, is_active SELECT id, sport_id, match_name, home_team, away_team, home_team_id, away_team_id, home_kit_image, away_kit_image, league_id, league_name, league_cc, start_time, score, match_minute, timer_status, added_time, match_period, is_live, status, fetched_at, source, is_featured, is_monitored, winning_upper_limit, is_active
FROM events FROM events
WHERE id = $1 WHERE id = $1
AND is_live = false AND is_live = false
@ -403,6 +408,7 @@ func (q *Queries) GetUpcomingByID(ctx context.Context, id string) (Event, error)
&i.Source, &i.Source,
&i.IsFeatured, &i.IsFeatured,
&i.IsMonitored, &i.IsMonitored,
&i.WinningUpperLimit,
&i.IsActive, &i.IsActive,
) )
return i, err return i, err

View File

@ -208,6 +208,16 @@ type Company struct {
UpdatedAt pgtype.Timestamp `json:"updated_at"` UpdatedAt pgtype.Timestamp `json:"updated_at"`
} }
type CustomOdd struct {
ID int64 `json:"id"`
OddID int64 `json:"odd_id"`
RawOddID int64 `json:"raw_odd_id"`
MarketID string `json:"market_id"`
EventID string `json:"event_id"`
OddValue float64 `json:"odd_value"`
CreatedAt pgtype.Timestamp `json:"created_at"`
}
type CustomerWallet struct { type CustomerWallet struct {
ID int64 `json:"id"` ID int64 `json:"id"`
CustomerID int64 `json:"customer_id"` CustomerID int64 `json:"customer_id"`
@ -248,6 +258,15 @@ type DirectDeposit struct {
VerifiedAt pgtype.Timestamp `json:"verified_at"` VerifiedAt pgtype.Timestamp `json:"verified_at"`
} }
type DisabledOdd struct {
ID int64 `json:"id"`
OddID int64 `json:"odd_id"`
RawOddID int64 `json:"raw_odd_id"`
MarketID string `json:"market_id"`
EventID string `json:"event_id"`
CreatedAt pgtype.Timestamp `json:"created_at"`
}
type Event struct { type Event struct {
ID string `json:"id"` ID string `json:"id"`
SportID pgtype.Int4 `json:"sport_id"` SportID pgtype.Int4 `json:"sport_id"`
@ -273,6 +292,7 @@ type Event struct {
Source pgtype.Text `json:"source"` Source pgtype.Text `json:"source"`
IsFeatured bool `json:"is_featured"` IsFeatured bool `json:"is_featured"`
IsMonitored bool `json:"is_monitored"` IsMonitored bool `json:"is_monitored"`
WinningUpperLimit int32 `json:"winning_upper_limit"`
IsActive bool `json:"is_active"` IsActive bool `json:"is_active"`
} }

View File

@ -28,65 +28,65 @@ func StartDataFetchingCrons(eventService eventsvc.Service, oddsService oddssvc.S
// { // {
// spec: "0 0 * * * *", // Every 1 hour // spec: "0 0 * * * *", // Every 1 hour
// task: func() { // task: func() {
// mongoLogger.Info("Began fetching upcoming events") // mongoLogger.Info("Began fetching upcoming events cron task")
// if err := eventService.FetchUpcomingEvents(context.Background()); err != nil { // if err := eventService.FetchUpcomingEvents(context.Background()); err != nil {
// mongoLogger.Error("Failed to fetch upcoming events", // mongoLogger.Error("Failed to fetch upcoming events",
// zap.Error(err), // zap.Error(err),
// ) // )
// } else { // } else {
// mongoLogger.Info("Successfully fetched upcoming events") // mongoLogger.Info("Completed fetching upcoming events without errors")
// } // }
// }, // },
// }, // },
// { // {
// spec: "0 0 * * * *", // Every 1 hour (since its takes that long to fetch all the events) // spec: "0 0 * * * *", // Every 1 hour (since its takes that long to fetch all the events)
// task: func() { // task: func() {
// mongoLogger.Info("Began fetching non live odds") // mongoLogger.Info("Began fetching non live odds cron task")
// if err := oddsService.FetchNonLiveOdds(context.Background()); err != nil { // if err := oddsService.FetchNonLiveOdds(context.Background()); err != nil {
// mongoLogger.Error("Failed to fetch non live odds", // mongoLogger.Error("Failed to fetch non live odds",
// zap.Error(err), // zap.Error(err),
// ) // )
// } else { // } else {
// mongoLogger.Info("Successfully fetched non live odds") // mongoLogger.Info("Completed fetching non live odds without errors")
// } // }
// }, // },
// }, // },
{ {
spec: "0 */5 * * * *", // Every 5 Minutes spec: "0 */5 * * * *", // Every 5 Minutes
task: func() { task: func() {
mongoLogger.Info("Began updating all expired events status") mongoLogger.Info("Began update all expired events status cron task")
if _, err := resultService.CheckAndUpdateExpiredEvents(context.Background()); err != nil { if _, err := resultService.CheckAndUpdateExpiredEvents(context.Background()); err != nil {
mongoLogger.Error("Failed to update expired events status", mongoLogger.Error("Failed to update expired events status",
zap.Error(err), zap.Error(err),
) )
} else { } else {
mongoLogger.Info("Successfully updated expired events") mongoLogger.Info("Completed expired events without errors")
} }
}, },
}, },
// { // {
// spec: "0 */15 * * * *", // Every 15 Minutes // spec: "0 */15 * * * *", // Every 15 Minutes
// task: func() { // task: func() {
// mongoLogger.Info("Fetching results for upcoming events") // mongoLogger.Info("Began fetching results for upcoming events cron task")
// if err := resultService.FetchAndProcessResults(context.Background()); err != nil { // if err := resultService.FetchAndProcessResults(context.Background()); err != nil {
// mongoLogger.Error("Failed to process result", // mongoLogger.Error("Failed to process result",
// zap.Error(err), // zap.Error(err),
// ) // )
// } else { // } else {
// mongoLogger.Info("Successfully processed all event result outcomes") // mongoLogger.Info("Completed processing all event result outcomes without errors")
// } // }
// }, // },
// }, // },
{ {
spec: "0 0 * * * *", // Every Day spec: "0 0 * * * *", // Every Day
task: func() { task: func() {
mongoLogger.Info("Send daily result notification") mongoLogger.Info("Began Send daily result notification cron task")
if err := resultService.CheckAndSendResultNotifications(context.Background(), time.Now().Add(-24*time.Hour)); err != nil { if err := resultService.CheckAndSendResultNotifications(context.Background(), time.Now().Add(-24*time.Hour)); err != nil {
mongoLogger.Error("Failed to process result", mongoLogger.Error("Failed to process result",
zap.Error(err), zap.Error(err),
) )
} else { } else {
mongoLogger.Info("Successfully processed all event result outcomes") mongoLogger.Info("Completed sending daily result notification without errors")
} }
}, },
}, },