115 lines
4.0 KiB
Go
115 lines
4.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
type VirtualGameRepository interface {
|
|
CreateVirtualGameSession(ctx context.Context, session *domain.VirtualGameSession) error
|
|
GetVirtualGameSessionByToken(ctx context.Context, token string) (*domain.VirtualGameSession, error)
|
|
UpdateVirtualGameSessionStatus(ctx context.Context, id int64, status string) error
|
|
CreateVirtualGameTransaction(ctx context.Context, tx *domain.VirtualGameTransaction) error
|
|
GetVirtualGameTransactionByExternalID(ctx context.Context, externalID string) (*domain.VirtualGameTransaction, error)
|
|
UpdateVirtualGameTransactionStatus(ctx context.Context, id int64, status string) error
|
|
}
|
|
|
|
type VirtualGameRepo struct {
|
|
store *Store
|
|
}
|
|
|
|
func NewVirtualGameRepository(store *Store) VirtualGameRepository {
|
|
return &VirtualGameRepo{store: store}
|
|
}
|
|
|
|
func (r *VirtualGameRepo) CreateVirtualGameSession(ctx context.Context, session *domain.VirtualGameSession) error {
|
|
params := dbgen.CreateVirtualGameSessionParams{
|
|
UserID: session.UserID,
|
|
GameID: session.GameID,
|
|
SessionToken: session.SessionToken,
|
|
Currency: session.Currency,
|
|
Status: session.Status,
|
|
ExpiresAt: pgtype.Timestamptz{Time: session.ExpiresAt, Valid: true},
|
|
}
|
|
_, err := r.store.queries.CreateVirtualGameSession(ctx, params)
|
|
return err
|
|
}
|
|
|
|
func (r *VirtualGameRepo) GetVirtualGameSessionByToken(ctx context.Context, token string) (*domain.VirtualGameSession, error) {
|
|
dbSession, err := r.store.queries.GetVirtualGameSessionByToken(ctx, token)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return &domain.VirtualGameSession{
|
|
ID: dbSession.ID,
|
|
UserID: dbSession.UserID,
|
|
GameID: dbSession.GameID,
|
|
SessionToken: dbSession.SessionToken,
|
|
Currency: dbSession.Currency,
|
|
Status: dbSession.Status,
|
|
CreatedAt: dbSession.CreatedAt.Time,
|
|
UpdatedAt: dbSession.UpdatedAt.Time,
|
|
ExpiresAt: dbSession.ExpiresAt.Time,
|
|
}, nil
|
|
}
|
|
|
|
func (r *VirtualGameRepo) UpdateVirtualGameSessionStatus(ctx context.Context, id int64, status string) error {
|
|
return r.store.queries.UpdateVirtualGameSessionStatus(ctx, dbgen.UpdateVirtualGameSessionStatusParams{
|
|
ID: id,
|
|
Status: status,
|
|
})
|
|
}
|
|
|
|
func (r *VirtualGameRepo) CreateVirtualGameTransaction(ctx context.Context, tx *domain.VirtualGameTransaction) error {
|
|
params := dbgen.CreateVirtualGameTransactionParams{
|
|
SessionID: tx.SessionID,
|
|
UserID: tx.UserID,
|
|
WalletID: tx.WalletID,
|
|
TransactionType: tx.TransactionType,
|
|
Amount: tx.Amount,
|
|
Currency: tx.Currency,
|
|
ExternalTransactionID: tx.ExternalTransactionID,
|
|
Status: tx.Status,
|
|
}
|
|
_, err := r.store.queries.CreateVirtualGameTransaction(ctx, params)
|
|
return err
|
|
}
|
|
|
|
func (r *VirtualGameRepo) GetVirtualGameTransactionByExternalID(ctx context.Context, externalID string) (*domain.VirtualGameTransaction, error) {
|
|
dbTx, err := r.store.queries.GetVirtualGameTransactionByExternalID(ctx, externalID)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return &domain.VirtualGameTransaction{
|
|
ID: dbTx.ID,
|
|
SessionID: dbTx.SessionID,
|
|
UserID: dbTx.UserID,
|
|
WalletID: dbTx.WalletID,
|
|
TransactionType: dbTx.TransactionType,
|
|
Amount: dbTx.Amount,
|
|
Currency: dbTx.Currency,
|
|
ExternalTransactionID: dbTx.ExternalTransactionID,
|
|
Status: dbTx.Status,
|
|
CreatedAt: dbTx.CreatedAt.Time,
|
|
UpdatedAt: dbTx.UpdatedAt.Time,
|
|
}, nil
|
|
}
|
|
|
|
func (r *VirtualGameRepo) UpdateVirtualGameTransactionStatus(ctx context.Context, id int64, status string) error {
|
|
return r.store.queries.UpdateVirtualGameTransactionStatus(ctx, dbgen.UpdateVirtualGameTransactionStatusParams{
|
|
ID: id,
|
|
Status: status,
|
|
})
|
|
}
|