authorize('update', Asset::class); if ($request->input('note', '') == '') { return response()->json(Helper::formatStandardApiResponse('error', null, trans('validation.required', ['attribute' => 'note'])), 422); } try { $asset = Asset::findOrFail($asset_id); } catch (ModelNotFoundException $e) { return response()->json(Helper::formatStandardApiResponse('error', null, 'Asset not found'), 404); } catch (\Exception $e) { Log::debug('Error fetching asset: ' . $e->getMessage()); // Return generic server error response since something unexpected happened return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/settings/message.webhook.500')), 500); } $this->authorize('update', $asset); // Create the note $logaction = new ActionLog(); $logaction->item_type = get_class($asset); $logaction->created_by = Auth::id(); $logaction->item_id = $asset->id; $logaction->note = $request->input('note', ''); if($logaction->logaction('note added')) { // Return a success response return response()->json(Helper::formatStandardApiResponse('success', ['note' => $logaction->note, 'item_id' => $asset->id], trans('general.note_added'))); } // Return an error response if something went wrong return response()->json(Helper::formatStandardApiResponse('error', null, 'Something went wrong'), 500); } /** * Retrieve a list of manual notes (action logs) for a given asset. * * Checks authorization to view assets, attempts to find the asset by ID, * and fetches related action log entries of type 'note added', including * user information for each note. Returns a JSON response with the notes or errors. * * @param \Illuminate\Http\Request $request The incoming HTTP request. * @param int|string $asset_id The ID of the asset whose notes to retrieve. * @return \Illuminate\Http\JsonResponse */ public function getList(Request $request, $asset_id): JsonResponse { $this->authorize('view', Asset::class); try { $asset = Asset::findOrFail($asset_id); } catch (ModelNotFoundException $e) { return response()->json(Helper::formatStandardApiResponse('error', null, $e->getMessage()), 404); } catch (\Exception $e) { // Return generic server error response since something unexpected happened return response()->json(Helper::formatStandardApiResponse('error', null, $e->getMessage()), 500); } $this->authorize('view', $asset); // Get the manual notes for the asset $notes = ActionLog::with('user:id,username') ->where('item_type', Asset::class) ->where('item_id', $asset->id) ->where('action_type', 'note added') ->orderBy('created_at', 'desc') ->get(['id', 'created_at', 'note', 'created_by', 'item_id', 'item_type', 'action_type', 'target_id', 'target_type']); $notesArray = $notes->map(function ($note) { return [ 'id' => $note->id, 'created_at' => $note->created_at, 'note' => $note->note, 'created_by' => $note->created_by, 'username' => $note->user?->username, // adding the username 'item_id' => $note->item_id, 'item_type' => $note->item_type, 'action_type' => $note->action_type, ]; }); // Return a success response return response()->json(Helper::formatStandardApiResponse('success', ['notes' => $notesArray, 'asset_id' => $asset->id])); } }