Initial commit: import from sinmb79/Gov-chat-bot
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""
|
||||
관리자 인증 API.
|
||||
POST /api/admin/auth/login — 로그인 (JWT 발급)
|
||||
"""
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.database import get_db
|
||||
from app.core.security import verify_password, create_admin_token
|
||||
from app.models.admin import AdminUser
|
||||
|
||||
router = APIRouter(prefix="/api/admin/auth", tags=["admin-auth"])
|
||||
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
tenant_id: str
|
||||
email: str
|
||||
password: str
|
||||
|
||||
|
||||
class LoginResponse(BaseModel):
|
||||
access_token: str
|
||||
token_type: str = "bearer"
|
||||
role: str
|
||||
|
||||
|
||||
@router.post("/login", response_model=LoginResponse)
|
||||
async def login(body: LoginRequest, db: AsyncSession = Depends(get_db)):
|
||||
result = await db.execute(
|
||||
select(AdminUser).where(
|
||||
AdminUser.tenant_id == body.tenant_id,
|
||||
AdminUser.email == body.email,
|
||||
AdminUser.is_active == True,
|
||||
)
|
||||
)
|
||||
user = result.scalar_one_or_none()
|
||||
|
||||
if user is None or not verify_password(body.password, user.hashed_pw):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="이메일 또는 비밀번호가 올바르지 않습니다.",
|
||||
)
|
||||
|
||||
token = create_admin_token(user.id, user.tenant_id, user.role.value)
|
||||
return LoginResponse(access_token=token, role=user.role.value)
|
||||
Reference in New Issue
Block a user