cud documents
This commit is contained in:
@@ -12,9 +12,10 @@ def create_app() -> FastAPI:
|
|||||||
return 'ok'
|
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(persons.router)
|
||||||
app.include_router(addresses.router)
|
app.include_router(addresses.router)
|
||||||
|
app.include_router(documents.router)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
from .person import *
|
from .person import *
|
||||||
from .address import *
|
from .address import *
|
||||||
|
from .documents import *
|
||||||
27
src/personal_info/db/schemas/documents.py
Normal file
27
src/personal_info/db/schemas/documents.py
Normal 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]]
|
||||||
31
src/personal_info/routers/documents.py
Normal file
31
src/personal_info/routers/documents.py
Normal 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)
|
||||||
@@ -5,6 +5,7 @@ from personal_info.db.session import get_session
|
|||||||
|
|
||||||
from .persons import PersonService
|
from .persons import PersonService
|
||||||
from .addresses import AddressService
|
from .addresses import AddressService
|
||||||
|
from .documents import DocumentService
|
||||||
|
|
||||||
def get_persons_service(db_session: Session = Depends(get_session)) -> PersonService:
|
def get_persons_service(db_session: Session = Depends(get_session)) -> PersonService:
|
||||||
return PersonService(db_session)
|
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:
|
def get_addresses_service(db_session: Session = Depends(get_session)) -> AddressService:
|
||||||
return AddressService(db_session)
|
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')
|
||||||
9
src/personal_info/services/documents.py
Normal file
9
src/personal_info/services/documents.py
Normal 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)
|
||||||
Reference in New Issue
Block a user