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", "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": "수정일시", }