Files
hermes d4928789c4
Deploy HickLab3D Dashboard / Deploy to production (push) Failing after 23s
Add HL3D branding, Etsy Live/Draft paging and Projects lifecycle
Replace the old touchmark/PNG identity with the supplied lockup and
monogram, segmented role-aware navigation, Live/Draft listing filters
with generation-based cache invalidation, and admin Projects covering
immutable file revisions, listing live pointers, and exact-decimal
filament/packaging/shipping costing. Additive schema only; no Etsy
publication. Isolated clone tests: 301 tests, 1162 assertions.
2026-11-08 12:50:56 +00:00

78 lines
6.2 KiB
PHP

<?php
use App\Http\Controllers\AuthController;
use App\Http\Controllers\BambuddyController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\DryerController;
use App\Http\Controllers\EtsyController;
use App\Http\Controllers\EtsySettingsController;
use App\Http\Controllers\IntegrationSettingsController;
use App\Http\Controllers\NotificationController;
use App\Http\Controllers\Parcel2GoConnectionController;
use App\Http\Controllers\PrinterController;
use App\Http\Controllers\ProjectController;
use App\Http\Controllers\ProjectCostSnapshotController;
use App\Http\Controllers\ProjectFileController;
use App\Http\Controllers\ProjectListingLinkController;
use App\Http\Controllers\ProjectReleaseController;
use App\Http\Controllers\ProjectRevisionController;
use App\Http\Controllers\ScheduleSettingsController;
use App\Http\Controllers\ShippingController;
use App\Http\Controllers\UserController;
use App\Http\Middleware\EnsureAccountActive;
use Illuminate\Support\Facades\Route;
Route::middleware('guest')->group(function (): void {
Route::get('/login', [AuthController::class, 'create'])->name('login');
Route::post('/login', [AuthController::class, 'store'])->middleware('throttle:5,1')->name('login.store');
});
Route::middleware(['auth', EnsureAccountActive::class])->group(function (): void {
Route::post('/logout', [AuthController::class, 'destroy'])->name('logout');
Route::get('/', DashboardController::class)->name('dashboard');
Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.index');
Route::post('/notifications/read', [NotificationController::class, 'readAll'])->name('notifications.read-all');
Route::post('/notifications/{notification}/read', [NotificationController::class, 'read'])->name('notifications.read');
Route::get('/printers', BambuddyController::class)->name('printers.index');
Route::delete('/printers/{printer}', [PrinterController::class, 'destroy'])->name('printers.destroy');
Route::get('/shipping', [ShippingController::class, 'index'])->name('shipping');
Route::post('/shipping/quotes', [ShippingController::class, 'quote'])->name('shipping.quote');
Route::post('/shipping/collections/dates', [ShippingController::class, 'collectionDates'])->name('shipping.collection-dates');
Route::post('/shipping/collections/book', [ShippingController::class, 'bookCollection'])->name('shipping.book-collection');
Route::post('/shipping/collections/reset', [ShippingController::class, 'resetBooking'])->name('shipping.reset-booking');
Route::get('/shipping/labels/{orderLineId}', [ShippingController::class, 'label'])->name('shipping.label');
Route::post('/shipping/parcel2go/connect', [Parcel2GoConnectionController::class, 'connect'])->name('parcel2go.connect');
Route::get('/shipping/parcel2go/callback', [Parcel2GoConnectionController::class, 'callback'])->name('parcel2go.callback');
Route::get('/etsy', [EtsyController::class, 'index'])->name('etsy.index');
Route::post('/etsy/connect', [EtsyController::class, 'connect'])->name('etsy.connect');
Route::get('/etsy/callback', [EtsyController::class, 'callback'])->name('etsy.callback');
Route::get('/settings', [EtsySettingsController::class, 'index'])->name('settings.index');
Route::put('/settings/etsy', [EtsySettingsController::class, 'update'])->name('settings.etsy.update');
Route::put('/settings/integrations/{provider}', [IntegrationSettingsController::class, 'update'])->name('settings.integrations.update');
Route::put('/settings/schedules', [ScheduleSettingsController::class, 'update'])->name('settings.schedules.update');
Route::post('/settings/schedules/{job}/run', [ScheduleSettingsController::class, 'run'])->name('settings.schedules.run');
Route::get('/dryer', [DryerController::class, 'index'])->name('dryer');
Route::get('/dryer/status', [DryerController::class, 'status'])->name('dryer.status');
Route::post('/dryer/control', [DryerController::class, 'control'])->name('dryer.control');
Route::post('/dryer/faults/acknowledge', [DryerController::class, 'acknowledge'])->name('dryer.acknowledge');
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}', [ProjectController::class, 'show'])->name('projects.show');
Route::get('/projects/{project}/edit', [ProjectController::class, 'edit'])->name('projects.edit');
Route::patch('/projects/{project}', [ProjectController::class, 'update'])->name('projects.update');
Route::post('/projects/{project}/archive', [ProjectController::class, 'archive'])->name('projects.archive');
Route::post('/projects/{project}/revisions', [ProjectRevisionController::class, 'store'])->name('projects.revisions.store');
Route::post('/projects/{project}/revisions/{revision}/approve', [ProjectRevisionController::class, 'approve'])->name('projects.revisions.approve');
Route::get('/projects/{project}/files/{file}/download', [ProjectFileController::class, 'download'])->name('projects.files.download');
Route::post('/projects/{project}/listings', [ProjectListingLinkController::class, 'store'])->name('projects.listings.store');
Route::delete('/projects/{project}/listings/{listingLink}', [ProjectListingLinkController::class, 'destroy'])->name('projects.listings.destroy');
Route::post('/projects/{project}/cost-snapshots', [ProjectCostSnapshotController::class, 'store'])->name('projects.cost-snapshots.store');
Route::post('/projects/{project}/listings/{listingLink}/release', [ProjectReleaseController::class, 'store'])->name('projects.listings.release');
Route::post('/projects/{project}/listings/{listingLink}/revert', [ProjectReleaseController::class, 'revert'])->name('projects.listings.revert');
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::post('/users', [UserController::class, 'store'])->name('users.store');
Route::patch('/users/{user}', [UserController::class, 'update'])->name('users.update');
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
});