from typing import Any, List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.core.auth import get_current_active_user from app.crud import stock_transaction as stock_transaction_crud from app.db.session import get_db from app.models import User from app.models.stock_transaction import TransactionType from app.schemas.stock_transaction import StockTransaction, StockTransactionCreate router = APIRouter() @router.get("/", response_model=List[StockTransaction]) def read_stock_transactions( db: Session = Depends(get_db), skip: int = 0, limit: int = 100, current_user: User = Depends(get_current_active_user), ) -> Any: transactions = stock_transaction_crud.get_multi(db, skip=skip, limit=limit) return transactions @router.get("/item/{item_id}", response_model=List[StockTransaction]) def read_item_transactions( *, db: Session = Depends(get_db), item_id: int, skip: int = 0, limit: int = 100, current_user: User = Depends(get_current_active_user), ) -> Any: transactions = stock_transaction_crud.get_by_item( db, item_id=item_id, skip=skip, limit=limit ) return transactions @router.get("/type/{transaction_type}", response_model=List[StockTransaction]) def read_transactions_by_type( *, db: Session = Depends(get_db), transaction_type: TransactionType, skip: int = 0, limit: int = 100, current_user: User = Depends(get_current_active_user), ) -> Any: transactions = stock_transaction_crud.get_by_type( db, transaction_type=transaction_type, skip=skip, limit=limit ) return transactions @router.post("/", response_model=StockTransaction) def create_stock_transaction( *, db: Session = Depends(get_db), transaction_in: StockTransactionCreate, current_user: User = Depends(get_current_active_user), ) -> Any: transaction = stock_transaction_crud.create_with_stock_update( db, obj_in=transaction_in ) return transaction @router.get("/{id}", response_model=StockTransaction) def read_stock_transaction( *, db: Session = Depends(get_db), id: int, current_user: User = Depends(get_current_active_user), ) -> Any: transaction = stock_transaction_crud.get(db, id=id) if not transaction: raise HTTPException(status_code=404, detail="Stock transaction not found") return transaction