Заливаем готовую часть #1

Merged
Sosees04ka merged 26 commits from modified_db into main 2024-11-05 21:26:38 +04:00
9 changed files with 102 additions and 106 deletions
Showing only changes of commit 9bde6c2ecf - Show all commits

View File

@ -9,7 +9,7 @@ from db.models.base import Base
class ExperimentCategory(Base): class ExperimentCategory(Base):
__tablename__ = 'experiment_category' __tablename__ = 'experiment_category'
id: Mapped[int] = mapped_column(Identity(start=21, cycle=True), id: Mapped[int] = mapped_column(Identity(start=1, cycle=True),
primary_key=True) primary_key=True)
name: Mapped[str] name: Mapped[str]

View File

@ -3,10 +3,13 @@ from typing import Sequence
from sqlalchemy import update, delete from sqlalchemy import update, delete
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from typing_extensions import deprecated
from db.models import ExperimentCategory from db.models import ExperimentCategory
@deprecated(
"теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории"
)
class ExperimentCategoryRepository: class ExperimentCategoryRepository:
def __init__(self, session: AsyncSession): def __init__(self, session: AsyncSession):
self.session = session self.session = session

View File

@ -1,42 +1,14 @@
from typing import Sequence, Optional from typing import Sequence
from sqlalchemy import update, delete
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from db.models.experiment_data_model import ExperimentData from db.models.experiment_data_model import ExperimentData
from db.postgres_db_connection import async_session_postgres
async def get_exp_data_by_file_id(file_id: str) -> Sequence[ExperimentData]:
async with async_session_postgres() as session:
result = await session.execute(
class ExperimentDataRepository: select(ExperimentData).where(ExperimentData.file_id == file_id)
def __init__(self, session: AsyncSession):
self.session = session
async def get_all(self) -> Sequence[ExperimentData]:
result = await self.session.execute(select(ExperimentData))
return result.scalars().all()
async def get_by_id(self, id: int) -> ExperimentData:
result = await self.session.execute(select(ExperimentData).where(ExperimentData.id == id))
return result.scalar_one_or_none()
async def create(self, new_data: ExperimentData):
self.session.add(new_data)
await self.session.commit()
async def update(self, id: int, updated_data: dict):
stmt = (
update(ExperimentData).
where(ExperimentData.id == id).
values(**updated_data)
) )
await self.session.execute(stmt) return result.scalars().all()
await self.session.commit()
async def delete(self, id: int):
stmt = delete(ExperimentData).where(ExperimentData.id == id)
await self.session.execute(stmt)
await self.session.commit()

View File

@ -1,44 +1,21 @@
from typing import Sequence from typing import Sequence
from sqlalchemy import update, delete
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from db.models.experiment_parameters_model import ExperimentParameters from db.models.experiment_parameters_model import ExperimentParameters
from db.postgres_db_connection import async_session_postgres
class ExperimentParametersRepository: async def get_exp_parameters_by_category(category_id: int) -> Sequence[ExperimentParameters]:
def __init__(self, session: AsyncSession): async with async_session_postgres() as session:
self.session = session result = await session.execute(
async def get_all(self) -> Sequence[ExperimentParameters]:
result = await self.session.execute(select(ExperimentParameters))
return result.scalars().all()
async def get_by_id(self, id: int) -> ExperimentParameters:
result = await self.session.execute(select(ExperimentParameters).where(ExperimentParameters.id == id))
return result.scalar_one_or_none()
async def get_experiment_parameters_by_category(self, session: AsyncSession, category_id: int) -> Sequence[ExperimentParameters]:
result = await self.session.execute(
select(ExperimentParameters).where(ExperimentParameters.experiment_category_id == category_id) select(ExperimentParameters).where(ExperimentParameters.experiment_category_id == category_id)
) )
return result.scalars().all() return result.scalars().all()
async def create(self, new_data: ExperimentParameters): async def get_exp_parameters_by_exp_hash(exp_hash: str) -> Sequence[ExperimentParameters]:
self.session.add(new_data) async with async_session_postgres() as session:
await self.session.commit() result = await session.execute(
select(ExperimentParameters).where(ExperimentParameters.experiment_hash == exp_hash)
async def update(self, id: int, updated_data: dict):
stmt = (
update(ExperimentParameters).
where(ExperimentParameters.id == id).
values(**updated_data)
) )
await self.session.execute(stmt) return result.scalars().all()
await self.session.commit()
async def delete(self, id: int):
stmt = delete(ExperimentParameters).where(ExperimentParameters.id == id)
await self.session.execute(stmt)
await self.session.commit()

View File

@ -8,41 +8,41 @@ from db.models.load_parameters_model import LoadParameters
from db.postgres_db_connection import async_session_postgres from db.postgres_db_connection import async_session_postgres
async def get_all() -> Sequence[LoadParameters]: # async def get_all() -> Sequence[LoadParameters]:
async with async_session_postgres() as session: # async with async_session_postgres() as session:
result = await session.execute(select(LoadParameters)) # result = await session.execute(select(LoadParameters))
return result.scalars().all() # return result.scalars().all()
#
#
async def get_by_id(id: int) -> LoadParameters: # async def get_by_id(id: int) -> LoadParameters:
async with async_session_postgres() as session: # async with async_session_postgres() as session:
result = await session.execute(select(LoadParameters).where(LoadParameters.id == id)) # result = await session.execute(select(LoadParameters).where(LoadParameters.id == id))
return result.scalar_one_or_none() # return result.scalar_one_or_none()
#
#
async def create(new_data: LoadParameters): # async def create(new_data: LoadParameters):
async with async_session_postgres() as session: # async with async_session_postgres() as session:
session.add(new_data) # session.add(new_data)
await session.commit() # await session.commit()
#
#
async def update(id: int, updated_data: dict): # async def update(id: int, updated_data: dict):
async with async_session_postgres() as session: # async with async_session_postgres() as session:
stmt = ( # stmt = (
update_(LoadParameters). # update_(LoadParameters).
where(LoadParameters.id == id). # where(LoadParameters.id == id).
values(**updated_data) # values(**updated_data)
) # )
await session.execute(stmt) # await session.execute(stmt)
await session.commit() # await session.commit()
#
#
async def delete(id: int) -> bool: # async def delete(id: int) -> bool:
async with async_session_postgres() as session: # async with async_session_postgres() as session:
stmt = delete_(LoadParameters).where(LoadParameters.id == id) # stmt = delete_(LoadParameters).where(LoadParameters.id == id)
result = await session.execute(stmt) # result = await session.execute(stmt)
await session.commit() # await session.commit()
return result.rowcount > 0 # return result.rowcount > 0
# class LoadParametersRepository: # class LoadParametersRepository:

View File

@ -1,4 +1,5 @@
from typing import Sequence from typing import Sequence
from typing_extensions import deprecated
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy import update, delete from sqlalchemy import update, delete
@ -6,7 +7,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
from db.models.recycling_parameters_model import RecyclingParameters from db.models.recycling_parameters_model import RecyclingParameters
@deprecated(
"теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории"
)
class RecyclingParametersRepository: class RecyclingParametersRepository:
def __init__(self, session: AsyncSession): def __init__(self, session: AsyncSession):
self.session = session self.session = session

View File

@ -1,5 +1,5 @@
import asyncio
from fastapi import FastAPI, HTTPException, BackgroundTasks from fastapi import FastAPI, HTTPException, BackgroundTasks
from db.csv_to_db import csv_to_db from db.csv_to_db import csv_to_db
from network.routes import (ch_experimentdb_experiment_data_router, experiment_data_router, from network.routes import (ch_experimentdb_experiment_data_router, experiment_data_router,
experiment_parameters_router, experiment_category_router) experiment_parameters_router, experiment_category_router)

View File

@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException
from db.crud import * from db.crud import *
from db.models import ExperimentData from db.models import ExperimentData
from db.repositories import get_exp_data_by_file_id
from network.schemas import ExperimentDataBody from network.schemas import ExperimentDataBody
router = APIRouter() router = APIRouter()
@ -50,6 +51,19 @@ async def get_by_id_experiment_data(id: int):
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
@router.get('/{file_id}')
async def get_experiment_data_by_file_id(file_id: str):
try:
result = await get_exp_data_by_file_id(file_id)
if result is not None:
return result
else:
return {"message": f'<ExperimentData> с file_id = {id} - не найдены'}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
@router.delete('/{id}/delete') @router.delete('/{id}/delete')
async def delete_experiment_data(id: int): async def delete_experiment_data(id: int):
try: try:

View File

@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException
from db.crud import * from db.crud import *
from db.models import LoadParameters from db.models import LoadParameters
from db.repositories import get_exp_parameters_by_category, get_exp_parameters_by_exp_hash
from network.schemas import ExperimentParametersBody from network.schemas import ExperimentParametersBody
router = APIRouter() router = APIRouter()
@ -51,6 +52,32 @@ async def get_by_id_experiment_parameters(id: int):
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}") raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
@router.get('/by_category/{id}')
async def get_experiment_parameters_by_exp_category(id: int):
try:
result = await get_exp_parameters_by_category(id)
if result is not None:
return result
else:
return {"message": f'<ExperimentParameters> с идентификатором категории - {id} - не найдены'}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
@router.get('/by_exp_hash/{hash}')
async def get_experiment_parameters_by_exp_category(hash: str):
try:
result = await get_exp_parameters_by_exp_hash(hash)
if result is not None:
return result
else:
return {"message": f'<ExperimentParameters> с experiment_hash = {id} - не найдены'}
except Exception as e:
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
@router.delete('/{id}/delete') @router.delete('/{id}/delete')
async def delete_experiment_parameters(id: int): async def delete_experiment_parameters(id: int):
try: try: