38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from datetime import datetime
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
from pydantic import BaseModel, EmailStr
|
|
from app.core.database import get_db
|
|
from app.core.security_admin import get_current_admin
|
|
from app.core.config import settings
|
|
from app.models.user import User # 기존 일반 사용자 모델
|
|
|
|
router = APIRouter()
|
|
|
|
class MemberOut(BaseModel):
|
|
id: int
|
|
username: str
|
|
email: EmailStr | None = None
|
|
created_at: datetime | None = None
|
|
is_active: bool | None = None
|
|
last_login_at: datetime | None = None
|
|
|
|
# Pydantic v2: ORM에서 읽기
|
|
model_config = {"from_attributes": True}
|
|
|
|
@router.get("", response_model=list[MemberOut])
|
|
def list_members(db: Session = Depends(get_db), _: User = Depends(get_current_admin)):
|
|
users = db.query(User).order_by(User.id.desc()).limit(200).all()
|
|
# 모델 필드가 없을 수 있는 값들은 getattr로 안전하게 매핑
|
|
result = []
|
|
for u in users:
|
|
result.append(MemberOut(
|
|
id=u.id,
|
|
username=getattr(u, "username", ""),
|
|
email=getattr(u, "email", None),
|
|
created_at=getattr(u, "created_at", None),
|
|
is_active=getattr(u, "is_active", None),
|
|
last_login_at=getattr(u, "last_login_at", None),
|
|
))
|
|
return result
|