46 lines
2.8 KiB
Markdown
46 lines
2.8 KiB
Markdown
# GEMINI Project Context
|
|
|
|
Questo file serve a dare contesto all'AI (Antigravity/Gemini) sulla struttura e logica del progetto.
|
|
|
|
## Project Overview
|
|
**Nome**: Print Calculator
|
|
**Scopo**: Calcolare costi e tempi di stampa 3D da file STL in modo preciso tramite slicing reale.
|
|
**Stack**:
|
|
- **Backend**: Java 21 (Spring Boot 3.4), PostgreSQL, Flyway.
|
|
- **Frontend**: Angular 19 (TypeScript), Angular Material, Three.js per visualizzazione 3D.
|
|
|
|
## Architecture
|
|
|
|
### Backend (`/backend`)
|
|
- **`BackendApplication.java`**: Entrypoint dell'applicazione Spring Boot.
|
|
- **`controller/`**: Espone le API REST per l'upload e il calcolo dei preventivi.
|
|
- **`service/SlicerService.java`**: Wrappa l'eseguibile di **OrcaSlicer** per effettuare lo slicing reale del modello.
|
|
- Gestisce i profili di stampa (Macchina, Processo, Filamento) caricati da file JSON.
|
|
- Crea configurazioni on-the-fly e invoca OrcaSlicer in modalità headless.
|
|
- **`service/GCodeParser.java`**: Analizza il G-Code generato per estrarre tempo di stampa e peso del materiale dai metadati del file.
|
|
- **`service/QuoteCalculator.java`**: Calcola il prezzo finale basandosi su politiche di prezzo salvate nel database.
|
|
- Gestisce costi macchina a scaglioni (tiered pricing).
|
|
- Calcola costi energetici basati sulla potenza della stampante e costo del kWh.
|
|
- Applica markup percentuali e fee fissi per job.
|
|
|
|
### Frontend (`/frontend`)
|
|
- Applicazione Angular 19 con architettura modulare (core, features, shared).
|
|
- **Three.js**: Utilizzato per il rendering dei file STL caricati dall'utente.
|
|
- **Angular Material**: Per l'interfaccia utente.
|
|
- **ngx-translate**: Per il supporto multilingua.
|
|
|
|
## Key Concepts
|
|
- **Real Slicing**: Il backend esegue un vero slicing usando OrcaSlicer. Questo garantisce stime di tempo e materiale estremamente precise.
|
|
- **Database-Driven Pricing**: A differenza di versioni precedenti, il calcolo del preventivo è ora guidato da entità DB (`PricingPolicy`, `PrinterMachine`, `FilamentVariant`).
|
|
- **G-Code Metadata**: L'applicazione legge direttamene i commenti generati dallo slicer nel G-Code (es. `; estimated printing time`, `; filament used [g]`).
|
|
|
|
## Development Notes
|
|
- **Backend**: Richiede JDK 21. Si avvia con `./gradlew bootRun`.
|
|
- **Database**: Richiede PostgreSQL. Le migrazioni sono gestite da Flyway.
|
|
- **Frontend**: Richiede Node.js 22. Si avvia con `npm start`.
|
|
- **OrcaSlicer**: Deve essere installato sul sistema e il percorso configurato in `application.properties` o tramite variabile d'ambiente `SLICER_PATH`.
|
|
|
|
## AI Agent Rules
|
|
- **No Inline Code**: Tutti i componenti Angular DEVONO usare file separati per HTML (`templateUrl`) e SCSS (`styleUrl`). È vietato usare `template` o `styles` inline nel decoratore `@Component`.
|
|
- **Spring Boot Conventions**: Seguire i pattern standard di Spring Boot (Service-Repository-Controller).
|