feat: ticket views, statuses, participants, merge; mobile layout fixes (#5)
- New migrations: ticket views, statuses, participants, merge support - New models: TicketView, TicketStatus, TicketParticipant - New seeder: EmailTemplatesSeeder - Console commands for ticketing - Mobile: sidebar min-w-0/overflow-hidden, tab nav overflow-x-auto Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ Route::middleware(['web', 'auth', 'app.access:ticketing'])
|
||||
// ── Fixed paths first (before any /{ticket} wildcards) ────────────────
|
||||
|
||||
Route::get('/my-tickets', [TicketController::class, 'myTickets'])->name('my-tickets');
|
||||
Route::post('/prefs', [TicketController::class, 'savePrefs']) ->name('prefs.save');
|
||||
Route::get('/attachments/{attachment}', [TicketAttachmentController::class, 'show'])->name('attachments.show');
|
||||
|
||||
Route::middleware('permission:ticketing.view,ticketing.manage')->group(function () {
|
||||
@@ -41,6 +42,10 @@ Route::middleware(['web', 'auth', 'app.access:ticketing'])
|
||||
Route::post('/settings/email', [TicketingSettingsController::class, 'storeEmailConnection'])->name('settings.email.store');
|
||||
Route::put('/settings/email/{connection}', [TicketingSettingsController::class, 'updateEmailConnection'])->name('settings.email.update');
|
||||
Route::delete('/settings/email/{connection}', [TicketingSettingsController::class, 'destroyEmailConnection'])->name('settings.email.destroy');
|
||||
Route::put('/settings/automation', [TicketingSettingsController::class, 'updateAutomation']) ->name('settings.automation.update');
|
||||
Route::post('/settings/statuses', [TicketingSettingsController::class, 'storeStatus']) ->name('settings.statuses.store');
|
||||
Route::put('/settings/statuses/{status}', [TicketingSettingsController::class, 'updateStatus']) ->name('settings.statuses.update');
|
||||
Route::delete('/settings/statuses/{status}', [TicketingSettingsController::class, 'destroyStatus']) ->name('settings.statuses.destroy');
|
||||
});
|
||||
|
||||
// ── Wildcard /{ticket} routes (last, after all fixed paths) ──────────
|
||||
@@ -49,9 +54,15 @@ Route::middleware(['web', 'auth', 'app.access:ticketing'])
|
||||
});
|
||||
|
||||
Route::middleware('permission:ticketing.manage')->group(function () {
|
||||
Route::get('/{ticket}/edit', [TicketController::class, 'edit']) ->name('edit');
|
||||
Route::put('/{ticket}', [TicketController::class, 'update']) ->name('update');
|
||||
Route::delete('/{ticket}', [TicketController::class, 'destroy'])->name('destroy');
|
||||
Route::get('/{ticket}/edit', [TicketController::class, 'edit']) ->name('edit');
|
||||
Route::put('/{ticket}', [TicketController::class, 'update']) ->name('update');
|
||||
Route::delete('/{ticket}', [TicketController::class, 'destroy']) ->name('destroy');
|
||||
Route::post('/{ticket}/view', [TicketController::class, 'recordView']) ->name('tickets.view');
|
||||
Route::post('/{ticket}/merge', [TicketController::class, 'merge']) ->name('merge');
|
||||
Route::post('/{ticket}/split', [TicketController::class, 'split']) ->name('split');
|
||||
Route::post('/{ticket}/participants', [TicketController::class, 'addParticipant']) ->name('participants.store');
|
||||
Route::delete('/{ticket}/participants/{userId}', [TicketController::class, 'removeParticipant'])->name('participants.destroy');
|
||||
Route::get('/{ticket}/users/search', [TicketController::class, 'searchUsers']) ->name('users.search');
|
||||
});
|
||||
|
||||
Route::middleware('permission:ticketing.view,ticketing.manage')->group(function () {
|
||||
|
||||
Reference in New Issue
Block a user