list medical card base

This commit is contained in:
dderbentsov
2023-07-22 01:03:10 +03:00
parent e69aab6573
commit 86a618cc57
18 changed files with 526 additions and 39 deletions

View File

@@ -0,0 +1,11 @@
from fastapi import Depends
from sqlalchemy.orm import Session
from medical_info.db.session import get_session
from .medical_cards import MedicalCardService
def get_medical_cards_service(db_session: Session = Depends(get_session)) -> MedicalCardService:
return MedicalCardService(db_session)
__all__ = ('get_medical_cards_service')

View File

@@ -0,0 +1,52 @@
from typing import Any, Generic, List, Optional, Type, TypeVar
import sqlalchemy
from pydantic import BaseModel
from sqlalchemy.orm import Session
from starlette.exceptions import HTTPException
from medical_info.db.models import Base
ModelType = TypeVar('ModelType', bound=Base)
CreateSchemaType = TypeVar('CreateSchemaType', bound=BaseModel)
UpdateSchemaType = TypeVar('UpdateSchemaType', bound=BaseModel)
class BaseService(Generic[ModelType, CreateSchemaType, UpdateSchemaType]):
def __init__(self, model: Type[ModelType], db_session: Session):
self.model = model
self.db_session = db_session
def get(self, id: Any) -> Optional[ModelType]:
obj: Optional[ModelType] = self.db_session.get(self.model, id)
if obj is None:
raise HTTPException(status_code=404, detail='NotFound')
return obj
def list(self) -> List[ModelType]:
objs: List[ModelType] = self.db_session.query(self.model).all()
return objs
def create(self, obj: CreateSchemaType) -> ModelType:
db_obj: ModelType = self.model(**obj.dict())
self.db_session.add(db_obj)
try:
self.db_session.commit()
except sqlalchemy.exc.IntegrityError as e:
self.db_session.rollback()
if 'duplicate key' in str(e):
raise HTTPException(status_code=409, detail='Conflict Error')
else:
raise e
return db_obj
def update(self, id: Any, obj: UpdateSchemaType) -> Optional[ModelType]:
db_obj = self.get(id)
for column, value in obj.dict(exclude_unset=True).items():
setattr(db_obj, column, value)
self.db_session.commit()
return db_obj
def delete(self, id: Any) -> None:
db_obj = self.db_session.get(self.model, id)
self.db_session.delete(db_obj)
self.db_session.commit()

View File

@@ -0,0 +1,9 @@
from typing import Any
from medical_info.db.models import MedicalCard
from medical_info.db.schemas import MedicalCardCreate
from medical_info.services.base import BaseService
from sqlalchemy.orm import Session
class MedicalCardService(BaseService[MedicalCard, MedicalCardCreate, Any]):
def __init__(self, db_session: Session):
super(MedicalCardService, self).__init__(MedicalCard, db_session)