140 lines
3.9 KiB
Markdown
140 lines
3.9 KiB
Markdown
# libdashstore
|
|
|
|
MSSQL schema + domain API for Dash. One class, methods mirror the file path under `src/store/`.
|
|
|
|
```js
|
|
import sql from 'mssql';
|
|
import LibDashStore from 'libdashstore';
|
|
|
|
const pool = await sql.connect({ /* … */ });
|
|
const client = await new LibDashStore(pool); // runs initialize() (ensure schema, no purge)
|
|
```
|
|
|
|
SQL lives in `src/sql/<table>.js`. Schema DDL: `src/schema.js` / `import 'libdashstore/schema'`.
|
|
|
|
ID fields in the JS API use camelCase `…Id` (DB columns stay snake_case).
|
|
|
|
---
|
|
|
|
## Schema
|
|
|
|
| Method | Description |
|
|
| --- | --- |
|
|
| `initialize()` | Runs all `SCHEMA_SCRIPTS` (`IF NOT EXISTS`). Does **not** purge. |
|
|
| `purge()` | Drops all known tables + number procedure. |
|
|
|
|
---
|
|
|
|
## `company`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `create` | `({ iso639, name, taxrate, reducedtaxrate })` | `{ id, rootCategoryId, languageId, taxrateId, reducedtaxrateId, taxfreerateId }` |
|
|
| `update` | `(id, { iso639, name, taxrate, reducedtaxrate })` | `{ id, rootCategoryId, languageId, taxrateId, reducedtaxrateId, taxfreerateId }` |
|
|
| `delete` | `(companyId)` | `void` |
|
|
| `list` | `()` | `{ id, rootCategoryId, languageId, taxrateId, reducedtaxrateId, taxfreerateId }[]` |
|
|
|
|
### `create` (transaction)
|
|
|
|
For `POST /api/company`:
|
|
|
|
1. Fails if `name` is taken (`Company name not available`)
|
|
2. Ensures language by `iso639` (get or create)
|
|
3. Ensures tax rows for `taxrate`, `reducedtaxrate`, and `0` → `taxfreerateId`
|
|
4. Creates root category (`parentId = null`)
|
|
5. Inserts company with all FKs set
|
|
|
|
### `update` (transaction)
|
|
|
|
For `PATCH /api/company/:id`:
|
|
|
|
1. Fails if company missing / name taken by another company
|
|
2. Ensures lang + tax rates
|
|
3. Updates `name`, `default_language_id`, `taxrate`, `reducedtaxrate`
|
|
(`taxfreerateId` / root category unchanged)
|
|
|
|
---
|
|
|
|
## `google_auth`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `add` | `(email)` | `id` |
|
|
| `getByEmail` | `(email)` | `{ id, email, createdAt, selectedCompanyId } \| undefined` |
|
|
| `listAllowedEmails` | `()` | `{ id, email, createdAt, selectedCompanyId }[]` |
|
|
| `removeAllowedEmail` | `(email)` | `void` |
|
|
| `setSelectedCompany` | `(authId, companyId)` | `void` |
|
|
|
|
Backend mapping:
|
|
|
|
- Login: `getByEmail(email)`
|
|
- CLI user manager: `listAllowedEmails()` / `removeAllowedEmail(email)` / `add(email)`
|
|
- `PUT /api/auth/selected-company`: `setSelectedCompany(authId, companyId)`
|
|
|
|
---
|
|
|
|
## `companyuser`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `add` | `(companyId, authId)` | `id` |
|
|
| `getByEmail` | `(email)` | `id[]` |
|
|
| `delete` | `(id)` | `void` |
|
|
|
|
---
|
|
|
|
## `lang`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `create` | `(iso639)` | `id` |
|
|
| `getByIso639` | `(iso639)` | `{ id, iso639 } \| undefined` |
|
|
| `ensure` | `(iso639, tx?)` | `id` |
|
|
| `list` | `()` | `{ id, iso639 }[]` |
|
|
| `delete` | `(id)` | `void` |
|
|
|
|
---
|
|
|
|
## `tax`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `create` | `(rate)` | `id` |
|
|
| `getByRate` | `(rate)` | `{ id, rate } \| undefined` |
|
|
| `ensure` | `(rate, tx?)` | `id` |
|
|
| `list` | `()` | `{ id, rate }[]` |
|
|
|
|
---
|
|
|
|
## `category`
|
|
|
|
| Method | Signature | Returns |
|
|
| --- | --- | --- |
|
|
| `create` | `({ parentId, sort })` | `id` |
|
|
| `updateParentId` | `(id, parentId)` | `void` |
|
|
| `delete` | `(id)` | `void` |
|
|
| `getTree` | `(rootId)` | `{ id, parentId, sort }[]` |
|
|
|
|
---
|
|
|
|
## Backend route cheatsheet
|
|
|
|
| Route | Store call |
|
|
| --- | --- |
|
|
| `POST /api/company` | `company.create({ iso639, name, taxrate, reducedtaxrate })` |
|
|
| `PATCH /api/company/:id` | `company.update(id, { iso639, name, taxrate, reducedtaxrate })` |
|
|
| `DELETE /api/company/:id` | `company.delete(id)` |
|
|
| `PUT /api/auth/selected-company` | `google_auth.setSelectedCompany(authId, companyId)` |
|
|
|
|
---
|
|
|
|
## Scripts
|
|
|
|
```bash
|
|
npm run init-schema # apply SCHEMA_SCRIPTS via .env
|
|
npm run test:api # interactive API tester
|
|
npm run schema-graph # regenerate schema-graph.svg
|
|
```
|
|
|
|
Env: `MSSQL_SERVER`, `MSSQL_DATABASE`, `MSSQL_USER`, `MSSQL_PASSWORD`.
|