From 4ec4d79d6f0eb6c49d33f566dcc6cf47f1c29535 Mon Sep 17 00:00:00 2001 From: Rajesh Kantipudi <44539669+iamrajeshk@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:45:56 +0530 Subject: [PATCH 1/4] Add TaskFeedbackResponse model and integrate feedback retrieval in TaskingTaskRepository --- api/src/tasking/tasks/dtos.py | 7 +++++++ api/src/tasking/tasks/repository.py | 27 ++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/api/src/tasking/tasks/dtos.py b/api/src/tasking/tasks/dtos.py index 79a8bdb..36e9080 100644 --- a/api/src/tasking/tasks/dtos.py +++ b/api/src/tasking/tasks/dtos.py @@ -49,6 +49,12 @@ class LastMapper(WireModel): user_id: UUID user_name: Optional[str] = None +class TaskFeedbackResponse(WireModel): + reason_category: Optional[FeedbackReason] = None + notes: str + created_at: datetime + created_by_user_id: UUID + created_by_user_name: Optional[str] = None class TaskResponse(WireModel): id: int @@ -58,6 +64,7 @@ class TaskResponse(WireModel): area_sqkm: float lock: Optional[TaskLockSummary] = None last_mapper: Optional[LastMapper] = None + feedback: Optional[list[TaskFeedbackResponse]] = None created_at: datetime updated_at: datetime diff --git a/api/src/tasking/tasks/repository.py b/api/src/tasking/tasks/repository.py index 40e8232..6246bf7 100644 --- a/api/src/tasking/tasks/repository.py +++ b/api/src/tasking/tasks/repository.py @@ -4,7 +4,7 @@ import json import math from datetime import datetime, timedelta -from typing import Any, Optional +from typing import Any, List, Optional from uuid import UUID from fastapi import HTTPException, status @@ -36,6 +36,7 @@ TaskBoundariesFeatureCollection, TaskBoundaryFeature, TaskBoundaryPolygon, + TaskFeedbackResponse, TaskListResponse, TaskLockSummary, TaskResponse, @@ -356,6 +357,29 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: last_mapper = LastMapper( user_id=UUID(task.last_mapper_id), user_name=display ) + + feedback: Optional[List[TaskFeedbackResponse]] = None + if task.id is not None: + feedback_list = await self.session.execute( + select(TaskingFeedback).where( + TaskingFeedback.task_id == task.id, + TaskingFeedback.project_id == task.project_id, + ) + ) + feedback = [] + for item in feedback_list.scalars().all(): + feedback_obj = item + if feedback_obj: + display = await self._lookup_user_display(feedback_obj.author_user_auth_uid) + feedback.append( + TaskFeedbackResponse( + reason_category=feedback_obj.reason_category, + notes=feedback_obj.notes, + created_at=feedback_obj.created_at, + created_by_user_id=UUID(feedback_obj.author_user_auth_uid), + created_by_user_name=display, + ) + ) return TaskResponse( id=task.id, # type: ignore[arg-type] @@ -367,6 +391,7 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: last_mapper=last_mapper, created_at=task.created_at, updated_at=task.updated_at, + feedback=feedback, ) # ---- grid generation ------------------------------------------------- From c9f0704d44dd42e86f91abcb388eee9676f7cc37 Mon Sep 17 00:00:00 2001 From: Rajesh Kantipudi <44539669+iamrajeshk@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:03:21 +0530 Subject: [PATCH 2/4] Fixed formatting issues --- api/src/tasking/tasks/dtos.py | 2 ++ api/src/tasking/tasks/repository.py | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/api/src/tasking/tasks/dtos.py b/api/src/tasking/tasks/dtos.py index 36e9080..d97674e 100644 --- a/api/src/tasking/tasks/dtos.py +++ b/api/src/tasking/tasks/dtos.py @@ -49,6 +49,7 @@ class LastMapper(WireModel): user_id: UUID user_name: Optional[str] = None + class TaskFeedbackResponse(WireModel): reason_category: Optional[FeedbackReason] = None notes: str @@ -56,6 +57,7 @@ class TaskFeedbackResponse(WireModel): created_by_user_id: UUID created_by_user_name: Optional[str] = None + class TaskResponse(WireModel): id: int task_number: int diff --git a/api/src/tasking/tasks/repository.py b/api/src/tasking/tasks/repository.py index 6246bf7..7b30d30 100644 --- a/api/src/tasking/tasks/repository.py +++ b/api/src/tasking/tasks/repository.py @@ -357,7 +357,7 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: last_mapper = LastMapper( user_id=UUID(task.last_mapper_id), user_name=display ) - + feedback: Optional[List[TaskFeedbackResponse]] = None if task.id is not None: feedback_list = await self.session.execute( @@ -370,7 +370,9 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: for item in feedback_list.scalars().all(): feedback_obj = item if feedback_obj: - display = await self._lookup_user_display(feedback_obj.author_user_auth_uid) + display = await self._lookup_user_display( + feedback_obj.author_user_auth_uid + ) feedback.append( TaskFeedbackResponse( reason_category=feedback_obj.reason_category, From 8e44517f3ec1c516868899d45910b02980be2a47 Mon Sep 17 00:00:00 2001 From: Rajesh Kantipudi <44539669+iamrajeshk@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:16:28 +0530 Subject: [PATCH 3/4] fixed pyright issue --- api/src/tasking/tasks/repository.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/api/src/tasking/tasks/repository.py b/api/src/tasking/tasks/repository.py index 7b30d30..1cfa544 100644 --- a/api/src/tasking/tasks/repository.py +++ b/api/src/tasking/tasks/repository.py @@ -360,10 +360,12 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: feedback: Optional[List[TaskFeedbackResponse]] = None if task.id is not None: - feedback_list = await self.session.execute( + feedback_list = await self.session.exec( select(TaskingFeedback).where( - TaskingFeedback.task_id == task.id, - TaskingFeedback.project_id == task.project_id, + TaskingFeedback.task_id + == task.id, # pyright: ignore[reportArgumentType] + TaskingFeedback.project_id + == task.project_id, # pyright: ignore[reportArgumentType] ) ) feedback = [] From 88bf4e8fa8747e40e9ef3122249803101e45f2b8 Mon Sep 17 00:00:00 2001 From: Rajesh Kantipudi <44539669+iamrajeshk@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:26:24 +0530 Subject: [PATCH 4/4] fixed ci cd issue --- api/src/tasking/tasks/repository.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/tasking/tasks/repository.py b/api/src/tasking/tasks/repository.py index 1cfa544..4b89bd2 100644 --- a/api/src/tasking/tasks/repository.py +++ b/api/src/tasking/tasks/repository.py @@ -360,7 +360,7 @@ async def _to_task_response(self, task: TaskingTask) -> TaskResponse: feedback: Optional[List[TaskFeedbackResponse]] = None if task.id is not None: - feedback_list = await self.session.exec( + feedback_list = await self.session.execute( select(TaskingFeedback).where( TaskingFeedback.task_id == task.id, # pyright: ignore[reportArgumentType]