feat: backend core — models, auth, CRUD, tests
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user