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
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
1# path: app/schemas/oauth2.py
3from pydantic import BaseModel
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
20# -------------------
21# 구글
22# -------------------
23class GoogleToken(BaseOAuthToken):
24 # 기존에 없는 필드 id_token 등 이미 BaseOAuthToken에 들어있으면 중복 필요 X
25 pass
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
39# -------------------
40# 카카오
41# -------------------
42class KakaoToken(BaseOAuthToken):
43 # e.g. Kakao 전용 필드가 있으면 여기에
44 pass
47class KakaoProfile(BaseModel):
48 id: int
49 connected_at: str
51 # 실제로는 kakao_account 구조
52 # 여기서는 간단히 예시
53 class KakaoAccount(BaseModel):
54 email: str
56 class Profile(BaseModel):
57 nickname: str
58 profile_image_url: str | None
60 profile: Profile
62 kakao_account: KakaoAccount
65# -------------------
66# 네이버
67# -------------------
68class NaverToken(BaseOAuthToken):
69 pass
72class NaverProfile(BaseModel):
73 id: str
74 nickname: str
75 profile_image: str
76 email: str
77 name: str