Added update project route and logic

This commit is contained in:
Hannah dagemark 2026-08-06 23:43:22 +02:00
commit 4fc1f58f30
3 changed files with 52 additions and 7 deletions

View file

@ -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()
for instance in results:
session.refresh(instance)
return results

View file

@ -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,
)

View file

@ -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)