from datetime import datetime from fastapi import Depends, APIRouter, HTTPException, Query from sqlmodel import Session, select from models import User, UserCreate, UserPublic, UserUpdate, UserPublicWith from core import crud, utils router = APIRouter( prefix="/users", tags=["users"], dependencies=[Depends(crud.get_current_super_user)] ) @router.post("/", response_model=UserPublic) def create_user(*, session: Session = Depends(utils.get_session), user: UserCreate): return crud.add_user(session, user) @router.get("/", response_model=list[UserPublic]) def read_users(*, session: Session = Depends(utils.get_session), offset: int = 0, limit: int = Query(default=100, le=100), ): users = session.exec(select(User).offset(offset).limit(limit)).all() return users @router.get("/{user_id}", response_model=UserPublicWith) def read_user(*, session: Session = Depends(utils.get_session), user_id: int): user = session.get(User, user_id) if not user: raise HTTPException(status_code=404, detail="User not found") return user @router.patch("/{user_id}", response_model=UserPublic) def update_user(*, session: Session = Depends(utils.get_session), user_id: int, user: UserUpdate ): db_user = session.get(User, user_id) if not db_user: raise HTTPException(status_code=404, detail="User not found") return crud.edit_user(session, db_user, user) @router.delete("/{user_id}") def delete_user(*, session: Session = Depends(utils.get_session), user_id: int): user = session.get(User, user_id) if not user: raise HTTPException(status_code=404, detail="User not found") session.delete(user) session.commit() return {"ok": True}