|
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} |