123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env python
- """
- @Contact : liuyuqi.gov@msn.cn
- @Time : 2024/03/24 13:44:40
- @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
- @Desc :
- """
- from typing import Any
- from apps.api.deps import CurrentUser, SessionDep
- from apps.models.item import Item, ItemCreate, ItemOut, ItemsOut, ItemUpdate
- from apps.models.models import Message
- from sqlmodel import func, select
- from fastapi import APIRouter, HTTPException
- router = APIRouter()
- @router.get("/", response_model=ItemsOut)
- def read_items(
- session: SessionDep, current_user: CurrentUser, skip: int = 0, limit: int = 100
- ) -> Any:
- """
- Retrieve items.
- """
- if current_user.is_superuser:
- count_statement = select(func.count()).select_from(Item)
- count = session.exec(count_statement).one()
- statement = select(Item).offset(skip).limit(limit)
- items = session.exec(statement).all()
- else:
- count_statement = (
- select(func.count())
- .select_from(Item)
- .where(Item.owner_id == current_user.id)
- )
- count = session.exec(count_statement).one()
- statement = (
- select(Item)
- .where(Item.owner_id == current_user.id)
- .offset(skip)
- .limit(limit)
- )
- items = session.exec(statement).all()
- return ItemsOut(data=items, count=count)
- @router.get("/{id}", response_model=ItemOut)
- def read_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any:
- """
- Get item by ID.
- """
- item = session.get(Item, id)
- if not item:
- raise HTTPException(status_code=404, detail="Item not found")
- if not current_user.is_superuser and (item.owner_id != current_user.id):
- raise HTTPException(status_code=400, detail="Not enough permissions")
- return item
- @router.post("/", response_model=ItemOut)
- def create_item(
- *, session: SessionDep, current_user: CurrentUser, item_in: ItemCreate
- ) -> Any:
- """
- Create new item.
- """
- item = Item.model_validate(item_in, update={"owner_id": current_user.id})
- session.add(item)
- session.commit()
- session.refresh(item)
- return item
- @router.put("/{id}", response_model=ItemOut)
- def update_item(
- *, session: SessionDep, current_user: CurrentUser, id: int, item_in: ItemUpdate
- ) -> Any:
- """
- Update an item.
- """
- item = session.get(Item, id)
- if not item:
- raise HTTPException(status_code=404, detail="Item not found")
- if not current_user.is_superuser and (item.owner_id != current_user.id):
- raise HTTPException(status_code=400, detail="Not enough permissions")
- update_dict = item_in.model_dump(exclude_unset=True)
- item.sqlmodel_update(update_dict)
- session.add(item)
- session.commit()
- session.refresh(item)
- return item
- @router.delete("/{id}")
- def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Message:
- """
- Delete an item.
- """
- item = session.get(Item, id)
- if not item:
- raise HTTPException(status_code=404, detail="Item not found")
- if not current_user.is_superuser and (item.owner_id != current_user.id):
- raise HTTPException(status_code=400, detail="Not enough permissions")
- session.delete(item)
- session.commit()
- return Message(message="Item deleted successfully")
|