diff --git a/app/database.py b/app/database.py index 983f048..12ab00b 100644 --- a/app/database.py +++ b/app/database.py @@ -1,4 +1,3 @@ -from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlmodel import Session, SQLModel, create_engine, select from app.config import settings @@ -82,16 +81,19 @@ def update_database_where( query: type[SQLModel], variable: object, value: int | str | None, - attribute: InstrumentedAttribute[SQLModel], + attribute: str, new_value: int | str | None, ): with Session(engine) as session: results = list(session.exec(select(query).where(variable == value))) for instance in results: - setattr(instance, attribute.key, new_value) + setattr(instance, attribute, new_value) session.add(instance) - session.commit() + + session.commit() + + for instance in results: session.refresh(instance) return results diff --git a/app/logic/project_logic.py b/app/logic/project_logic.py index 43947ad..f03b1bf 100644 --- a/app/logic/project_logic.py +++ b/app/logic/project_logic.py @@ -4,6 +4,7 @@ from app.database import ( get_from_database, get_from_database_where, get_from_database_where_id, + update_database_where, ) from app.models.project import Project @@ -17,7 +18,11 @@ def get_by_id(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): @@ -25,5 +30,23 @@ def create(project: 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): - return delete_from_database_where(Project, Project.id, project_id) + return delete_from_database_where( + Project, + Project.id, + project_id, + ) diff --git a/app/routers/project_route.py b/app/routers/project_route.py index 78fbcaa..6cb54b5 100644 --- a/app/routers/project_route.py +++ b/app/routers/project_route.py @@ -1,6 +1,13 @@ 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 router = APIRouter(prefix="/projects", tags=["projects"]) @@ -33,6 +40,19 @@ def create_project(project: 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}") def delete_project(project_id: int): return delete(project_id)