From 5b8fab76779c584211b9789af18b48cc3720651b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sat, 26 Apr 2025 21:57:17 +0700 Subject: [PATCH] feat(audit-logs): implement AuditLogsController - Menambahkan AuditLogsController untuk mengelola log audit. - Menyediakan metode index untuk menampilkan tampilan audit. - Menyediakan metode datatable untuk mengambil dan memfilter data log. - Mendukung pencarian, pengurutan, dan paginasi pada data log. - Memetakan causer_id ke nama pembuat untuk informasi yang lebih jelas. --- app/Http/Controllers/AuditLogsController.php | 101 +++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 app/Http/Controllers/AuditLogsController.php diff --git a/app/Http/Controllers/AuditLogsController.php b/app/Http/Controllers/AuditLogsController.php new file mode 100644 index 0000000..0c179ac --- /dev/null +++ b/app/Http/Controllers/AuditLogsController.php @@ -0,0 +1,101 @@ +has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('log_name', 'LIKE', "%$search%") + ->orWhere('description', 'LIKE', "%$search%") + ->orWhere('subject_id', 'LIKE', "%$search%") + ->orWhere('causer_id', 'LIKE', "%$search%") + ->orWhere('properties', 'LIKE', "%$search%"); + }); + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } else { + // Default sorting by created_at descending + $query->orderBy('created_at', 'desc'); + } + + // Get the total count of records before pagination + $totalRecords = Activity::count(); + + // Get the filtered count before pagination + $filteredRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the data for the current page + $data = $query->get(); + + // Map causer_id to creator name + $data = $data->map(function ($item) { + // Create a new property for the creator's name + if ($item->causer_id && $item->causer_type === 'Modules\\Usermanagement\\Models\\User') { + // Try to find the user + $user = User::find($item->causer_id); + if ($user) { + $item->creator_name = $user->name; + } else { + $item->creator_name = 'Unknown User'; + } + } else { + $item->creator_name = 'System'; + } + + return $item; + }); + + // Calculate the page count + $pageCount = ceil($filteredRecords / ($request->get('size') ?: 1)); + + // Calculate the current page number + $currentPage = $request->get('page') ?: 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $filteredRecords, + 'data' => $data, + ]); + + } + }