cud contacts

This commit is contained in:
dderbentsov
2023-08-08 02:19:31 +03:00
parent f097b7ec6c
commit e699143600
8 changed files with 70 additions and 5 deletions

View File

@@ -12,10 +12,11 @@ def create_app() -> FastAPI:
return 'ok' return 'ok'
from personal_info.routers import persons, addresses, documents from personal_info.routers import persons, addresses, documents, contacts
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) app.include_router(documents.router)
app.include_router(contacts.router)
return app return app

View File

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

View File

@@ -0,0 +1,19 @@
from datetime import date
from typing import List, Optional
from pydantic import BaseModel, Field, ConfigDict
from pydantic.types import UUID4
class ContactCreateIn(BaseModel):
person_id: UUID4
category: str
value: str
class ContactCreateOut(ContactCreateIn):
id: UUID4
class Config:
orm_mode = True
class ContactUpdateIn(BaseModel):
category: str | None
value: str | None

View File

@@ -24,7 +24,7 @@ async def update_address(
return addresses_service.update(id, address) return addresses_service.update(id, address)
@router.delete('/{id}', status_code=200) @router.delete('/{id}', status_code=200)
async def update_address( async def delete_address(
id: UUID4, id: UUID4,
addresses_service: AddressService = Depends(get_addresses_service) addresses_service: AddressService = Depends(get_addresses_service)
) -> None: ) -> None:

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 (ContactCreateOut, ContactCreateIn, ContactUpdateIn)
from personal_info.services import ContactService, get_contacts_service
router = APIRouter(prefix='/contacts')
@router.post('/', status_code=201, response_model=ContactCreateOut)
async def create_contact(
contact: ContactCreateIn, contacts_service: ContactService = Depends(get_contacts_service)
) -> models.Contact:
return contacts_service.create(contact)
@router.patch('/{id}', response_model=ContactCreateOut)
async def update_contact(
id: UUID4,
contact: ContactUpdateIn,
contacts_service: ContactService = Depends(get_contacts_service)
) -> Optional[models.Contact]:
return contacts_service.update(id, contact)
@router.delete('/{id}', status_code=200)
async def delete_contact(
id: UUID4,
contacts_service: ContactService = Depends(get_contacts_service)
) -> None:
return contacts_service.delete(id)

View File

@@ -24,7 +24,7 @@ async def update_document(
return documents_service.update(id, document) return documents_service.update(id, document)
@router.delete('/{id}', status_code=200) @router.delete('/{id}', status_code=200)
async def update_document( async def delete_document(
id: UUID4, id: UUID4,
documents_service: DocumentService = Depends(get_documents_service) documents_service: DocumentService = Depends(get_documents_service)
) -> None: ) -> None:

View File

@@ -6,6 +6,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 from .documents import DocumentService
from .contacts import ContactService
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)
@@ -16,4 +17,7 @@ def get_addresses_service(db_session: Session = Depends(get_session)) -> Address
def get_documents_service(db_session: Session = Depends(get_session)) -> DocumentService: def get_documents_service(db_session: Session = Depends(get_session)) -> DocumentService:
return DocumentService(db_session) return DocumentService(db_session)
__all__ = ('get_persons_service', 'get_addresses_service', 'get_documents_service') def get_contacts_service(db_session: Session = Depends(get_session)) -> ContactService:
return ContactService(db_session)
__all__ = ('get_persons_service', 'get_addresses_service', 'get_documents_service', 'get_contacts_service')

View File

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