bowler/src/routes/web.php

126 lines
8.2 KiB
PHP

<?php
use App\Http\Controllers\ApiKeyController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\BowlerChartController;
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\GroupAdminController;
use App\Http\Controllers\KpiController;
use App\Http\Controllers\KpiEntryController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ProjectController;
use App\Http\Controllers\ProjectEntryController;
use App\Http\Controllers\TeamController;
use App\Http\Controllers\ThemeController;
use App\Http\Controllers\UserAdminController;
use Illuminate\Support\Facades\Route;
Route::view('/', 'home')->name('home');
Route::middleware('guest')->group(function () {
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
Route::post('/login', [AuthController::class, 'login'])
->middleware('throttle:10,1')
->name('login.attempt');
});
Route::post('/logout', [AuthController::class, 'logout'])
->middleware('auth')
->name('logout');
Route::middleware('auth')->group(function () {
// Bowler charts
Route::get('/my-bowler', [BowlerChartController::class, 'personal'])->name('charts.personal');
Route::get('/charts', [BowlerChartController::class, 'index'])->name('charts.index');
Route::get('/charts/create', [BowlerChartController::class, 'create'])->name('charts.create');
Route::post('/charts', [BowlerChartController::class, 'store'])->name('charts.store');
Route::get('/charts/{chart}', [BowlerChartController::class, 'show'])->name('charts.show');
Route::get('/charts/{chart}/edit', [BowlerChartController::class, 'edit'])->name('charts.edit');
Route::put('/charts/{chart}', [BowlerChartController::class, 'update'])->name('charts.update');
Route::delete('/charts/{chart}', [BowlerChartController::class, 'destroy'])->name('charts.destroy');
// KPIs
Route::get('/kpis', [KpiController::class, 'index'])->name('kpis.index');
Route::get('/kpis/create', [KpiController::class, 'create'])->name('kpis.create');
Route::post('/kpis', [KpiController::class, 'store'])->name('kpis.store');
Route::get('/kpis/{kpi}/edit', [KpiController::class, 'edit'])->name('kpis.edit');
Route::put('/kpis/{kpi}', [KpiController::class, 'update'])->name('kpis.update');
Route::delete('/kpis/{kpi}', [KpiController::class, 'destroy'])->name('kpis.destroy');
// KPI entries (shallow)
Route::get('/kpis/{kpi}/entries', [KpiEntryController::class, 'index'])->name('kpis.entries.index');
Route::post('/kpis/{kpi}/entries', [KpiEntryController::class, 'store'])->name('kpis.entries.store');
Route::get('/kpi-entries/{entry}/edit', [KpiEntryController::class, 'edit'])->name('kpi-entries.edit');
Route::put('/kpi-entries/{entry}', [KpiEntryController::class, 'update'])->name('kpi-entries.update');
Route::delete('/kpi-entries/{entry}', [KpiEntryController::class, 'destroy'])->name('kpi-entries.destroy');
// Projects
Route::get('/projects', [ProjectController::class, 'index'])->name('projects.index');
Route::get('/projects/create', [ProjectController::class, 'create'])->name('projects.create');
Route::post('/projects', [ProjectController::class, 'store'])->name('projects.store');
Route::get('/projects/{project}/edit', [ProjectController::class, 'edit'])->name('projects.edit');
Route::put('/projects/{project}', [ProjectController::class, 'update'])->name('projects.update');
Route::delete('/projects/{project}', [ProjectController::class, 'destroy'])->name('projects.destroy');
// Project entries (shallow)
Route::get('/projects/{project}/entries', [ProjectEntryController::class, 'index'])->name('projects.entries.index');
Route::post('/projects/{project}/entries', [ProjectEntryController::class, 'store'])->name('projects.entries.store');
Route::get('/project-entries/{entry}/edit', [ProjectEntryController::class, 'edit'])->name('project-entries.edit');
Route::put('/project-entries/{entry}', [ProjectEntryController::class, 'update'])->name('project-entries.update');
Route::delete('/project-entries/{entry}', [ProjectEntryController::class, 'destroy'])->name('project-entries.destroy');
// Teams & Categories (per-user lists)
Route::get('/teams', [TeamController::class, 'index'])->name('teams.index');
Route::post('/teams', [TeamController::class, 'store'])->name('teams.store');
Route::get('/teams/{team}/edit', [TeamController::class, 'edit'])->name('teams.edit');
Route::put('/teams/{team}', [TeamController::class, 'update'])->name('teams.update');
Route::delete('/teams/{team}', [TeamController::class, 'destroy'])->name('teams.destroy');
Route::get('/categories', [CategoryController::class, 'index'])->name('categories.index');
Route::post('/categories', [CategoryController::class, 'store'])->name('categories.store');
Route::get('/categories/{category}/edit', [CategoryController::class, 'edit'])->name('categories.edit');
Route::put('/categories/{category}', [CategoryController::class, 'update'])->name('categories.update');
Route::delete('/categories/{category}', [CategoryController::class, 'destroy'])->name('categories.destroy');
// Profile
Route::get('/profile/password', [ProfileController::class, 'editPassword'])->name('profile.password.edit');
Route::put('/profile/password', [ProfileController::class, 'updatePassword'])->name('profile.password.update');
// API keys
Route::get('/api-keys', [ApiKeyController::class, 'index'])->name('api-keys.index');
Route::post('/api-keys', [ApiKeyController::class, 'store'])->name('api-keys.store');
Route::post('/api-keys/{tokenId}/view', [ApiKeyController::class, 'show'])->name('api-keys.show');
Route::delete('/api-keys/{tokenId}', [ApiKeyController::class, 'destroy'])->name('api-keys.destroy');
// Swagger / API documentation
Route::view('/api/docs', 'api-docs')->name('api.docs');
});
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/users', [UserAdminController::class, 'index'])->name('users.index');
Route::get('/users/create', [UserAdminController::class, 'create'])->name('users.create');
Route::post('/users', [UserAdminController::class, 'store'])->name('users.store');
Route::get('/users/{user}/edit', [UserAdminController::class, 'edit'])->name('users.edit');
Route::put('/users/{user}', [UserAdminController::class, 'update'])->name('users.update');
Route::get('/users/{user}/password', [UserAdminController::class, 'editPassword'])->name('users.password.edit');
Route::put('/users/{user}/password', [UserAdminController::class, 'updatePassword'])->name('users.password.update');
Route::post('/users/{user}/toggle-active', [UserAdminController::class, 'toggleActive'])->name('users.toggle');
Route::get('/groups', [GroupAdminController::class, 'index'])->name('groups.index');
Route::get('/groups/create', [GroupAdminController::class, 'create'])->name('groups.create');
Route::post('/groups', [GroupAdminController::class, 'store'])->name('groups.store');
Route::get('/groups/{group}/edit', [GroupAdminController::class, 'edit'])->name('groups.edit');
Route::put('/groups/{group}', [GroupAdminController::class, 'update'])->name('groups.update');
Route::delete('/groups/{group}', [GroupAdminController::class, 'destroy'])->name('groups.destroy');
Route::get('/groups/{group}/members', [GroupAdminController::class, 'members'])->name('groups.members');
Route::post('/groups/{group}/members', [GroupAdminController::class, 'addMember'])->name('groups.members.add');
Route::put('/groups/{group}/members/{user}/role', [GroupAdminController::class, 'updateMemberRole'])->name('groups.members.role');
Route::delete('/groups/{group}/members/{user}', [GroupAdminController::class, 'removeMember'])->name('groups.members.remove');
Route::get('/theme', [ThemeController::class, 'edit'])->name('theme.edit');
Route::put('/theme', [ThemeController::class, 'update'])->name('theme.update');
Route::post('/theme/reset', [ThemeController::class, 'reset'])->name('theme.reset');
Route::get('/theme/export', [ThemeController::class, 'export'])->name('theme.export');
Route::post('/theme/import', [ThemeController::class, 'import'])->name('theme.import');
});