Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ celerybeat.pid
*.sage.py

# Environments
services_backend/env.env
.env
.venv
env/
venv/
Expand All @@ -129,4 +129,4 @@ dmypy.json
# Pyre type checker
.pyre/

desktop.ini
desktop.ini
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
run:
source ./venv/bin/activate && uvicorn --reload --log-level debug services-backend.routes.base:app
source ./venv/bin/activate && uvicorn --reload --log-level debug services_backend.routes.base:app

db:
docker run -d -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust --name db-services-backend postgres:15

migrate: db
migrate:
alembic upgrade head
3 changes: 0 additions & 3 deletions alembic.ini
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,6 @@ version_path_separator = os # Use os.pathsep. Default configuration used for ne
# are written from script.py.mako
# output_encoding = utf-8

sqlalchemy.url = postgresql://postgres:123@localhost:5432/Profcom


[post_write_hooks]
# post_write_hooks defines scripts or Python functions that are run
# on newly generated revision scripts. See the documentation for further
Expand Down
1 change: 1 addition & 0 deletions requirements.dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Faker
13 changes: 5 additions & 8 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
fastapi~=0.86.0
fastapi
fastapi-sqlalchemy
psycopg2-binary
pydantic[dotenv]~=1.10.2
uvicorn~=0.19.0
alembic~=1.8.1
SQLAlchemy~=1.4.43
pydantic[dotenv]
uvicorn
alembic
SQLAlchemy
gunicorn

python-dotenv~=0.21.0
Faker~=15.3.1
46 changes: 12 additions & 34 deletions services_backend/routes/button.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from fastapi import HTTPException, APIRouter, Depends
from sqlalchemy.orm import Session
from sqlalchemy.engine import create_engine
from sqlalchemy.ext.declarative import declarative_base
from fastapi import HTTPException, APIRouter
from fastapi_sqlalchemy import db

from .models.button import ButtonCreate, ButtonUpdate, ButtonGet
from ..models.database import Button
Expand All @@ -11,56 +9,36 @@
responses={404: {"description": "You tried, but no"}}
)

Base = declarative_base()
engine = create_engine('postgresql+psycopg2://postgres:123@localhost:5432/Profcom')
Base.metadata.create_all(bind=engine)


# Да, без этого говна ничего не работает, я честно пытался
def get_db():
db = Session(bind=engine)
try:
yield db
finally:
db.close()


@button.post("/", response_model=ButtonCreate)
def create_button(button: ButtonCreate, db: Session = Depends(get_db)):
def create_button(button: ButtonCreate):
db_button = ButtonCreate(category_id=button.category_id, name=button.name,
icon=button.icon)
db.add(db_button)
db.commit()
db.refresh(db_button)
db.close()

db.session.add(db_button)
return db_button


@button.get("/", response_model=list[ButtonGet])
def get_buttons(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
return db.query(Button).offset(skip).limit(limit).all()
def get_buttons(skip: int = 0, limit: int = 100):
return db.session.query(Button).offset(skip).limit(limit).all()


@button.get("/{button_id}", response_model=ButtonGet)
def get_button(button_id: int, db: Session = Depends(get_db)):
return db.query(Button).filter(Button.id == button_id).first()
def get_button(button_id: int):
return db.session.query(Button).filter(Button.id == button_id).first()


@button.delete("/")
def remove_button(button_id: int, db: Session = Depends(get_db)):
def remove_button(button_id: int):
db_button = get_button(button_id=button_id, db=db)
if db_button is None:
raise HTTPException(status_code=404, detail="Button does not exist")
delete = db.query(Button).filter(Button.id == button_id).first()
db.delete(delete)
db.commit()
db.close()
db.session.query(Button).filter(Button.id == button_id).first()


@button.patch("/", response_model=ButtonUpdate)
def update_button(button: ButtonUpdate, db: Session = Depends(get_db)):
def update_button(button: ButtonUpdate):
db_old_button = get_button(button_id=button.id, db=db)
if db_old_button is None:
raise HTTPException(status_code=404, detail="Button does not exist")
return db.query(Button).update(button)
return db.session.query(Button).update(button)
53 changes: 16 additions & 37 deletions services_backend/routes/category.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from fastapi import HTTPException, APIRouter, Depends
from sqlalchemy.orm import Session
from sqlalchemy.engine import create_engine
from sqlalchemy.ext.declarative import declarative_base
from fastapi import HTTPException, APIRouter
from fastapi_sqlalchemy import db

from .models.category import CategoryCreate, CategoryUpdate, CategoryGet
from ..models.database import Category, Button
Expand All @@ -11,63 +9,44 @@
responses={404: {"description": "You tried, but no"}}
)

Base = declarative_base()
engine = create_engine('postgresql+psycopg2://postgres:123@localhost:5432/Profcom')
Base.metadata.create_all(bind=engine)


# Да, без этого говна ничего не работает, я честно пытался
def get_db():
db = Session(bind=engine)
try:
yield db
finally:
db.close()


@category.post("/", response_model=CategoryCreate)
def create_category(category: CategoryCreate, db: Session = Depends(get_db)):
def create_category(category: CategoryCreate):
db_category = CategoryCreate(category_id=category.category_id,
type=category.type, name=category.name)
db.add(db_category)
db.commit()
db.refresh(db_category)
db.close()

db.session.add(db_category)
return db_category


@category.get("/", response_model=list[CategoryGet])
def get_categories(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
return db.query(Category).offset(skip).limit(limit).all()
def get_categories(skip: int = 0, limit: int = 100):
return db.session.query(Category).offset(skip).limit(limit).all()


@category.get("/{category_id}", response_model=CategoryGet)
def get_category(category_id: int, db: Session = Depends(get_db)):
db_category = db.query(Category).filter(Category.id == category_id).first()
def get_category(category_id: int):
db_category = db.session.query(Category).filter(Category.id == category_id).first()
if db_category is None:
raise HTTPException(status_code=404, detail="Category does not exist")
return db_category


@category.delete("/")
def remove_category(category_id: int, db: Session = Depends(get_db)):
def remove_category(category_id: int):
db_category = get_category(db=db, category_id=category_id)
if db_category is None:
raise HTTPException(status_code=404, detail="Category does not exist")
delete = db.query(Category).filter(Category.id == category_id).first()
d = db.query(Button).filter(Button.category_id == category_id).all()
delete = db.session.query(Category).filter(Category.id == category_id).first()
d = db.session.query(Button).filter(Button.category_id == category_id).all()
for button in d:
db.delete(button)
db.commit()
db.delete(delete)
db.commit()
db.close()
db.session.delete(button)
db.session.flush()
db.session.delete(delete)


@category.patch("/", response_model=CategoryUpdate)
def update_category(category: CategoryUpdate, db: Session = Depends(get_db)):
def update_category(category: CategoryUpdate):
db_old_category = get_category(db=db, category_id=category.id)
if db_old_category is None:
raise HTTPException(status_code=404, detail="Category does not exist")
return db.query(Category).update(category)
return db.session.query(Category).update(category)
6 changes: 2 additions & 4 deletions services_backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@

class Settings(BaseSettings):
"""Application settings"""
path = os.path.join(os.path.dirname(__file__), 'env.env')
load_dotenv(path)
DB_DSN: PostgresDsn = os.getenv('DATABASE_URL')
DB_DSN: PostgresDsn = 'postgresql://postgres@localhost:5432/postgres'

CORS_ALLOW_ORIGINS: list[str] = ['*']
CORS_ALLOW_CREDENTIALS: bool = True
Expand All @@ -21,7 +19,7 @@ class Config:
"""Pydantic BaseSettings config"""

case_sensitive = True
env_file = "env.env"
env_file = ".env"


@lru_cache
Expand Down