From 614809a7c64c00fd1d9fb8cd6c06dba3710873fa Mon Sep 17 00:00:00 2001
From: Tajim
Date: Fri, 28 Aug 2026 21:09:00 +0600
Subject: [PATCH 1/3] fix(chat): avoid truncate foreign key constraint error
when clearing messages
---
app/Http/Controllers/Admin/ChatSettingsController.php | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/Http/Controllers/Admin/ChatSettingsController.php b/app/Http/Controllers/Admin/ChatSettingsController.php
index e13663c..5ea6bdd 100644
--- a/app/Http/Controllers/Admin/ChatSettingsController.php
+++ b/app/Http/Controllers/Admin/ChatSettingsController.php
@@ -6,9 +6,11 @@
use App\Http\Controllers\Controller;
use App\Models\AppSetting;
use App\Models\ChatMessage;
+use App\Models\ChatMessageReaction;
use App\Models\ChatReport;
use App\Models\User;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
use Inertia\Inertia;
class ChatSettingsController extends Controller
@@ -127,7 +129,10 @@ public function update(Request $request)
public function clearMessages()
{
- ChatMessage::truncate();
+ DB::transaction(function () {
+ ChatMessageReaction::query()->delete();
+ ChatMessage::query()->delete();
+ });
return back()->with('success', 'All chat messages have been cleared.');
}
From db828f6921b2c5955cc8d835764f2e7f3343caec Mon Sep 17 00:00:00 2001
From: Tajim
Date: Fri, 28 Aug 2026 21:10:33 +0600
Subject: [PATCH 2/3] feat(chat): add bulk delete option for reported messages
---
.../Admin/ChatSettingsController.php | 15 +++++++
resources/js/pages/admin/chat/Reports.vue | 41 +++++++++++++++++++
routes/admin.php | 1 +
3 files changed, 57 insertions(+)
diff --git a/app/Http/Controllers/Admin/ChatSettingsController.php b/app/Http/Controllers/Admin/ChatSettingsController.php
index 5ea6bdd..6124274 100644
--- a/app/Http/Controllers/Admin/ChatSettingsController.php
+++ b/app/Http/Controllers/Admin/ChatSettingsController.php
@@ -155,6 +155,21 @@ public function deleteReport(ChatReport $report)
return back()->with('success', 'Report deleted successfully.');
}
+ public function clearReports(Request $request)
+ {
+ $status = $request->input('status');
+
+ if ($status && in_array($status, ['pending', 'reviewed', 'dismissed'], true)) {
+ ChatReport::where('status', $status)->delete();
+ $message = "All {$status} reports have been deleted.";
+ } else {
+ ChatReport::query()->delete();
+ $message = 'All report records have been deleted.';
+ }
+
+ return back()->with('success', $message);
+ }
+
public function updateUserBan(Request $request, User $user)
{
if ($user->can('view admin')) {
diff --git a/resources/js/pages/admin/chat/Reports.vue b/resources/js/pages/admin/chat/Reports.vue
index 456773b..9548f87 100644
--- a/resources/js/pages/admin/chat/Reports.vue
+++ b/resources/js/pages/admin/chat/Reports.vue
@@ -81,6 +81,20 @@ const deleteReport = (reportId: number) => {
}
};
+const handleClearReports = (statusFilter?: string) => {
+ const isFiltered = statusFilter && statusFilter !== 'all';
+ const confirmMessage = isFiltered
+ ? `Are you sure you want to permanently delete all ${statusFilter} report records? This action cannot be undone.`
+ : 'Are you sure you want to permanently delete ALL report records? This action cannot be undone.';
+
+ if (confirm(confirmMessage)) {
+ router.delete('/admin/chat/reports/clear', {
+ data: isFiltered ? { status: statusFilter } : {},
+ preserveScroll: true,
+ });
+ }
+};
+
const isBanModalOpen = ref(false);
const selectedUser = ref(null);
@@ -150,6 +164,33 @@ const formatDate = (isoString?: string | null) => {
+
+
+
+
+
diff --git a/routes/admin.php b/routes/admin.php
index 7cb3c49..81d68a7 100644
--- a/routes/admin.php
+++ b/routes/admin.php
@@ -119,6 +119,7 @@
Route::post('/chat/settings', [ChatSettingsController::class, 'update'])->name('chat.settings.update');
Route::post('/chat/clear', [ChatSettingsController::class, 'clearMessages'])->name('chat.clear');
Route::patch('/chat/reports/{report}/status', [ChatSettingsController::class, 'updateReportStatus'])->name('chat.reports.update-status');
+ Route::delete('/chat/reports/clear', [ChatSettingsController::class, 'clearReports'])->name('chat.reports.clear');
Route::delete('/chat/reports/{report}', [ChatSettingsController::class, 'deleteReport'])->name('chat.reports.destroy');
Route::post('/chat/users/{user}/ban', [ChatSettingsController::class, 'updateUserBan'])->name('chat.users.ban');
});
From 4599f21083b84f7b06252dd2a32b7f6e695c3124 Mon Sep 17 00:00:00 2001
From: Tajim
Date: Fri, 28 Aug 2026 21:12:34 +0600
Subject: [PATCH 3/3] fix(auth): improve dark mode focus and background styling
for onboarding inputs
---
resources/js/pages/auth/Onboarding.vue | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/resources/js/pages/auth/Onboarding.vue b/resources/js/pages/auth/Onboarding.vue
index f304ff2..1cf9102 100644
--- a/resources/js/pages/auth/Onboarding.vue
+++ b/resources/js/pages/auth/Onboarding.vue
@@ -147,9 +147,9 @@ const submit = () => {
required
placeholder="Your full name"
:disabled="form.processing"
- class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-950 dark:text-gray-100 dark:placeholder:text-gray-500"
+ class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-800/80 dark:text-gray-100 dark:placeholder:text-gray-500 dark:focus:border-indigo-400 dark:focus:ring-indigo-400/20"
:class="{
- 'border-rose-500 focus:ring-rose-500/20':
+ 'border-rose-500 focus:ring-rose-500/20 dark:border-rose-500 dark:focus:border-rose-400 dark:focus:ring-rose-400/20':
form.errors.name,
}"
/>
@@ -183,9 +183,9 @@ const submit = () => {
required
placeholder="your_username"
:disabled="form.processing"
- class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-950 dark:text-gray-100 dark:placeholder:text-gray-500"
+ class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-800/80 dark:text-gray-100 dark:placeholder:text-gray-500 dark:focus:border-indigo-400 dark:focus:ring-indigo-400/20"
:class="{
- 'border-rose-500 focus:ring-rose-500/20':
+ 'border-rose-500 focus:ring-rose-500/20 dark:border-rose-500 dark:focus:border-rose-400 dark:focus:ring-rose-400/20':
form.errors.username,
}"
/>
@@ -226,9 +226,9 @@ const submit = () => {
required
placeholder="e.g., Notre Dame College, Dhaka College, BUET"
:disabled="form.processing"
- class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-950 dark:text-gray-100 dark:placeholder:text-gray-500"
+ class="w-full rounded-xl border border-slate-300 bg-white py-2.5 pr-3.5 pl-10 text-sm text-slate-900 transition outline-none placeholder:text-slate-400 focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 disabled:bg-slate-50 dark:border-gray-700 dark:bg-gray-800/80 dark:text-gray-100 dark:placeholder:text-gray-500 dark:focus:border-indigo-400 dark:focus:ring-indigo-400/20"
:class="{
- 'border-rose-500 focus:ring-rose-500/20':
+ 'border-rose-500 focus:ring-rose-500/20 dark:border-rose-500 dark:focus:border-rose-400 dark:focus:ring-rose-400/20':
form.errors.school,
}"
/>