72 lines
1.9 KiB
Go
72 lines
1.9 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/SamuelTariku/FortuneBet-Backend/internal/ports"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/authentication"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
// Interface for creating new token store
|
|
func NewTokenStore(s *Store) ports.TokenStore { return s }
|
|
|
|
func (s *Store) CreateRefreshToken(ctx context.Context, rt domain.RefreshToken) error {
|
|
return s.queries.CreateRefreshToken(ctx, dbgen.CreateRefreshTokenParams{
|
|
UserID: rt.UserID,
|
|
Token: rt.Token,
|
|
CreatedAt: pgtype.Timestamptz{
|
|
Time: rt.CreatedAt,
|
|
Valid: true,
|
|
},
|
|
ExpiresAt: pgtype.Timestamptz{
|
|
Time: rt.ExpiresAt,
|
|
Valid: true,
|
|
},
|
|
Revoked: rt.Revoked,
|
|
})
|
|
|
|
}
|
|
func (s *Store) GetRefreshToken(ctx context.Context, token string) (domain.RefreshToken, error) {
|
|
rf, err := s.queries.GetRefreshToken(ctx, token)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return domain.RefreshToken{}, authentication.ErrRefreshTokenNotFound
|
|
}
|
|
return domain.RefreshToken{}, err
|
|
}
|
|
return domain.RefreshToken{
|
|
Token: rf.Token,
|
|
UserID: rf.UserID,
|
|
CreatedAt: rf.CreatedAt.Time,
|
|
ExpiresAt: rf.ExpiresAt.Time,
|
|
Revoked: rf.Revoked,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Store) GetRefreshTokenByUserID(ctx context.Context, id int64) (domain.RefreshToken, error) {
|
|
rf, err := s.queries.GetRefreshTokenByUserID(ctx, id)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return domain.RefreshToken{}, authentication.ErrRefreshTokenNotFound
|
|
}
|
|
return domain.RefreshToken{}, err
|
|
}
|
|
|
|
return domain.RefreshToken{
|
|
Token: rf.Token,
|
|
UserID: rf.UserID,
|
|
CreatedAt: rf.CreatedAt.Time,
|
|
ExpiresAt: rf.ExpiresAt.Time,
|
|
Revoked: rf.Revoked,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Store) RevokeRefreshToken(ctx context.Context, token string) error {
|
|
return s.queries.RevokeRefreshToken(ctx, token)
|
|
}
|