187349521d
POST/DELETE for translations gated by can:update,document middleware. Locale validated against SUPPORTED_LOCALES. Default-locale deletion returns 422; duplicate-locale add returns 422. Flash messages added to en/ja lang files (other locales updated in Task 9).
66 lines
2.6 KiB
PHP
66 lines
2.6 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\ProfileController;
|
|
use App\Http\Controllers\LocaleController;
|
|
use App\Http\Controllers\ImageUploadController;
|
|
use App\Http\Controllers\Admin\UserController as AdminUserController;
|
|
use App\Livewire\DocumentViewer;
|
|
use App\Livewire\DocumentEditor;
|
|
use App\Models\Document;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
Route::get('/', function () {
|
|
$homeDocument = Document::where('slug', 'home')->first();
|
|
|
|
if ($homeDocument) {
|
|
return redirect()->route('documents.show', $homeDocument);
|
|
}
|
|
|
|
return view('welcome');
|
|
});
|
|
|
|
Route::get('/dashboard', function () {
|
|
return view('dashboard');
|
|
})->middleware(['auth', 'verified'])->name('dashboard');
|
|
|
|
// Locale switcher - available for all users (both authenticated and guest)
|
|
Route::post('/locale', [LocaleController::class, 'update'])->name('locale.update');
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
|
|
// Image upload for editor
|
|
Route::post('/images/upload', [ImageUploadController::class, 'upload'])->name('images.upload');
|
|
});
|
|
|
|
// Admin routes
|
|
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
|
|
Route::resource('users', AdminUserController::class)->except(['show']);
|
|
});
|
|
|
|
Route::prefix('documents')->name('documents.')->group(function () {
|
|
// 認証が必要なルート(より具体的なルートを先に定義)
|
|
Route::middleware('auth')->group(function () {
|
|
Route::get('/create', DocumentEditor::class)->name('create');
|
|
Route::get('/{document}/edit', DocumentEditor::class)
|
|
->middleware('can:update,document')
|
|
->name('edit');
|
|
Route::post('/{document}/translations', [\App\Http\Controllers\DocumentTranslationController::class, 'store'])
|
|
->middleware('can:update,document')
|
|
->name('translations.store');
|
|
Route::delete('/{document}/translations/{locale}', [\App\Http\Controllers\DocumentTranslationController::class, 'destroy'])
|
|
->middleware('can:update,document')
|
|
->name('translations.destroy');
|
|
Route::get('/{document}/translations/{locale}/edit', \App\Livewire\DocumentEditor::class)
|
|
->middleware('can:update,document')
|
|
->name('translations.edit');
|
|
});
|
|
|
|
// 公開ルート(動的ルートは最後に)
|
|
Route::get('/{document}', DocumentViewer::class)->name('show');
|
|
});
|
|
|
|
require __DIR__.'/auth.php';
|