Coverage for src / mysingle / auth / schemas / auth.py: 0%

49 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-12-02 00:58 +0900

1from datetime import UTC, datetime, timedelta 

2 

3from beanie import PydanticObjectId 

4from pydantic import BaseModel, ConfigDict, Field 

5 

6from ...core.config import settings 

7 

8 

9class UserInfo(BaseModel): 

10 id: PydanticObjectId = Field(alias="_id") 

11 email: str 

12 full_name: str | None = None 

13 is_active: bool 

14 is_superuser: bool 

15 is_verified: bool 

16 avatar_url: str | None = None 

17 

18 model_config = ConfigDict( 

19 json_schema_extra={ 

20 "example": { 

21 "id": "string", 

22 "email": "user@example.com", 

23 "full_name": "string", 

24 "is_active": True, 

25 "is_superuser": False, 

26 "is_verified": False, 

27 "avatar_url": "string", 

28 } 

29 } 

30 ) 

31 

32 

33class LoginResponse(BaseModel): 

34 access_token: str | None = None 

35 refresh_token: str | None = None 

36 token_type: str | None = None 

37 user_info: UserInfo 

38 

39 

40class OAuth2AuthorizeResponse(BaseModel): 

41 authorization_url: str 

42 

43 

44now = datetime.now(UTC) 

45access_exp = now + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) 

46refresh_exp = now + timedelta(days=settings.REFRESH_TOKEN_EXPIRE_DAYS) 

47default_audience = [settings.DEFAULT_AUDIENCE] 

48 

49 

50class AccessTokenData(BaseModel): 

51 sub: str 

52 email: str | None = None 

53 exp: int = Field(default_factory=lambda: int(access_exp.timestamp())) 

54 iat: int = Field(default_factory=lambda: int(now.timestamp())) 

55 aud: list[str] = Field(default_factory=lambda: default_audience) 

56 type: str = "access" 

57 

58 

59class RefreshTokenData(BaseModel): 

60 sub: str 

61 exp: int = Field(default_factory=lambda: int(refresh_exp.timestamp())) 

62 iat: int = Field(default_factory=lambda: int(now.timestamp())) 

63 aud: list[str] = Field(default_factory=lambda: default_audience) 

64 type: str = "refresh" 

65 

66 

67class TokenResponse(BaseModel): 

68 access_token: str 

69 refresh_token: str 

70 token_type: str = "bearer" 

71 

72 model_config = ConfigDict( 

73 json_schema_extra={ 

74 "example": { 

75 "access_token": "string", 

76 "refresh_token": "string", 

77 "token_type": "bearer", 

78 } 

79 } 

80 ) 

81 

82 

83class VerifyTokenResponse(BaseModel): 

84 valid: bool 

85 user_id: str 

86 email: str 

87 is_verified: bool 

88 is_superuser: bool 

89 is_active: bool