64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
# app/routes/sales.py
|
||
"""
|
||
Маршруты API для управления продажами
|
||
Соответствует требованиям ТЗ по истории реализации продукции
|
||
"""
|
||
from fastapi import APIRouter, HTTPException
|
||
from app.database import db
|
||
from app.models import Sale, SaleCreate
|
||
|
||
router = APIRouter()
|
||
|
||
@router.get("/partner/{partner_id}")
|
||
async def get_sales_by_partner(partner_id: int):
|
||
"""
|
||
Получение истории реализации продукции партнером
|
||
Соответствует модулю 4 ТЗ
|
||
"""
|
||
try:
|
||
result = db.execute_query("""
|
||
SELECT sale_id, partner_id, product_name, quantity, sale_date
|
||
FROM sales
|
||
WHERE partner_id = %s
|
||
ORDER BY sale_date DESC
|
||
""", (partner_id,))
|
||
return [dict(row) for row in result]
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=str(e))
|
||
|
||
@router.get("/")
|
||
async def get_all_sales():
|
||
"""Получение всех продаж с информацией о партнерах"""
|
||
try:
|
||
result = db.execute_query("""
|
||
SELECT s.sale_id, s.partner_id, p.company_name, s.product_name,
|
||
s.quantity, s.sale_date
|
||
FROM sales s
|
||
JOIN partners p ON s.partner_id = p.partner_id
|
||
ORDER BY s.sale_date DESC
|
||
""")
|
||
return [dict(row) for row in result]
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=str(e))
|
||
|
||
@router.post("/")
|
||
async def create_sale(sale: SaleCreate):
|
||
"""Создание новой записи о продаже"""
|
||
try:
|
||
result = db.execute_query("""
|
||
INSERT INTO sales (partner_id, product_name, quantity, sale_date)
|
||
VALUES (%s, %s, %s, %s)
|
||
RETURNING sale_id
|
||
""", (sale.partner_id, sale.product_name, sale.quantity, sale.sale_date))
|
||
return {"sale_id": result[0]["sale_id"]}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=str(e))
|
||
|
||
@router.delete("/{sale_id}")
|
||
async def delete_sale(sale_id: int):
|
||
"""Удаление записи о продаже"""
|
||
try:
|
||
db.execute_query("DELETE FROM sales WHERE sale_id = %s", (sale_id,))
|
||
return {"message": "Sale deleted successfully"}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=str(e))
|