1
0
mirror of https://github.com/ijaric/voice_assistant.git synced 2025-05-24 14:33:26 +00:00

Рабочий Postgres

This commit is contained in:
grucshetskyaleksei 2023-09-20 00:07:12 +03:00
parent cf1a29d520
commit b1b5b5ce68
7 changed files with 56 additions and 38 deletions

View File

@ -1,10 +1,10 @@
db_host=db
db_port=5432
db_user=user
db_password=Qwe123
db_name=notification_admin
DB_HOST=db
DB_PORT=5432
DB_USER=user
DB_PASSWORD=Qwe123
DB_NAME=api_db
server_host=0.0.0.0
server_port=8000
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
jwt_secret_key=v9LctjUWwol4XbvczPiLFMDtZ8aal7mm
JWT_SECRET_KEY=v9LctjUWwol4XbvczPiLFMDtZ8aal7mm

View File

@ -4,13 +4,13 @@ services:
db:
image: postgres:15.2
environment:
POSTGRES_USER: ${db_user}
POSTGRES_PASSWORD: ${db_password}
POSTGRES_DB: ${db_name}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
env_file:
- .env
ports:
- "${db_port}:{db_port}"
- "${DB_PORT}:${DB_PORT}"
volumes:
- postgres_data:/var/lib/postgresql/data/
restart: always
@ -25,7 +25,7 @@ services:
restart: always
entrypoint: ["/opt/app/entrypoint.sh"]
ports:
- "${server_port}:{server_port}"
- "${SERVER_PORT}:${SERVER_PORT}"
depends_on:
- db
env_file:

View File

@ -4,13 +4,13 @@ services:
db:
image: postgres:15.2
environment:
POSTGRES_USER: ${db_user}
POSTGRES_PASSWORD: ${db_password}
POSTGRES_DB: ${db_name}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
env_file:
- .env
ports:
- "127.0.0.1:${db_port}:{db_port}"
- "127.0.0.1:${DB_PORT}:${DB_PORT}"
volumes:
- postgres_data:/var/lib/postgresql/data/
restart: always
@ -20,7 +20,7 @@ services:
api:
build:
context: .
container_name: fastapi_app
container_name: api
image: fastapi_app
restart: always
entrypoint: ["/opt/app/entrypoint.sh"]

View File

@ -18,8 +18,12 @@ class BaseMixin:
@declared_attr
def created_at(cls):
return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now())
return sqlalchemy.Column(
sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()
)
@declared_attr
def updated_at(cls):
return sqlalchemy.Column(sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now())
return sqlalchemy.Column(
sqlalchemy.DateTime, server_default=sqlalchemy.sql.func.now()
)

View File

@ -1,10 +1,9 @@
import fastapi
from jose import JWTError, jwt
from pydantic import ValidationError
from lib.api import schemas as app_schemas
from lib.app import settings as app_settings
from pydantic import ValidationError
import fastapi
app = fastapi.FastAPI()
settings = app_settings.get_settings()
@ -13,7 +12,9 @@ security = fastapi.security.HTTPBearer()
def get_token_data(
authorization: fastapi.security.HTTPAuthorizationCredentials = fastapi.Security(security),
authorization: fastapi.security.HTTPAuthorizationCredentials = fastapi.Security(
security
),
) -> app_schemas.entity.Token:
token = authorization.credentials
try:

View File

@ -1,10 +1,7 @@
import functools
import pydantic_settings
from dotenv import load_dotenv
from pydantic import Field
load_dotenv(".env.dev")
from pydantic import Field, field_validator
class DbSettings(pydantic_settings.BaseSettings):
@ -25,11 +22,17 @@ class ApiSettings(pydantic_settings.BaseSettings):
class Settings(pydantic_settings.BaseSettings):
debug: str = "false"
db: DbSettings = Field(default_factory=DbSettings)
api: ApiSettings = Field(default_factory=ApiSettings)
jwt_secret_key: str
@field_validator("debug")
@classmethod
def validate_debug(cls, v: str) -> bool:
return v.lower() == "true"
@functools.lru_cache
def get_settings() -> Settings:

View File

@ -15,17 +15,27 @@ class Base(DeclarativeBase):
# Создаём движок
# Настройки подключения к БД передаём из переменных окружения, которые заранее загружены в файл настроек
database_dsn = (
class AsyncDB:
def __init__(self):
self.database_dsn = (
f"postgresql+asyncpg://{settings.db.user}:{settings.db.password}"
f"@{settings.db.host}:{settings.db.port}/{settings.db.name}"
)
self.engine = create_async_engine(
self.database_dsn, echo=settings.debug, future=True
)
self.async_session = async_sessionmaker(
self.engine, class_=AsyncSession, expire_on_commit=False
)
engine = create_async_engine(database_dsn, echo=True, future=True)
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
db = AsyncDB()
async def get_session() -> typing.AsyncGenerator[AsyncSession, typing.Any]:
async with async_session() as session:
async with db.async_session() as session:
try:
yield session
except Exception:
await session.rollback()
raise