2026-07-20 10:16:27 +08:00
|
|
|
"""库存管理路由层 - 薄路由
|
2026-05-11 14:46:20 +08:00
|
|
|
|
2026-07-20 10:16:27 +08:00
|
|
|
业务逻辑下沉至 inventory.services.inventory_service,路由只做参数校验与响应组装。
|
2026-05-11 14:46:20 +08:00
|
|
|
路由前缀: /api/inventory
|
|
|
|
|
"""
|
2026-07-20 10:16:27 +08:00
|
|
|
from fastapi import APIRouter, Depends, Query
|
2026-05-11 14:46:20 +08:00
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
2026-07-20 10:16:27 +08:00
|
|
|
from typing import Optional
|
2026-05-11 14:46:20 +08:00
|
|
|
|
2026-05-29 18:10:08 +08:00
|
|
|
from shared.database.database import get_db_session
|
|
|
|
|
from shared.services.auth_service import get_current_active_user
|
2026-09-17 16:15:49 +08:00
|
|
|
from shared.models.identity import User
|
2026-07-13 17:44:50 +08:00
|
|
|
from ..schemas import InventoryResponse, InventoryCreate, InventoryUpdate, PaginatedResponse
|
2026-07-20 10:16:27 +08:00
|
|
|
from ..services.inventory_service import inventory_service
|
2026-05-11 14:46:20 +08:00
|
|
|
|
|
|
|
|
router = APIRouter(prefix="/inventory", tags=["库存管理"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("", response_model=PaginatedResponse[InventoryResponse])
|
|
|
|
|
async def list_inventory(
|
|
|
|
|
warehouse_id: Optional[int] = None,
|
|
|
|
|
product_id: Optional[int] = None,
|
|
|
|
|
low_stock: bool = False,
|
|
|
|
|
skip: int = Query(0, ge=0),
|
|
|
|
|
limit: int = Query(20, ge=1, le=100),
|
|
|
|
|
db_session: AsyncSession = Depends(get_db_session),
|
|
|
|
|
current_user: User = Depends(get_current_active_user)
|
|
|
|
|
):
|
2026-07-20 10:16:27 +08:00
|
|
|
return await inventory_service.list_inventory(db_session, warehouse_id, product_id, low_stock, skip, limit)
|
2026-05-11 14:46:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("", response_model=InventoryResponse, status_code=201)
|
|
|
|
|
async def create_inventory(
|
|
|
|
|
payload: InventoryCreate,
|
|
|
|
|
db_session: AsyncSession = Depends(get_db_session),
|
|
|
|
|
current_user: User = Depends(get_current_active_user)
|
|
|
|
|
):
|
2026-07-20 10:16:27 +08:00
|
|
|
return await inventory_service.create_inventory(db_session, payload, current_user)
|
2026-05-11 14:46:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.put("/{inventory_id}", response_model=InventoryResponse)
|
|
|
|
|
async def update_inventory(
|
|
|
|
|
inventory_id: int,
|
|
|
|
|
payload: InventoryUpdate,
|
|
|
|
|
db_session: AsyncSession = Depends(get_db_session),
|
|
|
|
|
current_user: User = Depends(get_current_active_user)
|
|
|
|
|
):
|
2026-07-20 10:16:27 +08:00
|
|
|
return await inventory_service.update_inventory(db_session, inventory_id, payload, current_user)
|
2026-05-11 14:46:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.delete("/{inventory_id}")
|
|
|
|
|
async def delete_inventory(
|
|
|
|
|
inventory_id: int,
|
|
|
|
|
db_session: AsyncSession = Depends(get_db_session),
|
|
|
|
|
current_user: User = Depends(get_current_active_user)
|
|
|
|
|
):
|
2026-07-20 10:16:27 +08:00
|
|
|
return await inventory_service.delete_inventory(db_session, inventory_id, current_user)
|