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

41 statements  

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

1# path: app/schemas/oauth2.py 

2 

3from pydantic import BaseModel 

4 

5 

6# ------------------- 

7# 공통 토큰 스키마 (필요한 필드만 선언) 

8# ------------------- 

9class BaseOAuthToken(BaseModel): 

10 access_token: str 

11 token_type: str | None = None 

12 refresh_token: str | None = None 

13 expires_in: int | None = None 

14 expires_at: int | None = None 

15 scope: str | None = None 

16 id_token: str | None = None 

17 refresh_token_expires_in: int | None = None 

18 

19 

20# ------------------- 

21# 구글 

22# ------------------- 

23class GoogleToken(BaseOAuthToken): 

24 # 기존에 없는 필드 id_token 등 이미 BaseOAuthToken에 들어있으면 중복 필요 X 

25 pass 

26 

27 

28class GoogleProfile(BaseModel): 

29 id: str 

30 email: str 

31 verified_email: bool 

32 name: str | None = None 

33 given_name: str | None = None 

34 family_name: str | None = None 

35 picture: str | None = None 

36 hd: str | None = None 

37 

38 

39# ------------------- 

40# 카카오 

41# ------------------- 

42class KakaoToken(BaseOAuthToken): 

43 # e.g. Kakao 전용 필드가 있으면 여기에 

44 pass 

45 

46 

47class KakaoProfile(BaseModel): 

48 id: int 

49 connected_at: str 

50 

51 # 실제로는 kakao_account 구조 

52 # 여기서는 간단히 예시 

53 class KakaoAccount(BaseModel): 

54 email: str 

55 

56 class Profile(BaseModel): 

57 nickname: str 

58 profile_image_url: str | None 

59 

60 profile: Profile 

61 

62 kakao_account: KakaoAccount 

63 

64 

65# ------------------- 

66# 네이버 

67# ------------------- 

68class NaverToken(BaseOAuthToken): 

69 pass 

70 

71 

72class NaverProfile(BaseModel): 

73 id: str 

74 nickname: str 

75 profile_image: str 

76 email: str 

77 name: str