From 81d0d54f500f7ea1606c32b03f7cf9ce71f71488 Mon Sep 17 00:00:00 2001 From: Joel Wedemire Date: Wed, 8 Apr 2026 14:17:26 -0700 Subject: [PATCH] feat: initial dashboard-ticketing scaffold --- composer.json | 23 ++ ...2026_04_08_000001_create_tickets_table.php | 28 +++ ...08_000002_create_ticket_comments_table.php | 25 +++ resources/js/Pages/Ticketing/Create.vue | 112 ++++++++++ resources/js/Pages/Ticketing/Edit.vue | 147 +++++++++++++ resources/js/Pages/Ticketing/Index.vue | 197 ++++++++++++++++++ resources/js/Pages/Ticketing/Show.vue | 156 ++++++++++++++ .../Controllers/TicketCommentController.php | 36 ++++ src/Http/Controllers/TicketController.php | 156 ++++++++++++++ src/Models/Ticket.php | 35 ++++ src/Models/TicketComment.php | 30 +++ src/TicketingServiceProvider.php | 19 ++ src/routes/ticketing.php | 16 ++ 13 files changed, 980 insertions(+) create mode 100644 composer.json create mode 100644 database/migrations/2026_04_08_000001_create_tickets_table.php create mode 100644 database/migrations/2026_04_08_000002_create_ticket_comments_table.php create mode 100644 resources/js/Pages/Ticketing/Create.vue create mode 100644 resources/js/Pages/Ticketing/Edit.vue create mode 100644 resources/js/Pages/Ticketing/Index.vue create mode 100644 resources/js/Pages/Ticketing/Show.vue create mode 100644 src/Http/Controllers/TicketCommentController.php create mode 100644 src/Http/Controllers/TicketController.php create mode 100644 src/Models/Ticket.php create mode 100644 src/Models/TicketComment.php create mode 100644 src/TicketingServiceProvider.php create mode 100644 src/routes/ticketing.php diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..94dd4d9 --- /dev/null +++ b/composer.json @@ -0,0 +1,23 @@ +{ + "name": "dashboard/ticketing", + "description": "Ticketing / help-desk snap-in for the Dashboard platform", + "type": "library", + "license": "MIT", + "autoload": { + "psr-4": { + "Dashboard\\Ticketing\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Dashboard\\Ticketing\\TicketingServiceProvider" + ] + } + }, + "require": { + "php": "^8.2", + "illuminate/support": "^11.0|^12.0|^13.0", + "inertiajs/inertia-laravel": "^1.0|^2.0" + } +} diff --git a/database/migrations/2026_04_08_000001_create_tickets_table.php b/database/migrations/2026_04_08_000001_create_tickets_table.php new file mode 100644 index 0000000..453ed03 --- /dev/null +++ b/database/migrations/2026_04_08_000001_create_tickets_table.php @@ -0,0 +1,28 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->foreignId('assigned_to')->nullable()->constrained('users')->nullOnDelete(); + $table->string('title'); + $table->text('description'); + $table->enum('category', ['IT', 'Facilities', 'HR', 'Other'])->default('Other'); + $table->enum('priority', ['low', 'medium', 'high', 'urgent'])->default('medium'); + $table->enum('status', ['open', 'in_progress', 'resolved', 'closed'])->default('open'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('tickets'); + } +}; diff --git a/database/migrations/2026_04_08_000002_create_ticket_comments_table.php b/database/migrations/2026_04_08_000002_create_ticket_comments_table.php new file mode 100644 index 0000000..109072e --- /dev/null +++ b/database/migrations/2026_04_08_000002_create_ticket_comments_table.php @@ -0,0 +1,25 @@ +id(); + $table->foreignId('ticket_id')->constrained()->cascadeOnDelete(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->text('body'); + $table->boolean('is_internal')->default(false); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('ticket_comments'); + } +}; diff --git a/resources/js/Pages/Ticketing/Create.vue b/resources/js/Pages/Ticketing/Create.vue new file mode 100644 index 0000000..d2e45ff --- /dev/null +++ b/resources/js/Pages/Ticketing/Create.vue @@ -0,0 +1,112 @@ +