Add wizard UI, general-assembly resolution, and test suite
Restructure Form1 into a sequential wizard (database -> import -> raw -> recursive component resolution -> completeness/STEP report), fix case-sensitivity bugs in codice/tipo_file lookups and a word-boundary gap in the assembly scanner that missed _D100-style sub-assembly references, and treat the distinta's general assembly as an ordinary CSV row (derived from the DBP_<codice>_<timestamp> filename) instead of special-casing it throughout. Also adds CadSearchGui.Tests (xUnit) covering the scanner, filename parsing, and the case-insensitive DB lookup behavior. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
146ce78eae
commit
52483177f0
16 files changed
+1144
-249
No files matched your search
@@ -5,9 +5,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
## Cos'è questo progetto
|
||||
|
||||
`CadSearchGui` è un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di
|
||||
cercare i file CAD Pro-ENGINEER/Creo contenuti in sei cartelle di un disco/share
|
||||
di rete (`__Accessori`, `__B.end`, `__Corpi`, `__Fondi`, `Unificati`, `Commerciali` sotto una radice,
|
||||
di default `X:\`), salvando i metadati in un DB SQLite locale (`cad_index.db`).
|
||||
cercare i file CAD Pro-ENGINEER/Creo contenuti in tutte le cartelle di primo livello
|
||||
di un disco/share di rete (radice di default `X:\`), salvando i metadati in un DB
|
||||
SQLite locale (`cad_index.db`).
|
||||
|
||||
## Comandi
|
||||
|
||||
@@ -24,7 +24,12 @@ Pubblicazione come eseguibile standalone (single-file, self-contained, Windows x
|
||||
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publish
|
||||
```
|
||||
|
||||
Non ci sono test automatizzati nel repo.
|
||||
`CadSearchGui.Tests/` (xUnit) contiene unit e integration test — vedi
|
||||
`dotnet test` da dentro quella cartella. Riferimento al progetto principale
|
||||
via `ProjectReference` + `InternalsVisibleTo` (in `CadSearchGui.csproj`), così
|
||||
i test possono chiamare direttamente `Indexer.ParseFilename` e
|
||||
`AssemblyComponentScanner.EstraiCodiciReferenziati` senza esporli come API
|
||||
pubblica.
|
||||
|
||||
## Architettura
|
||||
|
||||
@@ -33,13 +38,32 @@ passato esisteva anche una CLI separata e uno script Python di indicizzazione,
|
||||
entrambi rimossi: ora l'unico programma è questo, con GUI e indicizzazione integrate).
|
||||
|
||||
- **Program.cs** — entry point WinForms standard, avvia `Form1`.
|
||||
- **Form1.cs** / **Form1.Designer.cs** — finestra principale. La UI è costruita
|
||||
interamente in codice in `Form1.BuildUi()` (nessun designer visuale usato); i
|
||||
controlli sono campi privati (`_txtCerca`, `_cmbTipo`, `_cmbCartella`, `_chkUltima`,
|
||||
`_grid`, ecc.). `Form1.Designer.cs` contiene solo lo scheletro minimo
|
||||
(`InitializeComponent`/`Dispose`) generato dal template.
|
||||
- **Form1.cs** / **Form1.Designer.cs** — finestra principale, costruita come wizard: una
|
||||
sola fase alla volta occupa tutta la finestra (`_panelFasi[]`/`NomiFasi`), si avanza
|
||||
con "Avanti" solo quando la fase corrente è pronta (`AvantiConsentito`). La UI è
|
||||
costruita interamente in codice in `Form1.BuildUi()` (nessun designer visuale usato).
|
||||
`Form1.Designer.cs` contiene solo lo scheletro minimo (`InitializeComponent`/`Dispose`)
|
||||
generato dal template. Le fasi, in ordine:
|
||||
1. **Database** — carica/aggiorna l'indice, mostra data ultimo aggiornamento; qui vive
|
||||
anche "Pulisci raw e step" (manutenzione, non fa parte del flusso a valle).
|
||||
2. **Importa Distinta Base** — `DistintaBaseImporter.ConvertiInCsv` genera il CSV dei
|
||||
componenti; se il nome del file segue la convenzione del gestionale
|
||||
(`DBP_<codice>_<timestamp>`), l'assieme generale viene aggiunto come riga in più nel
|
||||
CSV stesso (il foglio elenca solo i componenti sotto l'assieme, non l'assieme in sé).
|
||||
Da qui in avanti l'assieme generale è un componente come tutti gli altri, nessun
|
||||
caso speciale nel resto del codice.
|
||||
3. **Crea cartella raw** — cerca nell'indice il percorso CAD di ogni componente del CSV
|
||||
(`TrovaPercorsiCad`) e lo copia in `raw/` (`CopiaFileTrovati`).
|
||||
4. **Trova componenti referenziati** — legge euristicamente i metadati binari dei `.asm`
|
||||
già in `raw/` (`AssemblyComponentScanner`) per risolvere ricorsivamente i
|
||||
sotto-assiemi/parti che contengono (`RisolviAlberoComponenti`), copiandoli anch'essi
|
||||
in `raw/`.
|
||||
5. **Verifica completezza e STEP** — "Verifica completezza assiemi" (ricorsivo sui
|
||||
percorsi originali in indice, non su `raw/`) e "Report STEP realizzati" (confronto
|
||||
con `step/`).
|
||||
- **Indexer.cs** — logica di scansione del disco e scrittura/aggiornamento del DB
|
||||
SQLite (`Indexer.ScanAsync`). Cammina le 6 cartelle radice (`Indexer.CartelleRadice`)
|
||||
SQLite (`Indexer.ScanAsync`). Cammina tutte le cartelle di primo livello trovate sotto
|
||||
la radice (scoperte dinamicamente con `Directory.GetDirectories`, non un elenco fisso)
|
||||
con un walk manuale a stack (`Walk`, più veloce di `EnumerateFiles(..., AllDirectories)`
|
||||
su share di rete con centinaia di migliaia di file), estrae da ogni nome file il
|
||||
pattern Pro-E `<codice>.<tipo>.<versione>` via regex, e fa un upsert incrementale
|
||||
@@ -65,13 +89,6 @@ file non più presenti su disco a fine scansione).
|
||||
Vista `files_ultima_versione`: stessa struttura, filtrata alla sola versione più
|
||||
recente per codice+tipo.
|
||||
|
||||
### Comportamento di ricerca di default
|
||||
|
||||
La ricerca di default (nessun filtro esplicito dall'utente) mostra solo i tipi
|
||||
`prt`/`asm` e solo l'ultima versione — vedi `OpzionePrtAsm`/`TipiPredefiniti` in
|
||||
`Form1.cs`. L'utente può comunque scegliere "Tutti i tipi" o un tipo specifico dal
|
||||
combo, e togliere la spunta "Solo ultima versione".
|
||||
|
||||
### Percorso del DB
|
||||
|
||||
All'avvio la app cerca `cad_index.db` accanto all'eseguibile o nella working
|
||||
|
||||
Reference in new issue
Block a user