cud documents
This commit is contained in:
@@ -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
|
||||
@@ -1,2 +1,3 @@
|
||||
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 .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')
|
||||
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