feat: L'Ami Fiduciaire V1.0.0 — full codebase with Story 0.1 complete
Initial commit of the L'Ami Fiduciaire SaaS platform built on Laravel 12, Vue 3, Inertia.js 2, and Tailwind CSS 4. Story 0.1 (rename folders to declarations in database) is implemented and code-reviewed: migration, rollback, and 6 Pest tests all passing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Settings\PasswordController;
|
||||
use App\Http\Controllers\Settings\ProfileController;
|
||||
use App\Http\Controllers\Settings\TwoFactorAuthenticationController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::middleware(['auth'])->group(function () {
|
||||
Route::redirect('settings', '/settings/profile');
|
||||
|
||||
Route::get('settings/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
||||
Route::patch('settings/profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
});
|
||||
|
||||
Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::delete('settings/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
||||
|
||||
Route::get('settings/password', [PasswordController::class, 'edit'])->name('user-password.edit');
|
||||
|
||||
Route::put('settings/password', [PasswordController::class, 'update'])
|
||||
->middleware('throttle:6,1')
|
||||
->name('user-password.update');
|
||||
|
||||
Route::inertia('settings/appearance', 'settings/Appearance')->name('appearance.edit');
|
||||
|
||||
Route::get('settings/two-factor', [TwoFactorAuthenticationController::class, 'show'])
|
||||
->name('two-factor.show');
|
||||
});
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Laravel\Fortify\Features;
|
||||
|
||||
Route::inertia('/', 'Welcome', [
|
||||
'canRegister' => Features::enabled(Features::registration()),
|
||||
])->name('home');
|
||||
|
||||
Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::get('dashboard', \App\Http\Controllers\DashboardController::class)->name('dashboard');
|
||||
Route::post('workspace/switch', \App\Http\Controllers\WorkspaceSwitchController::class)
|
||||
->name('workspace.switch');
|
||||
|
||||
Route::middleware('workspace')->group(function () {
|
||||
Route::resource('clients', \App\Http\Controllers\ClientController::class);
|
||||
Route::resource('folders', \App\Http\Controllers\FolderController::class);
|
||||
Route::post('folders/{folder}/messages', [\App\Http\Controllers\FolderMessageController::class, 'store'])
|
||||
->name('folders.messages.store');
|
||||
Route::post('folders/{folder}/media', [\App\Http\Controllers\FolderMediaController::class, 'store'])
|
||||
->name('folders.media.store');
|
||||
Route::get('folders/{folder}/media/{mediaId}', [\App\Http\Controllers\FolderMediaController::class, 'download'])
|
||||
->name('folders.media.download')
|
||||
->whereNumber('mediaId');
|
||||
Route::post('folders/{folder}/mentions', [\App\Http\Controllers\FolderMentionController::class, 'store'])
|
||||
->middleware('throttle:10,1')
|
||||
->name('folders.mentions.store');
|
||||
});
|
||||
|
||||
Route::post('notifications/{id}/read', [\App\Http\Controllers\NotificationController::class, 'markAsRead'])->name('notifications.read');
|
||||
Route::post('notifications/read-all', [\App\Http\Controllers\NotificationController::class, 'markAllAsRead'])->name('notifications.readAll');
|
||||
|
||||
Route::middleware('admin')->group(function () {
|
||||
Route::resource('users', \App\Http\Controllers\UserController::class);
|
||||
Route::resource('workspaces', \App\Http\Controllers\WorkspaceController::class);
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('c')->name('client.')->middleware('folder.invitation')->group(function () {
|
||||
Route::get('upload/{token}', [\App\Http\Controllers\Client\UploadController::class, 'show'])
|
||||
->name('upload');
|
||||
Route::post('upload/{token}', [\App\Http\Controllers\Client\UploadController::class, 'store'])
|
||||
->name('upload.store');
|
||||
Route::get('confirm/{token}', [\App\Http\Controllers\Client\ConfirmController::class, 'show'])
|
||||
->name('confirm');
|
||||
Route::post('confirm/{token}', [\App\Http\Controllers\Client\ConfirmController::class, 'store'])
|
||||
->name('confirm.store');
|
||||
Route::get('refuse/{token}', [\App\Http\Controllers\Client\RefuseController::class, 'show'])
|
||||
->name('refuse');
|
||||
Route::post('refuse/{token}', [\App\Http\Controllers\Client\RefuseController::class, 'store'])
|
||||
->name('refuse.store');
|
||||
});
|
||||
|
||||
require __DIR__.'/settings.php';
|
||||
Reference in New Issue
Block a user