Features::enabled(Features::registration()), ])->name('home'); Route::middleware(['auth', 'verified'])->group(function () { Route::inertia('dashboard', 'Dashboard')->name('dashboard'); Route::resource('projects', ProjectController::class) ->only(['index', 'create', 'store', 'show']); Route::delete('projects/{project}', [ProjectController::class, 'destroy']) ->middleware('can:access-admin') ->name('projects.destroy'); Route::get('projects/{project}/access', [ProjectController::class, 'access']) ->name('projects.access'); Route::patch('projects/{project}/permissions/users/{user}', [ProjectController::class, 'updateUserPermissions']) ->name('projects.permissions.users.update'); Route::patch('projects/{project}/permissions/teams/{team}', [ProjectController::class, 'updateTeamPermissions']) ->name('projects.permissions.teams.update'); Route::get('projects/{project}/backlog', [ProjectBacklogController::class, 'index']) ->name('projects.backlog.index'); Route::post('projects/{project}/backlog', [ProjectBacklogController::class, 'store']) ->name('projects.backlog.store'); Route::scopeBindings()->group(function (): void { Route::get('projects/{project}/board', [ProjectBoardController::class, 'index']) ->name('projects.board.index'); Route::get('projects/{project}/tickets/{ticket}', [ProjectTicketController::class, 'show']) ->name('projects.tickets.show'); Route::patch('projects/{project}/tickets/{ticket}', [ProjectTicketController::class, 'update']) ->name('projects.tickets.update'); Route::get('projects/{project}/tickets/{ticket}/branches/validate', [ProjectTicketBranchController::class, 'validate']) ->name('projects.tickets.branches.validate'); Route::post('projects/{project}/tickets/{ticket}/branches', [ProjectTicketBranchController::class, 'store']) ->name('projects.tickets.branches.store'); Route::post('projects/{project}/tickets/{ticket}/links', [ProjectTicketLinkController::class, 'store']) ->name('projects.tickets.links.store'); Route::delete('projects/{project}/tickets/{ticket}/links/{ticketLink}', [ProjectTicketLinkController::class, 'destroy']) ->withoutScopedBindings() ->name('projects.tickets.links.destroy'); Route::patch('projects/{project}/tickets/{ticket}/status', [ProjectBoardController::class, 'move']) ->name('projects.tickets.status.update'); Route::get('projects/{project}/settings/general', [ProjectController::class, 'general']) ->middleware('can:access-admin') ->name('projects.settings.general'); Route::get('projects/{project}/settings/board', [ProjectBoardSettingsController::class, 'show']) ->name('projects.settings.board'); Route::post('projects/{project}/settings/board/columns', [ProjectBoardSettingsController::class, 'store']) ->name('projects.settings.board.columns.store'); Route::patch('projects/{project}/settings/board/columns/{boardColumn}', [ProjectBoardSettingsController::class, 'update']) ->name('projects.settings.board.columns.update'); Route::delete('projects/{project}/settings/board/columns/{boardColumn}', [ProjectBoardSettingsController::class, 'destroy']) ->name('projects.settings.board.columns.destroy'); Route::post('projects/{project}/settings/board/statuses', [ProjectBoardSettingsController::class, 'storeStatus']) ->name('projects.settings.board.statuses.store'); Route::patch('projects/{project}/settings/board/statuses/{ticketStatus}', [ProjectBoardSettingsController::class, 'updateStatus']) ->name('projects.settings.board.statuses.update'); Route::delete('projects/{project}/settings/board/statuses/{ticketStatus}', [ProjectBoardSettingsController::class, 'destroyStatus']) ->name('projects.settings.board.statuses.destroy'); Route::get('projects/{project}/settings/metadata', [ProjectTicketMetadataSettingsController::class, 'show']) ->name('projects.settings.metadata'); Route::get('projects/{project}/settings/repositories', [ProjectRepositorySettingsController::class, 'show']) ->name('projects.settings.repositories'); Route::post('projects/{project}/settings/repositories', [ProjectRepositorySettingsController::class, 'store']) ->name('projects.settings.repositories.store'); Route::patch('projects/{project}/settings/repositories/{repositoryConnection}', [ProjectRepositorySettingsController::class, 'update']) ->name('projects.settings.repositories.update'); Route::delete('projects/{project}/settings/repositories/{repositoryConnection}', [ProjectRepositorySettingsController::class, 'destroy']) ->name('projects.settings.repositories.destroy'); Route::post('projects/{project}/settings/metadata/types', [ProjectTicketMetadataSettingsController::class, 'storeType']) ->name('projects.settings.metadata.types.store'); Route::patch('projects/{project}/settings/metadata/types/{ticketType}', [ProjectTicketMetadataSettingsController::class, 'updateType']) ->name('projects.settings.metadata.types.update'); Route::patch('projects/{project}/settings/metadata', [ProjectTicketMetadataSettingsController::class, 'update']) ->name('projects.settings.metadata.update'); Route::delete('projects/{project}/settings/metadata/types/{ticketType}', [ProjectTicketMetadataSettingsController::class, 'destroyType']) ->name('projects.settings.metadata.types.destroy'); Route::post('projects/{project}/settings/metadata/priorities', [ProjectTicketMetadataSettingsController::class, 'storePriority']) ->name('projects.settings.metadata.priorities.store'); Route::patch('projects/{project}/settings/metadata/priorities/{ticketPriority}', [ProjectTicketMetadataSettingsController::class, 'updatePriority']) ->name('projects.settings.metadata.priorities.update'); Route::delete('projects/{project}/settings/metadata/priorities/{ticketPriority}', [ProjectTicketMetadataSettingsController::class, 'destroyPriority']) ->name('projects.settings.metadata.priorities.destroy'); Route::post('projects/{project}/settings/metadata/fields', [ProjectTicketMetadataSettingsController::class, 'storeFieldDefinition']) ->name('projects.settings.metadata.fields.store'); Route::patch('projects/{project}/settings/metadata/fields/{ticketFieldDefinition}', [ProjectTicketMetadataSettingsController::class, 'updateFieldDefinition']) ->name('projects.settings.metadata.fields.update'); Route::delete('projects/{project}/settings/metadata/fields/{ticketFieldDefinition}', [ProjectTicketMetadataSettingsController::class, 'destroyFieldDefinition']) ->name('projects.settings.metadata.fields.destroy'); Route::post('projects/{project}/settings/metadata/link-types', [ProjectTicketMetadataSettingsController::class, 'storeLinkType']) ->name('projects.settings.metadata.link-types.store'); Route::patch('projects/{project}/settings/metadata/link-types/{ticketLinkType}', [ProjectTicketMetadataSettingsController::class, 'updateLinkType']) ->name('projects.settings.metadata.link-types.update'); Route::delete('projects/{project}/settings/metadata/link-types/{ticketLinkType}', [ProjectTicketMetadataSettingsController::class, 'destroyLinkType']) ->name('projects.settings.metadata.link-types.destroy'); }); Route::get('teams', [TeamController::class, 'index']) ->middleware('can:view-teams') ->name('teams.index'); Route::post('teams', [TeamController::class, 'store']) ->middleware('can:create-team') ->name('teams.store'); Route::patch('teams/{team}/members', [TeamController::class, 'updateMembers']) ->name('teams.members.update'); Route::patch('teams/{team}/permissions/users/{user}', [TeamController::class, 'updateUserPermissions']) ->name('teams.permissions.users.update'); }); Route::middleware(['auth', 'verified', 'can:access-admin']) ->prefix('admin') ->name('admin.') ->group(function () { Route::get('users', [UserManagementController::class, 'index'])->name('users.index'); Route::patch('users/{user}/permissions', [UserManagementController::class, 'update'])->name('users.update'); }); require __DIR__.'/settings.php';