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/services/authentication"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
func (s *Store) GetUserByEmailPhone(ctx context.Context, email, phone string) (domain.User, error) {
|
|
user, err := s.queries.GetUserByEmailPhone(ctx, dbgen.GetUserByEmailPhoneParams{
|
|
Email: email,
|
|
PhoneNumber: phone,
|
|
})
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return domain.User{}, authentication.ErrUserNotFound
|
|
}
|
|
return domain.User{}, err
|
|
}
|
|
return domain.User{
|
|
ID: user.ID,
|
|
FirstName: user.FirstName,
|
|
LastName: user.LastName,
|
|
Email: user.Email,
|
|
PhoneNumber: user.PhoneNumber,
|
|
Password: user.Password,
|
|
Role: domain.Role(user.Role),
|
|
}, nil
|
|
|
|
}
|
|
|
|
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) RevokeRefreshToken(ctx context.Context, token string) error {
|
|
return s.queries.RevokeRefreshToken(ctx, token)
|
|
}
|