Files
Gov-chat-bot/backend/app/scripts/create_admin.py
2026-03-26 12:49:43 +09:00

84 lines
2.5 KiB
Python

"""
관리자 계정 초기 생성 스크립트.
사용법: python -m app.scripts.create_admin
"""
import asyncio
import sys
async def main():
print("=== SmartBot KR 관리자 계정 생성 ===\n")
tenant_id = input("테넌트 ID (예: dongducheon): ").strip()
if not tenant_id:
print("오류: 테넌트 ID를 입력하세요.")
sys.exit(1)
email = input("관리자 이메일: ").strip()
if not email:
print("오류: 이메일을 입력하세요.")
sys.exit(1)
import getpass
password = getpass.getpass("비밀번호 (8자 이상): ")
if len(password) < 8:
print("오류: 비밀번호는 8자 이상이어야 합니다.")
sys.exit(1)
from app.core.database import engine, Base
from app.models.tenant import Tenant, TenantConfig
from app.models.admin import AdminUser, AdminRole
from app.core.security import hash_password
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
import uuid
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async with AsyncSession(engine) as db:
# 테넌트 확인 / 생성
result = await db.execute(select(Tenant).where(Tenant.id == tenant_id))
tenant = result.scalar_one_or_none()
if not tenant:
tenant = Tenant(id=tenant_id, name=tenant_id, slug=tenant_id)
db.add(tenant)
await db.flush()
config = TenantConfig(
id=str(uuid.uuid4()),
tenant_id=tenant_id,
key="tenant_name",
value=tenant_id,
)
db.add(config)
print(f"테넌트 생성: {tenant_id}")
# 관리자 생성
result = await db.execute(
select(AdminUser).where(
AdminUser.tenant_id == tenant_id,
AdminUser.email == email,
)
)
existing = result.scalar_one_or_none()
if existing:
print(f"이미 존재하는 계정입니다: {email}")
else:
admin = AdminUser(
id=str(uuid.uuid4()),
tenant_id=tenant_id,
email=email,
hashed_pw=hash_password(password),
role=AdminRole.admin,
)
db.add(admin)
print(f"관리자 계정 생성: {email} (role: admin)")
await db.commit()
print("\n✅ 완료! 대시보드에서 로그인하세요.")
if __name__ == "__main__":
asyncio.run(main())