auth.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. """
  2. Pydantic schemas for authentication endpoints.
  3. """
  4. from datetime import datetime
  5. from pydantic import BaseModel, EmailStr, Field
  6. class LoginRequest(BaseModel):
  7. """Login request schema."""
  8. email: EmailStr
  9. password: str = Field(..., min_length=8)
  10. class RegisterRequest(BaseModel):
  11. """Self-registration request schema."""
  12. email: EmailStr
  13. password: str = Field(..., min_length=8)
  14. full_name: str | None = None
  15. phone: str | None = None
  16. organization_name: str = Field(..., min_length=2)
  17. class TokenResponse(BaseModel):
  18. """Token response schema (login/refresh)."""
  19. access_token: str
  20. refresh_token: str
  21. token_type: str = "bearer"
  22. expires_in: int # seconds
  23. class RefreshRequest(BaseModel):
  24. """Refresh token request schema."""
  25. refresh_token: str
  26. class LogoutRequest(BaseModel):
  27. """Logout request schema."""
  28. refresh_token: str
  29. class UserInfo(BaseModel):
  30. """User information in token response."""
  31. id: int
  32. email: str
  33. full_name: str | None
  34. role: str
  35. organization_id: int | None
  36. email_verified: bool
  37. status: str
  38. class Config:
  39. from_attributes = True
  40. class OrganizationInfo(BaseModel):
  41. """Organization information in token response."""
  42. id: int
  43. name: str
  44. wifi_enabled: bool
  45. ble_enabled: bool
  46. status: str
  47. class Config:
  48. from_attributes = True
  49. class AuthResponse(BaseModel):
  50. """Complete auth response with tokens and user info."""
  51. access_token: str
  52. refresh_token: str
  53. token_type: str = "bearer"
  54. expires_in: int
  55. user: UserInfo
  56. organization: OrganizationInfo | None
  57. class PasswordResetRequest(BaseModel):
  58. """Password reset request schema."""
  59. email: EmailStr
  60. class PasswordResetConfirm(BaseModel):
  61. """Password reset confirmation schema."""
  62. token: str
  63. new_password: str = Field(..., min_length=8)
  64. class EmailVerifyRequest(BaseModel):
  65. """Email verification request schema."""
  66. token: str