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 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
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue