From 9cd556f204aae8b462e828a25088bbb3a4b2809f Mon Sep 17 00:00:00 2001 From: Pradip-p Date: Thu, 15 Aug 2024 14:20:09 +0545 Subject: [PATCH 1/2] feat: update name, task_area, user_id & user_id in project details endpoint --- src/backend/app/projects/project_crud.py | 33 ++++++++++++++++++++- src/backend/app/projects/project_schemas.py | 19 ++++-------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 52e52b9d..db25b618 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -149,7 +149,38 @@ async def get_project_info_by_id(db: Database, project_id: uuid.UUID): project_record = await db.fetch_one(query, {"project_id": project_id}) if not project_record: return None - query = """ SELECT id, project_task_index, outline FROM tasks WHERE project_id = :project_id;""" + # query = """ SELECT id, project_task_index, outline FROM tasks WHERE project_id = :project_id;""" + query = """ + SELECT + t.id, + t.project_task_index, + t.outline, + ST_Area(ST_Transform(t.outline, 4326)) / 1000000 AS task_area, + te.user_id, + te.state, + u.name, + CASE + WHEN te.state = 'REQUEST_FOR_MAPPING' THEN 'request logs' + WHEN te.state = 'LOCKED_FOR_MAPPING' THEN 'ongoing' + WHEN te.state = 'UNLOCKED_DONE' THEN 'completed' + WHEN te.state = 'UNFLYABLE_TASK' THEN 'unflyable task' + ELSE '' -- Default case if the state does not match any expected values + END AS state + + FROM + tasks t + LEFT JOIN + task_events te + ON + t.id = te.task_id + LEFT JOIN + users u + ON + te.user_id = u.id + + WHERE + t.project_id = :project_id;""" + task_records = await db.fetch_all(query, {"project_id": project_id}) project_record.tasks = task_records if task_records is not None else [] project_record.task_count = len(task_records) diff --git a/src/backend/app/projects/project_schemas.py b/src/backend/app/projects/project_schemas.py index b478ce1d..c89d2ebd 100644 --- a/src/backend/app/projects/project_schemas.py +++ b/src/backend/app/projects/project_schemas.py @@ -1,9 +1,9 @@ import uuid import json -from pydantic import BaseModel, computed_field, Field, validator, model_validator +from pydantic import BaseModel, computed_field, Field, model_validator from typing import Any, Optional, Union, List from geojson_pydantic import Feature, FeatureCollection, Polygon -from app.models.enums import FinalOutput, ProjectVisibility, State +from app.models.enums import FinalOutput, ProjectVisibility from shapely import wkb from datetime import date from app.utils import ( @@ -96,17 +96,10 @@ class TaskOut(BaseModel): id: uuid.UUID project_task_index: int outline: Any = Field(exclude=True) - state: Optional[State] = None - contributor: Optional[str] = None - - @validator("state", pre=True, always=True) - def validate_state(cls, v): - if isinstance(v, str): - try: - v = State[v] - except KeyError: - raise ValueError(f"Invalid state: {v}") - return v + state: Optional[str] = None + user_id: Optional[str] = None + task_area: Optional[float] = None + name: Optional[str] = None @computed_field @property From 48ce24e87cf9fb14bbba41256bf0ee42b0679e66 Mon Sep 17 00:00:00 2001 From: Pradip-p Date: Thu, 15 Aug 2024 14:24:21 +0545 Subject: [PATCH 2/2] fix: remove old raw sql query --- src/backend/app/projects/project_crud.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index db25b618..08a5696f 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -149,7 +149,6 @@ async def get_project_info_by_id(db: Database, project_id: uuid.UUID): project_record = await db.fetch_one(query, {"project_id": project_id}) if not project_record: return None - # query = """ SELECT id, project_task_index, outline FROM tasks WHERE project_id = :project_id;""" query = """ SELECT t.id,