o2o-castad-backend/app/user/api/user_admin.py

216 lines
5.0 KiB
Python

from sqladmin import ModelView
from app.user.models import RefreshToken, SocialAccount, User
class UserAdmin(ModelView, model=User):
name = "사용자"
name_plural = "사용자 목록"
icon = "fa-solid fa-user"
category = "사용자 관리"
page_size = 20
column_list = [
"id",
"kakao_id",
"email",
"nickname",
"role",
"is_active",
"is_deleted",
"created_at",
]
column_details_list = [
"id",
"kakao_id",
"email",
"nickname",
"profile_image_url",
"thumbnail_image_url",
"phone",
"name",
"birth_date",
"gender",
"is_active",
"is_admin",
"role",
"is_deleted",
"deleted_at",
"last_login_at",
"created_at",
"updated_at",
]
form_excluded_columns = [
"created_at",
"updated_at",
"user_projects",
"refresh_tokens",
"social_accounts",
]
column_searchable_list = [
User.kakao_id,
User.email,
User.nickname,
User.phone,
User.name,
]
column_default_sort = (User.created_at, True)
column_sortable_list = [
User.id,
User.kakao_id,
User.email,
User.nickname,
User.role,
User.is_active,
User.is_deleted,
User.created_at,
]
column_labels = {
"id": "ID",
"kakao_id": "카카오 ID",
"email": "이메일",
"nickname": "닉네임",
"profile_image_url": "프로필 이미지",
"thumbnail_image_url": "썸네일 이미지",
"phone": "전화번호",
"name": "실명",
"birth_date": "생년월일",
"gender": "성별",
"is_active": "활성화",
"is_admin": "관리자",
"role": "권한",
"is_deleted": "삭제됨",
"deleted_at": "삭제일시",
"last_login_at": "마지막 로그인",
"created_at": "생성일시",
"updated_at": "수정일시",
}
class RefreshTokenAdmin(ModelView, model=RefreshToken):
name = "리프레시 토큰"
name_plural = "리프레시 토큰 목록"
icon = "fa-solid fa-key"
category = "사용자 관리"
page_size = 20
column_list = [
"id",
"user_id",
"is_revoked",
"expires_at",
"created_at",
]
column_details_list = [
"id",
"user_id",
"token_hash",
"expires_at",
"is_revoked",
"created_at",
"revoked_at",
"user_agent",
"ip_address",
]
form_excluded_columns = ["created_at", "user"]
column_searchable_list = [
RefreshToken.user_id,
RefreshToken.token_hash,
RefreshToken.ip_address,
]
column_default_sort = (RefreshToken.created_at, True)
column_sortable_list = [
RefreshToken.id,
RefreshToken.user_id,
RefreshToken.is_revoked,
RefreshToken.expires_at,
RefreshToken.created_at,
]
column_labels = {
"id": "ID",
"user_id": "사용자 ID",
"token_hash": "토큰 해시",
"expires_at": "만료일시",
"is_revoked": "폐기됨",
"created_at": "생성일시",
"revoked_at": "폐기일시",
"user_agent": "User Agent",
"ip_address": "IP 주소",
}
class SocialAccountAdmin(ModelView, model=SocialAccount):
name = "소셜 계정"
name_plural = "소셜 계정 목록"
icon = "fa-solid fa-share-nodes"
category = "사용자 관리"
page_size = 20
column_list = [
"id",
"user_id",
"platform",
"platform_username",
"is_active",
"connected_at",
]
column_details_list = [
"id",
"user_id",
"platform",
"platform_user_id",
"platform_username",
"platform_data",
"scope",
"token_expires_at",
"is_active",
"connected_at",
"updated_at",
]
form_excluded_columns = ["connected_at", "updated_at", "user"]
column_searchable_list = [
SocialAccount.user_id,
SocialAccount.platform,
SocialAccount.platform_user_id,
SocialAccount.platform_username,
]
column_default_sort = (SocialAccount.connected_at, True)
column_sortable_list = [
SocialAccount.id,
SocialAccount.user_id,
SocialAccount.platform,
SocialAccount.is_active,
SocialAccount.connected_at,
]
column_labels = {
"id": "ID",
"user_id": "사용자 ID",
"platform": "플랫폼",
"platform_user_id": "플랫폼 사용자 ID",
"platform_username": "플랫폼 사용자명",
"platform_data": "플랫폼 데이터",
"scope": "권한 범위",
"token_expires_at": "토큰 만료일시",
"is_active": "활성화",
"connected_at": "연동일시",
"updated_at": "수정일시",
}