54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
import uuid
|
|
|
|
from fastapi import APIRouter, Depends, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.auth.dependencies import get_current_user
|
|
from app.database import get_session
|
|
from app.models.category import CategoryType
|
|
from app.models.user import User
|
|
from app.schemas.category import CategoryCreate, CategoryResponse, CategoryUpdate
|
|
from app.services import category_service
|
|
|
|
router = APIRouter(prefix="/categories", tags=["categories"])
|
|
|
|
|
|
@router.get("", response_model=list[CategoryResponse])
|
|
async def list_categories(
|
|
type: CategoryType | None = None,
|
|
session: AsyncSession = Depends(get_session),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> list[CategoryResponse]:
|
|
cats = await category_service.list_categories(session, current_user.id, type_filter=type)
|
|
return [CategoryResponse.model_validate(c) for c in cats]
|
|
|
|
|
|
@router.post("", response_model=CategoryResponse, status_code=status.HTTP_201_CREATED)
|
|
async def create_category(
|
|
data: CategoryCreate,
|
|
session: AsyncSession = Depends(get_session),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> CategoryResponse:
|
|
cat = await category_service.create_category(session, current_user.id, data)
|
|
return CategoryResponse.model_validate(cat)
|
|
|
|
|
|
@router.put("/{category_id}", response_model=CategoryResponse)
|
|
async def update_category(
|
|
category_id: uuid.UUID,
|
|
data: CategoryUpdate,
|
|
session: AsyncSession = Depends(get_session),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> CategoryResponse:
|
|
cat = await category_service.update_category(session, current_user.id, category_id, data)
|
|
return CategoryResponse.model_validate(cat)
|
|
|
|
|
|
@router.delete("/{category_id}", status_code=status.HTTP_204_NO_CONTENT)
|
|
async def delete_category(
|
|
category_id: uuid.UUID,
|
|
session: AsyncSession = Depends(get_session),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> None:
|
|
await category_service.delete_category(session, current_user.id, category_id)
|