This commit is contained in:
dderbentsov
2023-07-13 02:14:21 +03:00
parent bc339cefb9
commit 322f14c096
7 changed files with 86 additions and 14 deletions

View File

@@ -0,0 +1,33 @@
"""initial
Revision ID: 16041bfd2411
Revises:
Create Date: 2023-07-13 01:26:56.342068
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '16041bfd2411'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('people',
sa.Column('id', sa.UUID(), nullable=False),
sa.Column('first_name', sa.Text(), nullable=False),
sa.Column('last_name', sa.Text(), nullable=False),
sa.PrimaryKeyConstraint('id')
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('people')
# ### end Alembic commands ###

View File

@@ -1,5 +1,16 @@
export PYTHONPATH='/home/dd/astra/personal_information/src' export PYTHONPATH='/home/dd/astra/personal_information/src'
export POSTGRES_DB='personal_info_db'
docker run -itd -e POSTGRES_USER=barbie -e POSTGRES_PASSWORD=redStar4,1 -p 5432:5432 -v /home/dd/astra/postgresql_db:/var/lib/postgresql/data --name personal_info_db postgres docker run -itd -e POSTGRES_USER=barbie -e POSTGRES_PASSWORD=redStar4,1 -p 5432:5432 -v /home/dd/astra/postgresql_db:/var/lib/postgresql/data --name personal_info_db postgres
docker exec -it personal_info_db bash docker exec -it personal_info_db bash
psql -U barbie -d barbie psql -U barbie -d barbie
CREATE DATABASE personal_info_db; CREATE DATABASE personal_info_db;
alembic revision --autogenerate -m 'initial'
alembic init alembic
в alembic.ini правим sqlalchemy.url
alembic revision -m "add columns to checkup table"
alembic upgrade ae1 (можно часть версии, лишь бы однозначно указывала)
uvicorn --reload --port 8000 personal_info.main:app

View File

@@ -14,6 +14,6 @@ def create_app() -> FastAPI:
from personal_info.routers import persons from personal_info.routers import persons
app.include(persons.router) app.include_router(persons.router)
return app return app

View File

@@ -1,6 +1,6 @@
from functools import lru_cache from functools import lru_cache
from typing import Optional from typing import Optional
from os import getenv
from pydantic import BaseSettings, PostgresDsn from pydantic import BaseSettings, PostgresDsn
class Settings(BaseSettings): class Settings(BaseSettings):
@@ -11,5 +11,23 @@ def get_settings() -> Settings:
settings = Settings() # type: ignore settings = Settings() # type: ignore
print('333333333333333333333333333333333333333333') print('333333333333333333333333333333333333333333')
print(settings) print(settings)
print(getenv("POSTGRES_DB"))
if (db := getenv("POSTGRES_DB")) is not None:
# settings.database_url = PostgresDsn.build(
# scheme="postgresql",
# user=settings.database_url.user,
# password=settings.database_url.password,
# host=settings.database_url.host,
# port=settings.database_url.port,
# path=f"/{db}",
# )
settings.database_url = PostgresDsn.build(
scheme="postgresql",
user='barbie',
password='redStar4,1',
host='localhost',
port='5432',
path=f"/{db}",
)
#CONTINUE #CONTINUE
return settings return settings

View File

@@ -9,8 +9,14 @@ class Person(BaseModel):
first_name: str first_name: str
last_name: str last_name: str
class PersonCreate(Person): class Config:
pass orm_mode = True
class PersonCreate(BaseModel):
first_name: str
last_name: str
class PersonDetail(Person): class PersonDetail(Person):
pass id: UUID4
first_name: str
last_name: str

View File

@@ -1,17 +1,20 @@
from fastapi import Depends from fastapi import Depends
from fastapi.routing import APIRouter from fastapi.routing import APIRouter
from pydantic.types import UUID4 from pydantic.types import UUID4
from typing import List, Optional
from personal_info.db import models from personal_info.db import models
from personal_info.db.schemas import Person, PersonDetail 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='/people') router = APIRouter(prefix='/persons')
@router.get('/', response_model=List[Person]) @router.get('/', response_model=List[Person])
async def list_persons( async def list_persons(
persons_service: PersonService = Depends(get_persons_service), persons_service: PersonService = Depends(get_persons_service),
) -> List[models.Person]: ) -> List[models.Person]:
print('=======================================')
print(persons_service.list())
return persons_service.list() return persons_service.list()
@router.get('/{person_id}', response_model=PersonDetail) @router.get('/{person_id}', response_model=PersonDetail)

View File

@@ -11,9 +11,10 @@ class PersonService(BaseService[Person, PersonCreate, Any]):
def __init__(self, db_session: Session): def __init__(self, db_session: Session):
super(PersonService, self).__init__(Person, db_session) super(PersonService, self).__init__(Person, db_session)
def create(self, obj: PersonCreate) -> Person: # def create(self, obj: PersonCreate) -> Person:
person: Person = Person()
self.db_session.add(person) # person: Person = Person()
self.db_session.flush() # self.db_session.add(person)
self.db_session.commit() # self.db_session.flush()
return person # self.db_session.commit()
# return person