From 8ef7e4812e9a83a4fd09b926afd8cf87753976d1 Mon Sep 17 00:00:00 2001 From: Abdul Kareem Date: Mon, 23 Mar 2026 02:04:50 +0300 Subject: [PATCH] feat: improve backend storage for landing page messages --- .../Controllers/Api/FeedbackController.php | 30 ++++------ app/Models/UserFeedback.php | 3 + ...d_sender_fields_to_user_feedback_table.php | 56 +++++++++++++++++++ 3 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 database/migrations/2026_03_23_000002_add_sender_fields_to_user_feedback_table.php diff --git a/app/Http/Controllers/Api/FeedbackController.php b/app/Http/Controllers/Api/FeedbackController.php index f8b4048..f30285a 100644 --- a/app/Http/Controllers/Api/FeedbackController.php +++ b/app/Http/Controllers/Api/FeedbackController.php @@ -17,6 +17,9 @@ class FeedbackController extends Controller $feedback = UserFeedback::create([ 'user_id' => $request->user()->id, + 'sender_name' => trim(($request->user()->first_name ?? '') . ' ' . ($request->user()->last_name ?? '')) ?: null, + 'sender_email' => $request->user()->email, + 'source' => 'mobile_app', 'message' => $validated['message'], ]); @@ -34,28 +37,16 @@ class FeedbackController extends Controller { $validated = $request->validate([ 'message' => 'required|string|min:5|max:2000', - 'name' => 'nullable|string|max:120', - 'email' => 'nullable|email|max:255', + 'name' => 'required|string|max:120', + 'email' => 'required|email|max:255', ]); - $details = []; - if (! empty($validated['name'])) { - $details[] = 'Name: ' . trim($validated['name']); - } - if (! empty($validated['email'])) { - $details[] = 'Email: ' . trim($validated['email']); - } - - $message = trim($validated['message']); - if (! empty($details)) { - $message .= "\n\n[Landing Page]\n" . implode("\n", $details); - } else { - $message .= "\n\n[Landing Page]"; - } - $feedback = UserFeedback::create([ 'user_id' => null, - 'message' => $message, + 'sender_name' => trim($validated['name']), + 'sender_email' => trim($validated['email']), + 'source' => 'landing_page', + 'message' => trim($validated['message']), ]); return response()->json([ @@ -85,6 +76,9 @@ class FeedbackController extends Controller $data = collect($paginator->items())->map(function (UserFeedback $item) { return [ 'id' => $item->id, + 'sender_name' => $item->sender_name, + 'sender_email' => $item->sender_email, + 'source' => $item->source, 'message' => $item->message, 'created_at' => $item->created_at, 'user' => [ diff --git a/app/Models/UserFeedback.php b/app/Models/UserFeedback.php index 8fc8db6..6ed680c 100644 --- a/app/Models/UserFeedback.php +++ b/app/Models/UserFeedback.php @@ -14,6 +14,9 @@ class UserFeedback extends Model protected $fillable = [ 'user_id', + 'sender_name', + 'sender_email', + 'source', 'message', ]; diff --git a/database/migrations/2026_03_23_000002_add_sender_fields_to_user_feedback_table.php b/database/migrations/2026_03_23_000002_add_sender_fields_to_user_feedback_table.php new file mode 100644 index 0000000..726211f --- /dev/null +++ b/database/migrations/2026_03_23_000002_add_sender_fields_to_user_feedback_table.php @@ -0,0 +1,56 @@ +string('sender_name', 120)->nullable()->after('user_id'); + } + + if (! Schema::hasColumn('user_feedback', 'sender_email')) { + $table->string('sender_email')->nullable()->after('sender_name'); + } + + if (! Schema::hasColumn('user_feedback', 'source')) { + $table->string('source', 40)->nullable()->after('sender_email'); + } + }); + } + + public function down(): void + { + if (! Schema::hasTable('user_feedback')) { + return; + } + + Schema::table('user_feedback', function (Blueprint $table) { + $drops = []; + + if (Schema::hasColumn('user_feedback', 'source')) { + $drops[] = 'source'; + } + + if (Schema::hasColumn('user_feedback', 'sender_email')) { + $drops[] = 'sender_email'; + } + + if (Schema::hasColumn('user_feedback', 'sender_name')) { + $drops[] = 'sender_name'; + } + + if ($drops !== []) { + $table->dropColumn($drops); + } + }); + } +};