Browse Source

General

master
VinokurovVE 12 months ago
parent
commit
c6c8385253
  1. 2
      backend_fastapi/auth.py
  2. 26
      backend_fastapi/general.py
  3. 30
      backend_fastapi/models.py
  4. 3
      backend_fastapi/reports.py
  5. 12
      backend_fastapi/repositories.py
  6. 22
      backend_fastapi/schemas.py
  7. 4
      main.py
  8. 1
      requierements.txt

2
backend_fastapi/auth.py

@ -1,4 +1,4 @@
from fastapi import APIRouter
from fastapi import APIRouter, BackgroundTasks
import backend_fastapi.schemas as schemas
from backend_fastapi.repositories import get_stored_roles, add_role, add_user, get_role_all, update_role, delete_role, update_user,delete_user,get_users
from typing import List

26
backend_fastapi/general.py

@ -0,0 +1,26 @@
from fastapi import APIRouter
import backend_fastapi.schemas as schemas
import backend_fastapi.repositories as repo
import asyncio
router = APIRouter()
@router.get("/values")
async def get_values() -> list[schemas.Value]:
return await repo.get_values()
@router.get("/objects")
async def get_objects() -> list[schemas.Object]:
return await repo.get_objects()
@router.get("/report")
async def get_report() -> None:
import pandas as pd
values, objects = await asyncio.gather(repo.get_values(), repo.get_objects())
values = [schemas.Value.model_validate(value).model_dump() for value in values]
objects = [schemas.Object.model_validate(object).model_dump() for object in objects]
df_values= pd.DataFrame(data=values)
df_objects= pd.DataFrame(data=objects)
df_type = df_values['id_param'].where(df_values['id_param'] == 3).notnull()
print(df_values[["id_object","value"]][df_type])

30
backend_fastapi/models.py

@ -1,7 +1,9 @@
from .database import Model
from sqlalchemy.orm import mapped_column, Mapped, relationship
from sqlalchemy import String, Boolean, ForeignKey
from sqlalchemy import String, Boolean, ForeignKey, Date
from sqlalchemy.dialects.mssql import SQL_VARIANT, UNIQUEIDENTIFIER
from uuid import UUID
from datetime import date
class Role(Model):
__tablename__ = "roles"
@ -19,3 +21,27 @@ class User(Model):
is_active: Mapped[bool] = mapped_column(Boolean,default=True)
role_id: Mapped[int] = mapped_column(ForeignKey("roles.id"))
role: Mapped["Role"] = relationship()
class Object(Model):
__tablename__ = "vObjects"
id: Mapped[UUID] = mapped_column(UNIQUEIDENTIFIER, primary_key=True)
id_parent: Mapped[UUID|None] = mapped_column(UNIQUEIDENTIFIER,nullable=True)
year: Mapped[int | None] = mapped_column(nullable=False)
id_city: Mapped[int] = mapped_column(nullable=False)
class Value(Model):
__tablename__ = "vValues"
id: Mapped[int] = mapped_column( primary_key=True)
id_object: Mapped[UUID] = mapped_column(ForeignKey("vObjects.id"))
id_param:Mapped[int] = mapped_column(nullable=False)
value:Mapped[str|None] = mapped_column(String(250))
date_s: Mapped[date] = mapped_column(Date,nullable=False)
date_po: Mapped[date|None] = mapped_column(Date,nullable=True)
id_user:Mapped[int] = mapped_column(nullable=False)
# class Parameter(Model):
# __tablename__ = "vParameters"

3
backend_fastapi/reports.py

@ -0,0 +1,3 @@
import pandas as pd
import asyncio

12
backend_fastapi/repositories.py

@ -90,5 +90,17 @@ async def update_user(user: schemas.User, id: int):
return {f"{id=} был обновлен"}
async def get_objects():
async with async_session() as session:
result = await session.scalars(select(models.Object))
return result.all()
async def get_values():
async with async_session() as session:
result = await session.scalars(select(models.Value))
return result.all()
async def get_stored_roles():
return await exec_procedure('get_roles')

22
backend_fastapi/schemas.py

@ -1,5 +1,6 @@
from pydantic import BaseModel, ConfigDict, EmailStr
from uuid import UUID
from datetime import date
class RoleBase(BaseModel):
name: str
@ -24,3 +25,22 @@ class User(UserBase):
class Role(RoleBase):
model_config = ConfigDict(from_attributes=True)
id: int
class Object(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
id_city: int
id_parent: UUID | None
year: int | None
class Value(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
id_object: UUID
id_param: int
value: str|None
date_s: date
date_po: date|None
id_user: int

4
main.py

@ -3,6 +3,7 @@ from fastapi.responses import HTMLResponse
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from backend_fastapi.auth import router as auth_router
from backend_fastapi.general import router as general_router
from backend_fastapi.database import connect, disconnect
@asynccontextmanager
@ -37,7 +38,8 @@ def index():
async def get_data():
return {"firstname": "Котофей","lastname":"Барсикофф","age":"10"}
app.include_router(router=auth_router, prefix="/auth")
app.include_router(router=auth_router, prefix="/auth", tags=["Auth"])
app.include_router(router=general_router, prefix="/general", tags=["General"])
if __name__ == "__main__":
import uvicorn

1
requierements.txt

@ -3,3 +3,4 @@ fastapi
sqlalchemy
aioodbc
python-dotenv
pandas
Loading…
Cancel
Save