mirror of
https://github.com/ijaric/voice_assistant.git
synced 2025-05-24 14:33:26 +00:00
Рабочий Postgres
This commit is contained in:
parent
cf1a29d520
commit
b1b5b5ce68
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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()
|
||||
)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -15,17 +15,27 @@ class Base(DeclarativeBase):
|
|||
|
||||
# Создаём движок
|
||||
# Настройки подключения к БД передаём из переменных окружения, которые заранее загружены в файл настроек
|
||||
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
|
||||
)
|
||||
|
||||
database_dsn = (
|
||||
f"postgresql+asyncpg://{settings.db.user}:{settings.db.password}"
|
||||
f"@{settings.db.host}:{settings.db.port}/{settings.db.name}"
|
||||
)
|
||||
|
||||
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:
|
||||
yield session
|
||||
async with db.async_session() as session:
|
||||
try:
|
||||
yield session
|
||||
except Exception:
|
||||
await session.rollback()
|
||||
raise
|
||||
|
|
Loading…
Reference in New Issue
Block a user