From 322f14c096d9d25c0b51cf07abcd10db1ceab1e0 Mon Sep 17 00:00:00 2001 From: dderbentsov Date: Thu, 13 Jul 2023 02:14:21 +0300 Subject: [PATCH] work --- migration/versions/16041bfd2411_initial.py | 33 ++++++++++++++++++++++ notes.txt | 13 ++++++++- src/personal_info/app.py | 2 +- src/personal_info/config.py | 20 ++++++++++++- src/personal_info/db/schemas/person.py | 12 ++++++-- src/personal_info/routers/persons.py | 7 +++-- src/personal_info/services/people.py | 13 +++++---- 7 files changed, 86 insertions(+), 14 deletions(-) create mode 100644 migration/versions/16041bfd2411_initial.py diff --git a/migration/versions/16041bfd2411_initial.py b/migration/versions/16041bfd2411_initial.py new file mode 100644 index 0000000..6d40ce2 --- /dev/null +++ b/migration/versions/16041bfd2411_initial.py @@ -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 ### diff --git a/notes.txt b/notes.txt index 379577a..ab9e350 100644 --- a/notes.txt +++ b/notes.txt @@ -1,5 +1,16 @@ 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 exec -it personal_info_db bash psql -U barbie -d barbie -CREATE DATABASE personal_info_db; \ No newline at end of file +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 diff --git a/src/personal_info/app.py b/src/personal_info/app.py index 29e5c5f..120b4cb 100644 --- a/src/personal_info/app.py +++ b/src/personal_info/app.py @@ -14,6 +14,6 @@ def create_app() -> FastAPI: from personal_info.routers import persons - app.include(persons.router) + app.include_router(persons.router) return app \ No newline at end of file diff --git a/src/personal_info/config.py b/src/personal_info/config.py index d23768e..d5ea820 100644 --- a/src/personal_info/config.py +++ b/src/personal_info/config.py @@ -1,6 +1,6 @@ from functools import lru_cache from typing import Optional - +from os import getenv from pydantic import BaseSettings, PostgresDsn class Settings(BaseSettings): @@ -11,5 +11,23 @@ def get_settings() -> Settings: settings = Settings() # type: ignore print('333333333333333333333333333333333333333333') 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 return settings \ No newline at end of file diff --git a/src/personal_info/db/schemas/person.py b/src/personal_info/db/schemas/person.py index b7cf3f2..a5b74d4 100644 --- a/src/personal_info/db/schemas/person.py +++ b/src/personal_info/db/schemas/person.py @@ -9,8 +9,14 @@ class Person(BaseModel): first_name: str last_name: str -class PersonCreate(Person): - pass + class Config: + orm_mode = True + +class PersonCreate(BaseModel): + first_name: str + last_name: str class PersonDetail(Person): - pass \ No newline at end of file + id: UUID4 + first_name: str + last_name: str \ No newline at end of file diff --git a/src/personal_info/routers/persons.py b/src/personal_info/routers/persons.py index 6d84cc5..6bccf09 100644 --- a/src/personal_info/routers/persons.py +++ b/src/personal_info/routers/persons.py @@ -1,17 +1,20 @@ from fastapi import Depends from fastapi.routing import APIRouter from pydantic.types import UUID4 +from typing import List, Optional 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 -router = APIrouter(prefix='/people') +router = APIRouter(prefix='/persons') @router.get('/', response_model=List[Person]) async def list_persons( persons_service: PersonService = Depends(get_persons_service), ) -> List[models.Person]: + print('=======================================') + print(persons_service.list()) return persons_service.list() @router.get('/{person_id}', response_model=PersonDetail) diff --git a/src/personal_info/services/people.py b/src/personal_info/services/people.py index bb5af81..b6ff7c3 100644 --- a/src/personal_info/services/people.py +++ b/src/personal_info/services/people.py @@ -11,9 +11,10 @@ class PersonService(BaseService[Person, PersonCreate, Any]): def __init__(self, db_session: Session): super(PersonService, self).__init__(Person, db_session) - def create(self, obj: PersonCreate) -> Person: - person: Person = Person() - self.db_session.add(person) - self.db_session.flush() - self.db_session.commit() - return person +# def create(self, obj: PersonCreate) -> Person: + + # person: Person = Person() + # self.db_session.add(person) + # self.db_session.flush() + # self.db_session.commit() + # return person