@@ -144,6 +144,7 @@ def get_watchlisted_tasks(cls, page, limit, user_id) -> Tuple[int, List[Watchlis
144
144
"watchlistId" : {"$toString" : "$_id" },
145
145
"taskId" : {"$toString" : "$task._id" },
146
146
"deferredDetails" : "$task.deferredDetails" ,
147
+ "createdBy" : {"$arrayElemAt" : ["$created_by_user.name" , 0 ]},
147
148
"assignee" : {
148
149
"$cond" : {
149
150
"if" : {"$gt" : [{"$size" : "$assignee_user" }, 0 ]},
@@ -198,6 +199,10 @@ def get_watchlisted_tasks(cls, page, limit, user_id) -> Tuple[int, List[Watchlis
198
199
if not task .get ("assignee" ):
199
200
task ["assignee" ] = cls ._get_assignee_for_task (task .get ("taskId" ))
200
201
202
+ # If createdBy is null or still an ID, try to fetch user name separately
203
+ if not task .get ("createdBy" ) or ObjectId .is_valid (task .get ("createdBy" , "" )):
204
+ task ["createdBy" ] = cls ._get_user_name_for_id (task .get ("createdBy" ))
205
+
201
206
tasks = [WatchlistDTO (** doc ) for doc in tasks ]
202
207
203
208
return count , tasks
@@ -240,6 +245,27 @@ def _get_assignee_for_task(cls, task_id: str):
240
245
241
246
return None
242
247
248
+ @classmethod
249
+ def _get_user_name_for_id (cls , user_id : str ):
250
+ """
251
+ Fallback method to get user name for createdBy field.
252
+ """
253
+ if not user_id :
254
+ return None
255
+
256
+ try :
257
+ from todo .repositories .user_repository import UserRepository
258
+
259
+ # Get user details
260
+ user = UserRepository .get_by_id (user_id )
261
+ if user :
262
+ return user .name
263
+ except Exception :
264
+ # If any error occurs, return None
265
+ pass
266
+
267
+ return None
268
+
243
269
@classmethod
244
270
def update (cls , taskId : ObjectId , isActive : bool , userId : ObjectId ) -> dict :
245
271
"""
0 commit comments