108 lines
2.9 KiB
Go
108 lines
2.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, companyID domain.ValidInt64) (domain.User, error) {
|
|
user, err := s.queries.GetUserByEmailPhone(ctx, dbgen.GetUserByEmailPhoneParams{
|
|
Email: pgtype.Text{
|
|
String: email,
|
|
Valid: true,
|
|
},
|
|
PhoneNumber: pgtype.Text{
|
|
String: phone,
|
|
Valid: true,
|
|
},
|
|
CompanyID: companyID.ToPG(),
|
|
})
|
|
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.String,
|
|
PhoneNumber: user.PhoneNumber.String,
|
|
Password: user.Password,
|
|
Role: domain.Role(user.Role),
|
|
EmailVerified: user.EmailVerified,
|
|
PhoneVerified: user.PhoneVerified,
|
|
CreatedAt: user.CreatedAt.Time,
|
|
UpdatedAt: user.UpdatedAt.Time,
|
|
SuspendedAt: user.SuspendedAt.Time,
|
|
Suspended: user.Suspended,
|
|
CompanyID: domain.ValidInt64{
|
|
Value: user.CompanyID.Int64,
|
|
Valid: user.CompanyID.Valid,
|
|
},
|
|
}, 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) 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)
|
|
}
|