Files
site/WESP_REL/app/routes/sklad.py
T
2026-07-17 12:57:18 +03:00

58 lines
1.8 KiB
Python

from flask import Blueprint, jsonify, request
from sqlalchemy import select
from app import db
from app.models import ComponentStock
from app.routes.auth_decorators import require_auth
bp = Blueprint("sklad", __name__, url_prefix="/api/sklad")
def _error(message: str, status_code: int = 400):
return jsonify({"error": True, "message": message}), status_code
@bp.get("/ping")
def sklad_ping():
"""Временный health-check эндпоинт для модуля склада."""
return jsonify({"status": "ok"}), 200
@bp.get("/components")
@require_auth
def list_component_stock():
"""Список складских остатков с пагинацией."""
try:
limit = int(request.args.get("limit", 100))
offset = int(request.args.get("offset", 0))
except ValueError:
return _error("Некорректные параметры пагинации", 400)
rows = db.session.execute(
select(ComponentStock)
.where(ComponentStock.is_deleted.is_(False))
.order_by(
ComponentStock.sort_order.asc(),
ComponentStock.updated_at.desc(),
)
.offset(offset)
.limit(limit)
).scalars().all()
return jsonify(
[
{
"id": s.id,
"component_id": s.component_id,
"component_name": s.component_name,
"total_kg": s.total_kg,
"inflow_kg": s.inflow_kg,
"baseline_consumed_kg": s.baseline_consumed_kg,
"stocktake_at": s.stocktake_at.isoformat() if s.stocktake_at else None,
"updated_at": s.updated_at.isoformat() if s.updated_at else None,
"updated_by": s.updated_by,
}
for s in rows
]
)