cud documents

This commit is contained in:
dderbentsov
2023-08-08 01:57:31 +03:00
parent 0560da6781
commit f097b7ec6c
6 changed files with 76 additions and 3 deletions

View File

@@ -12,9 +12,10 @@ def create_app() -> FastAPI:
return 'ok'
from personal_info.routers import persons, addresses
from personal_info.routers import persons, addresses, documents
app.include_router(persons.router)
app.include_router(addresses.router)
app.include_router(documents.router)
return app

View File

@@ -1,2 +1,3 @@
from .person import *
from .address import *
from .address import *
from .documents import *

View File

@@ -0,0 +1,27 @@
from datetime import date
from typing import List, Optional
from pydantic import BaseModel, Field, ConfigDict
from pydantic.types import UUID4
class DocumentCreateIn(BaseModel):
person_id: UUID4
category: str
series: str
number: str
issued_by: str
issued_at: date | None
attachments: Optional[List[str]]
class DocumentCreateOut(DocumentCreateIn):
id: UUID4
class Config:
orm_mode = True
class DocumentUpdateIn(BaseModel):
category: str | None
series: str | None
number: str | None
issued_by: str | None
issued_at: date | None
attachments: Optional[List[str]]

View File

@@ -0,0 +1,31 @@
from fastapi import Depends, Request
from fastapi.routing import APIRouter
from pydantic.types import UUID4
from typing import List, Optional, Dict
from personal_info.db import models
from personal_info.db.schemas import (DocumentCreateOut, DocumentCreateIn, DocumentUpdateIn)
from personal_info.services import DocumentService, get_documents_service
router = APIRouter(prefix='/documents')
@router.post('/', status_code=201, response_model=DocumentCreateOut)
async def create_document(
document: DocumentCreateIn, documents_service: DocumentService = Depends(get_documents_service)
) -> models.Document:
return documents_service.create(document)
@router.patch('/{id}', response_model=DocumentCreateOut)
async def update_document(
id: UUID4,
document: DocumentUpdateIn,
documents_service: DocumentService = Depends(get_documents_service)
) -> Optional[models.Document]:
return documents_service.update(id, document)
@router.delete('/{id}', status_code=200)
async def update_document(
id: UUID4,
documents_service: DocumentService = Depends(get_documents_service)
) -> None:
return documents_service.delete(id)

View File

@@ -5,6 +5,7 @@ from personal_info.db.session import get_session
from .persons import PersonService
from .addresses import AddressService
from .documents import DocumentService
def get_persons_service(db_session: Session = Depends(get_session)) -> PersonService:
return PersonService(db_session)
@@ -12,4 +13,7 @@ def get_persons_service(db_session: Session = Depends(get_session)) -> PersonSer
def get_addresses_service(db_session: Session = Depends(get_session)) -> AddressService:
return AddressService(db_session)
__all__ = ('get_persons_service', 'get_addresses_service')
def get_documents_service(db_session: Session = Depends(get_session)) -> DocumentService:
return DocumentService(db_session)
__all__ = ('get_persons_service', 'get_addresses_service', 'get_documents_service')

View File

@@ -0,0 +1,9 @@
from typing import Any, List, Dict
from sqlalchemy.orm import Session
from personal_info.db.schemas import (DocumentCreateIn)
from personal_info.db import models
from personal_info.services.base import BaseService
class DocumentService(BaseService[models.Document, DocumentCreateIn, Any]):
def __init__(self, db_session: Session):
super(DocumentService, self).__init__(models.Document, db_session)