Init
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import BaseModel, Field, ConfigDict
|
||||
|
||||
|
||||
class FilterParams(BaseModel):
|
||||
limit : int = Field(100, gt=0, le=100)
|
||||
offset : int = Field(0, ge=0)
|
||||
order_by : str = "created_at"
|
||||
search : str | None = None
|
||||
tags : list[str] = []
|
||||
|
||||
class ListResponseBase(BaseModel):
|
||||
total : int
|
||||
offset : int
|
||||
limit : int
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(env_file=".env")
|
||||
DATABASE_URL : str
|
||||
TEST_DATABASE_URL : str
|
||||
FIRST_SUPERUSER : str
|
||||
FIRST_SUPERUSER_PASSWORD : str
|
||||
FIRST_SUPERUSER_EMAIL : str
|
||||
|
||||
|
||||
settings = Settings()
|
||||
@@ -0,0 +1,49 @@
|
||||
from sqlalchemy import create_engine, event
|
||||
from sqlalchemy.orm import sessionmaker, with_loader_criteria
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from typing import Annotated
|
||||
from fastapi import Depends
|
||||
from sqlalchemy.orm import Session
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
load_dotenv()
|
||||
|
||||
engine = create_engine(os.getenv("DATABASE_URL", ""))
|
||||
SessionLocal = sessionmaker(autoflush=False, bind=engine)
|
||||
|
||||
def safe_commit(db : Session):
|
||||
try:
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
raise
|
||||
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@event.listens_for(SessionLocal, "do_orm_execute")
|
||||
def _add_filtering_criterial(execute_state):
|
||||
skip_filter = execute_state.execution_options.get("skip_filter", False)
|
||||
|
||||
if execute_state.is_select and not skip_filter:
|
||||
|
||||
from ..models.models import AuditMixin
|
||||
|
||||
execute_state.statement = execute_state.statement.options(
|
||||
with_loader_criteria(
|
||||
AuditMixin,
|
||||
lambda cls: cls.is_archived.is_(False),
|
||||
include_aliases = True,
|
||||
)
|
||||
)
|
||||
|
||||
db_dependency = Annotated[Session, Depends(get_db)]
|
||||
Reference in New Issue
Block a user