list medical card base
This commit is contained in:
11
src/medical_info/services/__init__.py
Normal file
11
src/medical_info/services/__init__.py
Normal 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')
|
||||
52
src/medical_info/services/base.py
Normal file
52
src/medical_info/services/base.py
Normal 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()
|
||||
9
src/medical_info/services/medical_cards.py
Normal file
9
src/medical_info/services/medical_cards.py
Normal 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)
|
||||
Reference in New Issue
Block a user