identity_store.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package postgres
  2. import (
  3. "context"
  4. "fmt"
  5. )
  6. type LoginIdentity struct {
  7. ID string
  8. IdentityType string
  9. Provider string
  10. ProviderSubject string
  11. CountryCode *string
  12. Mobile *string
  13. Status string
  14. }
  15. func (s *Store) ListIdentitiesByUserID(ctx context.Context, userID string) ([]LoginIdentity, error) {
  16. rows, err := s.pool.Query(ctx, `
  17. SELECT id, identity_type, provider, provider_subject, country_code, mobile, status
  18. FROM login_identities
  19. WHERE user_id = $1
  20. ORDER BY created_at ASC
  21. `, userID)
  22. if err != nil {
  23. return nil, fmt.Errorf("list identities by user id: %w", err)
  24. }
  25. defer rows.Close()
  26. var identities []LoginIdentity
  27. for rows.Next() {
  28. var identity LoginIdentity
  29. if err := rows.Scan(
  30. &identity.ID,
  31. &identity.IdentityType,
  32. &identity.Provider,
  33. &identity.ProviderSubject,
  34. &identity.CountryCode,
  35. &identity.Mobile,
  36. &identity.Status,
  37. ); err != nil {
  38. return nil, fmt.Errorf("scan identity: %w", err)
  39. }
  40. identities = append(identities, identity)
  41. }
  42. if err := rows.Err(); err != nil {
  43. return nil, fmt.Errorf("iterate identities: %w", err)
  44. }
  45. return identities, nil
  46. }