diff --git a/fastapi-app-upload/database/models/csv_file.py b/fastapi-app-upload/database/models/csv_file.py index e69de29..7a5207e 100644 --- a/fastapi-app-upload/database/models/csv_file.py +++ b/fastapi-app-upload/database/models/csv_file.py @@ -0,0 +1,13 @@ +from datetime import datetime + +from sqlalchemy import ForeignKey +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship + +from database.database import Base + +class CSVFile(Base): + __tablename__ = "csv_files" + id: Mapped[int] = mapped_column(primary_key=True) + user_id: Mapped[int] + file_path: Mapped[str] + uploaded_at: Mapped[datetime] = mapped_column(default=datetime.utcnow) \ No newline at end of file diff --git a/fastapi-app-upload/database/models/h5_model.py b/fastapi-app-upload/database/models/h5_model.py deleted file mode 100644 index e69de29..0000000 diff --git a/fastapi-app-upload/database/models/model_statistics.py b/fastapi-app-upload/database/models/model_statistics.py deleted file mode 100644 index e69de29..0000000 diff --git a/fastapi-app-upload/database/models/user.py b/fastapi-app-upload/database/models/user.py deleted file mode 100644 index e69de29..0000000 diff --git a/fastapi-app-upload/repositories/csv_file_repository.py b/fastapi-app-upload/repositories/csv_file_repository.py index f398f74..d46c8bb 100644 --- a/fastapi-app-upload/repositories/csv_file_repository.py +++ b/fastapi-app-upload/repositories/csv_file_repository.py @@ -1,4 +1,6 @@ -from database.database import new_session, CSVFile +from database.database import new_session +from database.models.csv_file import CSVFile + class CSVFileRepository: @staticmethod diff --git a/fastapi-app-upload/repositories/h5_model_repository.py b/fastapi-app-upload/repositories/h5_model_repository.py deleted file mode 100644 index 09d237c..0000000 --- a/fastapi-app-upload/repositories/h5_model_repository.py +++ /dev/null @@ -1,8 +0,0 @@ -from database.database import new_session, H5Model -class H5ModelRepository: - @staticmethod - async def add_model(user_id: int, model_path: str): - async with new_session() as session: - model = H5Model(user_id=user_id, model_path=model_path) - session.add(model) - await session.commit() \ No newline at end of file diff --git a/fastapi-app-upload/repositories/model_statistics_repository.py b/fastapi-app-upload/repositories/model_statistics_repository.py deleted file mode 100644 index f65eb2a..0000000 --- a/fastapi-app-upload/repositories/model_statistics_repository.py +++ /dev/null @@ -1,11 +0,0 @@ -from database.database import new_session, ModelStatistics -from schemas.model_statistics_create import ModelStatisticsCreate - - -class ModelStatisticsRepository: - @staticmethod - async def add_statistics(data: ModelStatisticsCreate): - async with new_session() as session: - stats = ModelStatistics(**data.model_dump()) - session.add(stats) - await session.commit() \ No newline at end of file diff --git a/fastapi-app-upload/repositories/user_repository.py b/fastapi-app-upload/repositories/user_repository.py deleted file mode 100644 index b9a9979..0000000 --- a/fastapi-app-upload/repositories/user_repository.py +++ /dev/null @@ -1,12 +0,0 @@ -from database.database import new_session, User -from schemas.user_create import UserCreate - - -class UserRepository: - @staticmethod - async def create_user(data: UserCreate): - async with new_session() as session: - user = User(username=data.username, password_hash=data.password) - session.add(user) - await session.commit() - return user.id diff --git a/fastapi-app-upload/routers/csv_router.py b/fastapi-app-upload/routers/csv_router.py new file mode 100644 index 0000000..9b053b9 --- /dev/null +++ b/fastapi-app-upload/routers/csv_router.py @@ -0,0 +1,36 @@ +import os +from fastapi import APIRouter, UploadFile, File, Form, HTTPException +from pathlib import Path +from database.database import new_session +import shutil +import pandas as pd +from sqlalchemy import select + +from repositories.csv_file_repository import CSVFileRepository + +router = APIRouter() + +UPLOAD_FOLDER_CSV = Path("uploads/csv") +UPLOAD_FOLDER_CSV.mkdir(parents=True, exist_ok=True) + +UPLOAD_FOLDER_MODELS = "uploads/models" +os.makedirs(UPLOAD_FOLDER_MODELS, exist_ok=True) + +# Обновлённый метод для загрузки CSV файла +@router.post("/upload/csv/") +async def upload_csv(user_id: int = Form(...), file: UploadFile = File(...)): + + # Формируем путь для сохранения + user_folder = UPLOAD_FOLDER_CSV / str(user_id) + user_folder.mkdir(parents=True, exist_ok=True) + file_path = user_folder / file.filename + + # Сохраняем файл + with open(file_path, "wb") as buffer: + shutil.copyfileobj(file.file, buffer) + + # Сохраняем данные в БД, заменяя обратные слэши на прямые + normalized_path = str(file_path).replace("\\", "/") + await CSVFileRepository.upload_file(user_id=user_id, file_path=normalized_path) + return {"message": "CSV файл загружен", "file_path": normalized_path} + diff --git a/fastapi-app-upload/schemas/h5_model_create.py b/fastapi-app-upload/schemas/h5_model_create.py deleted file mode 100644 index a42e849..0000000 --- a/fastapi-app-upload/schemas/h5_model_create.py +++ /dev/null @@ -1,7 +0,0 @@ -from pydantic import BaseModel -from datetime import datetime -from typing import Optional - -# H5ModelCreate: для добавления модели -class H5ModelCreate(BaseModel): - path_model: str \ No newline at end of file diff --git a/fastapi-app-upload/schemas/model_statistics_create.py b/fastapi-app-upload/schemas/model_statistics_create.py deleted file mode 100644 index 35f2973..0000000 --- a/fastapi-app-upload/schemas/model_statistics_create.py +++ /dev/null @@ -1,10 +0,0 @@ -from pydantic import BaseModel -from datetime import datetime -from typing import Optional - -# ModelStatisticsCreate: для сохранения статистики модели -class ModelStatisticsCreate(BaseModel): - id_model: int - accuracy: float - loss: float - created_at: Optional[datetime] = None diff --git a/fastapi-app-upload/schemas/user_create.py b/fastapi-app-upload/schemas/user_create.py deleted file mode 100644 index b1ab7cb..0000000 --- a/fastapi-app-upload/schemas/user_create.py +++ /dev/null @@ -1,8 +0,0 @@ -from pydantic import BaseModel -from datetime import datetime -from typing import Optional - -# UserCreate: для создания пользователя -class UserCreate(BaseModel): - username: str - password: str \ No newline at end of file