After Graduate Update

This commit is contained in:
Daniel 2025-11-26 19:31:33 +03:00
parent b92a91ab37
commit c6917dd85e
69 changed files with 7540 additions and 0 deletions

View file

@ -0,0 +1,103 @@
# app/routes/upload.py
"""
Маршруты API для загрузки и импорта данных
Соответствует требованиям ТЗ по импорту данных
"""
import pandas as pd
from fastapi import APIRouter, UploadFile, File, HTTPException
from app.database import db
from app.models import UploadResponse
router = APIRouter()
@router.post("/partners")
async def upload_partners(file: UploadFile = File(...)):
"""
Загрузка партнеров из файла
Подготовка данных для импорта согласно ТЗ
"""
try:
if file.filename.endswith('.xlsx'):
df = pd.read_excel(file.file)
elif file.filename.endswith('.csv'):
df = pd.read_csv(file.file)
else:
raise HTTPException(status_code=400, detail="Unsupported file format")
processed = 0
errors = []
for index, row in df.iterrows():
try:
# Валидация и преобразование данных
rating = row.get('rating', 0)
if pd.isna(rating):
rating = 0
db.execute_query("""
INSERT INTO partners
(partner_type, company_name, legal_address, inn, director_name,
phone, email, rating, sales_locations)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
""", (
row.get('partner_type'),
row.get('company_name'),
row.get('legal_address'),
row.get('inn'),
row.get('director_name'),
row.get('phone'),
row.get('email'),
int(rating), # Конвертация в целое число
row.get('sales_locations')
))
processed += 1
except Exception as e:
errors.append(f"Row {index}: {str(e)}")
return UploadResponse(
message="File processed successfully",
processed_rows=processed,
errors=errors
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/sales")
async def upload_sales(file: UploadFile = File(...)):
"""Загрузка продаж из файла"""
try:
if file.filename.endswith('.xlsx'):
df = pd.read_excel(file.file)
elif file.filename.endswith('.csv'):
df = pd.read_csv(file.file)
else:
raise HTTPException(status_code=400, detail="Unsupported file format")
processed = 0
errors = []
for index, row in df.iterrows():
try:
db.execute_query("""
INSERT INTO sales
(partner_id, product_name, quantity, sale_date)
VALUES (%s, %s, %s, %s)
""", (
int(row.get('partner_id')),
row.get('product_name'),
row.get('quantity'),
row.get('sale_date')
))
processed += 1
except Exception as e:
errors.append(f"Row {index}: {str(e)}")
return UploadResponse(
message="File processed successfully",
processed_rows=processed,
errors=errors
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))