Added update project route and logic
This commit is contained in:
parent
f5b274a678
commit
4fc1f58f30
3 changed files with 52 additions and 7 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
from sqlalchemy.orm.attributes import InstrumentedAttribute
|
|
||||||
from sqlmodel import Session, SQLModel, create_engine, select
|
from sqlmodel import Session, SQLModel, create_engine, select
|
||||||
|
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
|
|
@ -82,16 +81,19 @@ def update_database_where(
|
||||||
query: type[SQLModel],
|
query: type[SQLModel],
|
||||||
variable: object,
|
variable: object,
|
||||||
value: int | str | None,
|
value: int | str | None,
|
||||||
attribute: InstrumentedAttribute[SQLModel],
|
attribute: str,
|
||||||
new_value: int | str | None,
|
new_value: int | str | None,
|
||||||
):
|
):
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
results = list(session.exec(select(query).where(variable == value)))
|
results = list(session.exec(select(query).where(variable == value)))
|
||||||
|
|
||||||
for instance in results:
|
for instance in results:
|
||||||
setattr(instance, attribute.key, new_value)
|
setattr(instance, attribute, new_value)
|
||||||
session.add(instance)
|
session.add(instance)
|
||||||
session.commit()
|
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
for instance in results:
|
||||||
session.refresh(instance)
|
session.refresh(instance)
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ from app.database import (
|
||||||
get_from_database,
|
get_from_database,
|
||||||
get_from_database_where,
|
get_from_database_where,
|
||||||
get_from_database_where_id,
|
get_from_database_where_id,
|
||||||
|
update_database_where,
|
||||||
)
|
)
|
||||||
from app.models.project import Project
|
from app.models.project import Project
|
||||||
|
|
||||||
|
|
@ -17,7 +18,11 @@ def get_by_id(project_id: int):
|
||||||
|
|
||||||
|
|
||||||
def get_with_parent(project_id: int):
|
def get_with_parent(project_id: int):
|
||||||
return get_from_database_where(Project, Project.parent_id, project_id)
|
return get_from_database_where(
|
||||||
|
Project,
|
||||||
|
Project.parent_id,
|
||||||
|
project_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def create(project: Project):
|
def create(project: Project):
|
||||||
|
|
@ -25,5 +30,23 @@ def create(project: Project):
|
||||||
return project
|
return project
|
||||||
|
|
||||||
|
|
||||||
|
def update(
|
||||||
|
project_id: int,
|
||||||
|
update_attribute: str,
|
||||||
|
new_value: int | str | None,
|
||||||
|
):
|
||||||
|
return update_database_where(
|
||||||
|
Project,
|
||||||
|
Project.id,
|
||||||
|
project_id,
|
||||||
|
update_attribute,
|
||||||
|
new_value,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def delete(project_id: int):
|
def delete(project_id: int):
|
||||||
return delete_from_database_where(Project, Project.id, project_id)
|
return delete_from_database_where(
|
||||||
|
Project,
|
||||||
|
Project.id,
|
||||||
|
project_id,
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from app.logic.project_logic import create, delete, get_all, get_by_id, get_with_parent
|
from app.logic.project_logic import (
|
||||||
|
create,
|
||||||
|
delete,
|
||||||
|
get_all,
|
||||||
|
get_by_id,
|
||||||
|
get_with_parent,
|
||||||
|
update,
|
||||||
|
)
|
||||||
from app.models.project import Project
|
from app.models.project import Project
|
||||||
|
|
||||||
router = APIRouter(prefix="/projects", tags=["projects"])
|
router = APIRouter(prefix="/projects", tags=["projects"])
|
||||||
|
|
@ -33,6 +40,19 @@ def create_project(project: Project):
|
||||||
return create(project)
|
return create(project)
|
||||||
|
|
||||||
|
|
||||||
|
@router.put("/{project_id}")
|
||||||
|
def update_project(
|
||||||
|
project_id: int,
|
||||||
|
update_attribute: str,
|
||||||
|
new_value: str | int | None,
|
||||||
|
):
|
||||||
|
return update(
|
||||||
|
project_id,
|
||||||
|
update_attribute,
|
||||||
|
new_value,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{project_id}")
|
@router.delete("/{project_id}")
|
||||||
def delete_project(project_id: int):
|
def delete_project(project_id: int):
|
||||||
return delete(project_id)
|
return delete(project_id)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue