создал несколько таблиц

This commit is contained in:
Андрей Дувакин 2025-01-31 20:48:55 +05:00
parent 74787e7e44
commit fc63f9e167
10 changed files with 127 additions and 2 deletions

View File

@ -1,6 +1,6 @@
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
from app.config import settings
from app.settings import settings
engine = create_async_engine(settings.DATABASE_URL, echo=True)

View File

@ -0,0 +1,30 @@
from enum import Enum as PyEnum
from sqlalchemy import Column, Integer, ForeignKey, Float, Enum
from sqlalchemy.orm import relationship
from app.domain.models import Base
class SideEnum(PyEnum):
LEFT = 'левая'
RIGHT = 'правая'
class Lens(Base):
__tablename__ = 'lens'
id = Column(Integer, primary_key=True, autoincrement=True)
tor = Column(Float, nullable=False)
trial = Column(Float, nullable=False)
esa = Column(Float, nullable=False)
fvc = Column(Float, nullable=False) # ПЦК
preset_refraction = Column(Float, nullable=False)
diameter = Column(Float, nullable=False)
periphery_toricity = Column(Float, nullable=False) # Торичность перефирии
side = Column(Enum(SideEnum), nullable=False)
type_id = Column(Integer, ForeignKey('lenses_types.id'), nullable=False)
type = relationship('LensesType', back_populates='lenses')
set = relationship('SetLens', back_populates='lens')

View File

@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, VARCHAR, ForeignKey
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.domain.models import Base
@ -9,3 +9,5 @@ class LensesType(Base):
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(150), nullable=False, unique=True)
lenses = relationship('Lens', back_populates='type')

View File

@ -0,0 +1,13 @@
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.domain.models import Base
class Role(Base):
__tablename__ = 'roles'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(150), nullable=False, unique=True)
users = relationship('User', back_populates='role')

View File

@ -0,0 +1,16 @@
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from app.domain.models import Base
class SetLens(Base):
__tablename__ = 'set_lens'
id = Column(Integer, primary_key=True, autoincrement=True)
set_id = Column(Integer, ForeignKey('sets.id'), nullable=False)
lens_id = Column(Integer, ForeignKey('lens.id'), nullable=False, unique=True)
set = relationship('Set', back_populates='lens')
lens = relationship('Lens', back_populates='set')

View File

@ -0,0 +1,14 @@
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.domain.models import Base
class Set(Base):
__tablename__ = 'sets'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(150), nullable=False, unique=True)
count = Column(Integer, nullable=False)
lens = relationship('SetLens', back_populates='set')

View File

@ -0,0 +1,19 @@
from sqlalchemy import Column, Integer, VARCHAR, ForeignKey, String
from sqlalchemy.orm import relationship
from app.domain.models import Base
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
first_name = Column(VARCHAR(200), nullable=False)
last_name = Column(VARCHAR(200), nullable=False)
patronymic = Column(VARCHAR(200))
login = Column(String, nullable=False, unique=True)
password = Column(String, nullable=False)
role_id = Column(Integer, ForeignKey('roles.id'), nullable=False)
role = relationship('Role', back_populates='users')

View File

@ -0,0 +1,17 @@
import logging
from app.settings import settings
import os
log_dir = os.path.dirname(settings.LOG_FILE)
os.makedirs(log_dir, exist_ok=True)
logging.basicConfig(
level=settings.LOG_LEVEL.upper(),
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler(settings.LOG_FILE, encoding="utf-8"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)

14
api/app/settings.py Normal file
View File

@ -0,0 +1,14 @@
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
DATABASE_URL: str
LOG_LEVEL: str = "info"
LOG_FILE: str = "logs/app.log"
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
settings = Settings()