@@ -31,15 +31,45 @@ public function __construct(public int $processId)
3131 */
3232 public function handle (): void
3333 {
34+ $ startTime = microtime (true );
35+
36+ Log::info ('EvaluateProcessRetentionJob: Starting evaluation ' , [
37+ 'process_id ' => $ this ->processId ,
38+ ]);
39+
3440 // Only run if case retention policy is enabled
3541 $ enabled = config ('app.case_retention_policy_enabled ' , false );
3642 if (!$ enabled ) {
43+ Log::info ('EvaluateProcessRetentionJob: Case retention policy is disabled, skipping ' , [
44+ 'process_id ' => $ this ->processId ,
45+ ]);
46+
3747 return ;
3848 }
3949
4050 $ process = Process::find ($ this ->processId );
4151 if (!$ process ) {
42- Log::error ('CaseRetentionJob: Process not found ' , ['process_id ' => $ this ->processId ]);
52+ Log::error ('EvaluateProcessRetentionJob: Process not found ' , [
53+ 'process_id ' => $ this ->processId ,
54+ ]);
55+
56+ return ;
57+ }
58+
59+ // Skip template processes
60+ if ($ process ->is_template ) {
61+ Log::info ('EvaluateProcessRetentionJob: Skipping template process ' , [
62+ 'process_id ' => $ this ->processId ,
63+ ]);
64+
65+ return ;
66+ }
67+
68+ // Skip processes in system categories
69+ if ($ process ->categories ()->where ('is_system ' , true )->exists ()) {
70+ Log::info ('EvaluateProcessRetentionJob: Skipping process in system category ' , [
71+ 'process_id ' => $ this ->processId ,
72+ ]);
4373
4474 return ;
4575 }
@@ -54,15 +84,25 @@ public function handle(): void
5484 default => 12 , // Default to one_year
5585 };
5686
87+ Log::info ('EvaluateProcessRetentionJob: Retention configuration loaded ' , [
88+ 'process_id ' => $ this ->processId ,
89+ 'process_name ' => $ process ->name ,
90+ 'retention_period ' => $ retentionPeriod ,
91+ 'retention_months ' => $ retentionMonths ,
92+ ]);
93+
5794 // Default retention_updated_at to now if not set
5895 // This means the retention policy applies from now for processes without explicit retention settings
5996 $ retentionUpdatedAt = isset ($ process ->properties ['retention_updated_at ' ])
6097 ? Carbon::parse ($ process ->properties ['retention_updated_at ' ])
6198 : Carbon::now ();
6299
63100 // Check if there are any process requests for this process
64- // If not, nothing to delete
65101 if (!ProcessRequest::where ('process_id ' , $ this ->processId )->exists ()) {
102+ Log::info ('EvaluateProcessRetentionJob: No process requests found, nothing to evaluate ' , [
103+ 'process_id ' => $ this ->processId ,
104+ ]);
105+
66106 return ;
67107 }
68108
@@ -80,15 +120,25 @@ public function handle(): void
80120 // For cases created after retention_updated_at: cutoff is now - retention_period
81121 $ newCasesCutoff = $ now ->copy ()->subMonths ($ retentionMonths );
82122
123+ Log::info ('EvaluateProcessRetentionJob: Retention cutoff dates calculated ' , [
124+ 'process_id ' => $ this ->processId ,
125+ 'retention_updated_at ' => $ retentionUpdatedAt ->toIso8601String (),
126+ 'old_cases_cutoff ' => $ oldCasesCutoff ->toIso8601String (),
127+ 'new_cases_cutoff ' => $ newCasesCutoff ->toIso8601String (),
128+ 'current_time ' => $ now ->toIso8601String (),
129+ ]);
130+
83131 // Use subquery to get process request IDs
84132 $ processRequestSubquery = ProcessRequest::where ('process_id ' , $ this ->processId )->select ('id ' );
85133
86134 // Collect all ProcessRequest IDs that will be deleted (to delete them after all chunks are processed)
87135 $ processRequestIdsToDelete = [];
136+ $ totalDeleted = 0 ;
137+ $ chunkCount = 0 ;
88138
89139 CaseNumber::whereIn ('process_request_id ' , $ processRequestSubquery )
90140 ->where ($ this ->buildRetentionQuery ($ retentionUpdatedAt , $ oldCasesCutoff , $ newCasesCutoff ))
91- ->chunkById (100 , function ($ cases ) use (&$ processRequestIdsToDelete ) {
141+ ->chunkById (100 , function ($ cases ) use (&$ processRequestIdsToDelete, & $ totalDeleted , & $ chunkCount ) {
92142 $ caseIds = $ cases ->pluck ('id ' )->all ();
93143 $ processRequestIds = $ cases ->pluck ('process_request_id ' )->unique ()->all ();
94144
@@ -116,10 +166,15 @@ public function handle(): void
116166 $ this ->deleteTaskDraftMedia ($ draftIds );
117167 $ this ->deleteTaskDrafts ($ processRequestTokenIds );
118168
119- // TODO: Add logs to track the number of cases deleted
120- // Get deleted timestamp
121- // $deletedAt = Carbon::now();
122- // RetentionPolicyLog::record($process->id, $caseIds, $deletedAt);
169+ $ chunkCount ++;
170+ $ chunkSize = count ($ caseIds );
171+ $ totalDeleted += $ chunkSize ;
172+
173+ Log::info ('EvaluateProcessRetentionJob: Deleted chunk of cases ' , [
174+ 'process_id ' => $ this ->processId ,
175+ 'chunk_number ' => $ chunkCount ,
176+ 'cases_deleted ' => $ chunkSize ,
177+ ]);
123178 });
124179
125180 // Delete ProcessRequests after all chunks are processed
@@ -142,6 +197,16 @@ public function handle(): void
142197 $ this ->dispatchSavedSearchRecount ();
143198 }
144199 }
200+
201+ $ endTime = microtime (true );
202+ $ executionTime = round (($ endTime - $ startTime ) * 1000 , 2 );
203+
204+ Log::info ('EvaluateProcessRetentionJob: Evaluation completed ' , [
205+ 'process_id ' => $ this ->processId ,
206+ 'total_cases_deleted ' => $ totalDeleted ,
207+ 'total_chunks_processed ' => $ chunkCount ,
208+ 'execution_time_ms ' => $ executionTime ,
209+ ]);
145210 }
146211
147212 /**
0 commit comments