address create

This commit is contained in:
dderbentsov
2023-08-08 01:17:22 +03:00
parent d288327029
commit 9d9a30d0c3
8 changed files with 65 additions and 7 deletions

View File

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

View File

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

View File

@@ -0,0 +1,20 @@
from datetime import date
from typing import List, Optional
from pydantic import BaseModel, Field, ConfigDict
from pydantic.types import UUID4
class AddressCreateIn(BaseModel):
person_id: UUID4
category: str
region: Optional[str]
city: Optional[str]
street: Optional[str]
house: Optional[str]
flat: Optional[str]
class AddressCreateOut(AddressCreateIn):
id: UUID4
class Config:
orm_mode = True

View File

@@ -0,0 +1,23 @@
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 (AddressCreateOut, AddressCreateIn)
from personal_info.services import AddressService, get_addresses_service
router = APIRouter(prefix='/address')
@router.post('/', status_code=201, response_model=AddressCreateOut)
async def create_address(
address: AddressCreateIn, addresses_service: AddressService = Depends(get_addresses_service)
) -> models.Address:
return addresses_service.create(address)
# @router.post('/batch', response_model=List[Person])
# async def batch_list_persons(
# request: Dict = {},
# persons_service: PersonService = Depends(get_persons_service)
# ) -> List[models.Person]:
# return persons_service.batch_get(request)

View File

@@ -3,8 +3,8 @@ from fastapi.routing import APIRouter
from pydantic.types import UUID4 from pydantic.types import UUID4
from typing import List, Optional, Dict from typing import List, Optional, Dict
from personal_info.db import models, schemas from personal_info.db import models
from personal_info.db.schemas import Person, PersonDetail, PersonCreate from personal_info.db.schemas import (Person, PersonDetail, PersonCreate)
from personal_info.services import PersonService, get_persons_service from personal_info.services import PersonService, get_persons_service
router = APIRouter(prefix='/persons') router = APIRouter(prefix='/persons')
@@ -30,7 +30,7 @@ async def create_person(
) -> models.Person: ) -> models.Person:
return persons_service.create(person) return persons_service.create(person)
@router.post('/batch', response_model=List[schemas.Person]) @router.post('/batch', response_model=List[Person])
async def batch_list_persons( async def batch_list_persons(
request: Dict = {}, request: Dict = {},
persons_service: PersonService = Depends(get_persons_service) persons_service: PersonService = Depends(get_persons_service)

View File

@@ -4,8 +4,12 @@ from sqlalchemy.orm import Session
from personal_info.db.session import get_session from personal_info.db.session import get_session
from .persons import PersonService from .persons import PersonService
from .addresses import AddressService
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)
__all__ = ('get_persons_service') def get_addresses_service(db_session: Session = Depends(get_session)) -> AddressService:
return AddressService(db_session)
__all__ = ('get_persons_service', 'get_addresses_service')

View File

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

View File

@@ -1,7 +1,7 @@
from typing import Any, List, Dict from typing import Any, List, Dict
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from starlette.exceptions import HTTPException
from personal_info.db.models import Person, Address, Document, Contact from personal_info.db.models import Person, Address, Document, Contact
from personal_info.db.schemas import PersonCreate, PersonBase from personal_info.db.schemas import PersonCreate, PersonBase
from personal_info.db import models from personal_info.db import models