Initial catalog maker baseline
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
# Catalog Maker Project Notes
|
||||
|
||||
## Purpose
|
||||
|
||||
This project replaces the Excel/VBA workflow named `Catalog maker - 20` with a Node.js local web application. The UI is a compact product catalog editor for loading manufacturer products, combinations, source mappings and parsed supplier data.
|
||||
|
||||
## Non-negotiable rules
|
||||
|
||||
- Live DB is never written to. Live DB access is read-only through the existing endpoint.
|
||||
- Local DB may later allow controlled writes, but writes must remain explicit, logged and protected by transaction/dry-run settings.
|
||||
- Never print, commit or share endpoint tokens, usernames or passwords.
|
||||
- Never use Live DB as a fallback when Local DB is selected. If Local DB is unavailable, show an error and keep the UI running.
|
||||
- Keep the development server on port `3404` unless the user explicitly requests another port.
|
||||
- Do not delete or revert user files or unrelated changes.
|
||||
|
||||
## Git workflow
|
||||
|
||||
- After every completed implementation step, run the relevant checks, create a focused commit and push it to the configured remote repository.
|
||||
- Use short, descriptive commit messages that state the completed change.
|
||||
- Never commit `.env`, `config/local.json`, passwords, tokens, the Excel workbook or database dumps.
|
||||
- Before the first push, initialize Git if needed, configure the project remote and create an initial baseline commit from safe files only.
|
||||
- If a push fails, do not expose credentials in the terminal output or in chat; report the failure without printing secrets.
|
||||
|
||||
## Runtime
|
||||
|
||||
- Start the web app with `npm run dev`.
|
||||
- Open `http://127.0.0.1:3404/`.
|
||||
- The current server is `src/server.js`.
|
||||
- Configuration is loaded from `config/local.json`, merged over `config/local.example.json`.
|
||||
- `.env` exists for local MariaDB notes, but the application does not yet load `.env` automatically. Do not assume `.env` is active until configuration loading is explicitly wired to it.
|
||||
|
||||
## Database architecture
|
||||
|
||||
There are two selectable data sources:
|
||||
|
||||
### Live DB
|
||||
|
||||
- Uses the existing 9b-plus API endpoint configured in `config/local.json`.
|
||||
- Credentials are secret and must stay server-side.
|
||||
- Must remain read-only.
|
||||
|
||||
### Local DB
|
||||
|
||||
- MariaDB is installed locally as service `MariaDB`.
|
||||
- Host: `localhost` / `127.0.0.1`.
|
||||
- Port: `3306`.
|
||||
- Database: `9bplus`.
|
||||
- A full dump from `9bplus (1).sql.gz` was imported locally.
|
||||
- Verified local contents: about 266 tables, 74 manufacturers, 8,888 products and 48,206 product combinations.
|
||||
- The import was local only and did not contact Live DB.
|
||||
- The project currently needs to be switched to `database.driver = "mariadb"` and supplied with local credentials before the UI can read this database.
|
||||
|
||||
## Database safety behavior
|
||||
|
||||
- The UI has `Local DB` and `Live DB` settings.
|
||||
- The UI sends the selected mode using the `X-Database-Mode` request header.
|
||||
- Backend data API routes reject a Local DB request when MariaDB is not configured instead of silently using the endpoint.
|
||||
- Backend data API routes reject a Live DB request when the project is configured only for MariaDB.
|
||||
- Static HTML/CSS/JS files must remain available even when a database is not configured.
|
||||
- The top status shows the selected source, connection state, permissions and execution mode.
|
||||
|
||||
## Important current files
|
||||
|
||||
- `src/server.js`: HTTP server, API routes, mode guard and status endpoint.
|
||||
- `src/config.js`: configuration loading and database settings.
|
||||
- `src/endpoint/endpoint-client.js`: endpoint queries and MariaDB routing.
|
||||
- `src/db/mariadb-client.js`: MariaDB pool, read queries, local writes and connection test.
|
||||
- `src/services/catalog-products.js`: product, combinations, mapping, source and picture workflow.
|
||||
- `public/index.html`: compact catalog UI and settings modal.
|
||||
- `public/app.js`: UI state, API calls, Local/Live mode header, local settings and source workflow.
|
||||
- `public/styles.css`: compact modern layout.
|
||||
- `config/local.example.json`: safe configuration template.
|
||||
- `config/local.json`: local secrets and machine-specific configuration; never expose it.
|
||||
|
||||
## Current UI behavior
|
||||
|
||||
- Manufacturer and language selects load from the selected database.
|
||||
- Product data loads when manufacturer changes or navigation arrows are used.
|
||||
- `Get product info` remains a separate action.
|
||||
- EAN scan input searches on Enter.
|
||||
- `Find sources` searches once and caches candidates for the current product; a second click reopens cached results.
|
||||
- Source candidates show how they were found, including EAN/reference/name and color context.
|
||||
- Each source row has its own `Get pictures` action.
|
||||
- Product source cache is cleared when a new product loads.
|
||||
- Hudy picture parsing uses the correct product color variant, checks EANs and extracts large gallery images.
|
||||
- Idealo uses the browser adapter and is intended mainly as a picture source.
|
||||
- Image preview is square.
|
||||
- Settings is at the bottom of the left panel; database status is directly above it.
|
||||
|
||||
## Settings
|
||||
|
||||
The settings modal contains:
|
||||
|
||||
- Local DB / Live DB selection.
|
||||
- Local DB connection fields: host, port, database, user and password.
|
||||
- `Test connection`, which performs a read-only `SELECT VERSION()` against local MariaDB only.
|
||||
- Local insert/update/delete permission switches.
|
||||
- Transaction confirmation or dry-run preview mode.
|
||||
- Live DB permissions are always read-only.
|
||||
|
||||
Local UI settings are stored in browser localStorage. They are not yet a replacement for server-side `config/local.json` credentials.
|
||||
|
||||
## Next safe step
|
||||
|
||||
Wire the local connection settings into server configuration without exposing Live credentials, then set the active local database driver to MariaDB and test manufacturer loading from the imported `9bplus` database. After that, verify that switching to Live uses only read-only endpoint queries.
|
||||
|
||||
## Verification commands
|
||||
|
||||
```powershell
|
||||
node --check src/server.js
|
||||
node --check src/db/mariadb-client.js
|
||||
node --check public/app.js
|
||||
npm test
|
||||
```
|
||||
|
||||
For a local MariaDB check, use the installed client against `127.0.0.1:3306` and never the Live endpoint.
|
||||
Reference in New Issue
Block a user