package repository import ( "context" "database/sql" "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" ) // Interface for creating new otp store func NewOTPStore(s *Store) ports.OtpStore { return s } func (s *Store) CreateOtp(ctx context.Context, otp domain.Otp) error { return s.queries.CreateOtp(ctx, dbgen.CreateOtpParams{ SentTo: otp.SentTo, Medium: string(otp.Medium), OtpFor: string(otp.For), Otp: otp.Otp, ExpiresAt: pgtype.Timestamptz{ Time: otp.ExpiresAt, Valid: true, }, CreatedAt: pgtype.Timestamptz{ Time: otp.CreatedAt, Valid: true, }, }) } func (s *Store) GetOtp(ctx context.Context, sentTo string, sentfor domain.OtpFor, medium domain.OtpMedium) (domain.Otp, error) { row, err := s.queries.GetOtp(ctx, dbgen.GetOtpParams{ SentTo: sentTo, Medium: string(medium), OtpFor: string(sentfor), }) if err != nil { fmt.Printf("OTP REPO error: %v sentTo: %v, medium: %v, otpFor: %v\n", err, sentTo, medium, sentfor) if err == sql.ErrNoRows { return domain.Otp{}, domain.ErrOtpNotFound } return domain.Otp{}, err } return domain.Otp{ ID: row.ID, SentTo: row.SentTo, Medium: domain.OtpMedium(row.Medium), For: domain.OtpFor(row.OtpFor), Otp: row.Otp, Used: row.Used, UsedAt: row.UsedAt.Time, CreatedAt: row.CreatedAt.Time, ExpiresAt: row.ExpiresAt.Time, }, nil } func (s *Store) MarkOtpAsUsed(ctx context.Context, otp domain.Otp) error { return s.queries.MarkOtpAsUsed(ctx, dbgen.MarkOtpAsUsedParams{ ID: otp.ID, UsedAt: pgtype.Timestamptz{ Time: otp.UsedAt, Valid: true, }, }) }