documents($request->user())->where('id', $id)->lockForUpdate()->first(); abort_unless($document && $document->status !== 'deleted' && $document->deleted_at === null, 404); abort_unless(in_array($document->malware_scan_status, ['pending', 'inconclusive', 'failed'], true), 422, 'Só é possível repetir uma análise pendente, inconclusiva ou falhada. Para substituir um ficheiro, carregue uma nova versão.'); DB::table('documents')->where('id', $id)->update([ 'status' => 'quarantined', 'malware_scan_status' => 'pending', 'malware_failure_reason' => null, 'updated_at' => now(), ]); ScanDocumentForMalware::dispatch($id)->afterCommit(); }); return back()->with('success', 'Nova análise colocada na fila. O ficheiro permanece privado até haver resultado.'); } }