Files
htt-locator/CLAUDE.md

83 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
**HTT QRCode** is a Laravel 12 web application for managing industrial articles with QR code generation and scanning. Key capabilities: article catalog CRUD, unique QR code generation per article, PDF label printing, public QR scanner (no auth required), and Excel import.
**Stack**: Laravel 12 / PHP 8.2+ · Blade + TailwindCSS 3 + Alpine.js · SQLite (default) or MySQL · Vite · SimpleSoftwareIO/simple-qrcode · Barryvdh/laravel-dompdf · PHPOffice/PhpSpreadsheet
## Development Commands
```bash
# Start everything (PHP server + queue + logs + Vite HMR)
composer run dev
# Or separately:
php artisan serve # http://localhost:8000
npm run dev # Vite with hot reload
# Build for production
npm run build
# Run tests
composer run test
# or
php artisan test
php artisan test --filter NomeTest # single test
# Database
php artisan migrate
php artisan migrate:fresh --seed # reset + re-seed
php artisan db:seed --class=AdminUserSeeder # admin@example.com / password
# Code style (Laravel Pint)
./vendor/bin/pint
# Clear caches
php artisan cache:clear && php artisan config:clear && php artisan view:clear
# View all routes
php artisan route:list
# Real-time logs
php artisan pail
```
## Architecture
### Route → Controller → View mapping
| Route | Controller | View |
|---|---|---|
| `GET /` | closure | `welcome.blade.php` |
| `GET /scanner` | `PublicArticoloController@scanner` | `public/scanner.blade.php` |
| `GET /articolo/{qr_code}` | `PublicArticoloController@show` | `public/articolo.blade.php` |
| `admin/articoli` (resource) | `Admin/ArticoloController` | `admin/articoli/*.blade.php` |
Admin routes are grouped under `middleware(['auth'])` with prefix `admin/` and name prefix `admin.`. The `/dashboard` route simply redirects to `admin.articoli.index`.
### Articolo Model
`qr_code` is auto-generated on `created` event using the format `{id}-{timestamp}`. The `codice_articolo` field is unique. The public scanner URL resolves articles via `qr_code`, not `id`.
### QR Code features in `ArticoloController`
- `qrCode()` — renders QR inline as SVG/PNG
- `downloadQrCode()` — streams PNG (300×300px, error correction H)
- `printQrCodes()` — generates multi-article PDF via dompdf using `pdf-qrcodes.blade.php`
- `import()` — Excel import via PhpSpreadsheet; supports "merge" (default) and "clean import" modes
### Layouts
- `layouts/app.blade.php` — authenticated area (uses `<x-app-layout>`)
- `layouts/guest.blade.php` — public/auth pages (uses `<x-guest-layout>`)
- Blade components live in `resources/views/components/` and `app/View/Components/`
## Database
Default is **SQLite** (`database/database.sqlite`). The `articoli` table has two unique constraints: `codice_articolo` and `qr_code`.
Excel import expects these column groups: `UBICAZIONE` (Codice Articolo, Ciclo, Diametro, Descrizione, Posizione, Quantita) and `PARAMETRI TECNOLOGICI` (Tipo Lavorazione, Materiale da lavorare, Maximum Thickness, Speed RPM, Feed, Max Thrust A, Min Torque A, Quantita Fori).