list medical card base
This commit is contained in:
0
src/medical_info/db/__init__.py
Normal file
0
src/medical_info/db/__init__.py
Normal file
53
src/medical_info/db/models.py
Normal file
53
src/medical_info/db/models.py
Normal file
@@ -0,0 +1,53 @@
|
||||
import uuid
|
||||
from typing import Any
|
||||
import datetime
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects.postgresql import UUID, ARRAY, JSONB
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import relationship, DeclarativeBase
|
||||
from sqlalchemy.sql.schema import ForeignKey
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
class BaseModel(Base):
|
||||
__abstract__ = True
|
||||
|
||||
id = sa.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
|
||||
created_at = sa.Column(sa.TIMESTAMP, nullable=False, default=datetime.datetime.now())
|
||||
updated_at = sa.Column(sa.TIMESTAMP, nullable=False, default=datetime.datetime.now(), onupdate=datetime.datetime.now())
|
||||
|
||||
class MedicalCard(BaseModel):
|
||||
__tablename__ = 'medical_cards'
|
||||
|
||||
number = sa.Column(sa.String(100), nullable=False)
|
||||
checkups = relationship('Checkup', back_populates='medical_card')
|
||||
health_maps = relationship('HealthMap', back_populates='medical_card')
|
||||
confidant_persons = sa.Column(ARRAY(UUID(as_uuid=True)))
|
||||
person_id = sa.Column(UUID(as_uuid=True), nullable=False)
|
||||
|
||||
|
||||
class Checkup(BaseModel):
|
||||
__tablename__ = 'checkups'
|
||||
|
||||
medical_card_id = sa.Column(UUID(as_uuid=True), sa.ForeignKey("medical_cards.id"), nullable=False)
|
||||
medical_card = relationship('MedicalCard', back_populates='checkups')
|
||||
medic_id = sa.Column(UUID(as_uuid=True))
|
||||
claims = sa.Column(ARRAY(sa.String)) # жалобы
|
||||
allergies = sa.Column(ARRAY(sa.String)) # аллергологический анамнез
|
||||
diseases = sa.Column(ARRAY(sa.String)) # перенесенные и сопутствующие заболевания
|
||||
medicines = sa.Column(ARRAY(sa.String)) # принимаемые лекарственные препараты
|
||||
disease_process = sa.Column(sa.Text) # Развитие настоящего заболевания
|
||||
visual_inspection = sa.Column(ARRAY(sa.String)) # внешний осмотр
|
||||
|
||||
dental_formula = sa.Column(JSONB)
|
||||
dental_formula_ext = sa.Column(JSONB)
|
||||
|
||||
class HealthMap(BaseModel):
|
||||
__tablename__ = 'health_maps'
|
||||
|
||||
comment = sa.Column(sa.Text)
|
||||
attachments = sa.Column(ARRAY(sa.String))
|
||||
medical_card_id = sa.Column(UUID(as_uuid=True), sa.ForeignKey("medical_cards.id"), nullable=False)
|
||||
medical_card = relationship('MedicalCard', back_populates='health_maps')
|
||||
1
src/medical_info/db/schemas/__init__.py
Normal file
1
src/medical_info/db/schemas/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .medical_card import *
|
||||
11
src/medical_info/db/schemas/medical_card.py
Normal file
11
src/medical_info/db/schemas/medical_card.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
class MedicalCard(BaseModel):
|
||||
number: str
|
||||
person_id: str
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
class MedicalCardCreate(BaseModel):
|
||||
person_id: str
|
||||
23
src/medical_info/db/session.py
Normal file
23
src/medical_info/db/session.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from functools import lru_cache
|
||||
from typing import Generator
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import scoped_session, sessionmaker
|
||||
|
||||
from medical_info.config import get_settings
|
||||
|
||||
engine = create_engine(get_settings().database_url, pool_pre_ping=True)
|
||||
|
||||
@lru_cache
|
||||
def create_session() -> scoped_session:
|
||||
Session = scoped_session(
|
||||
sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
)
|
||||
return Session
|
||||
|
||||
def get_session() -> Generator[scoped_session, None, None]:
|
||||
Session = create_session()
|
||||
try:
|
||||
yield Session
|
||||
finally:
|
||||
Session.remove()
|
||||
Reference in New Issue
Block a user