Files
komp_ac/web/CHANGELOG.md
2026-08-06 17:47:53 +02:00

7.6 KiB

Changelog

All notable changes to the komp_ac web crate — the Axum SSR/HTMX web frontend for the komp_ac gRPC backend — are documented in this file.

This changelog tracks only the gRPC endpoints the web crate consumes (the browser never calls gRPC directly; Axum proxies to the backend through these clients) and the extent to which each is used by the pages that mount them. Other, non-API changes are intentionally out of scope.

The format is based on Keep a Changelog.


[Unreleased]

Added

  • TableDefinition.ListColumnTypes — called by the add-table and table-definition loaders. The whole response is consumed: name, group, declarable, compound, spelling, requires_currency, creation_only, allows_quantity_ledger and sql_type are each read by a rule that used to be hardcoded in crate::schema. The column vocabulary is now the backend's, so a type it adds is offered by both screens without a change here.

Changed

  • The column-type picker is the server's list — it no longer carries its own. Types the web crate never offered are now reachable: numeric and the ACCOUNTING_TRANSFER compound column. Server-generated companion types (phone_country, iban_bban, the transfer connectors) are listed by the endpoint but never offered, and are refused if one is posted anyway.
  • Creation-only types are refused on the append panel by rule, not by namePOST /admin/table-definition/columns used to exclude accounting alone; it now excludes every type the response marks creation_only, which is what AddTableColumns rejects.
  • Compound columns are staged as the backend expands them — a compound column takes its type's name, cannot be indexed, and is not offered as a row display column, since no column of that name survives the expansion.
  • Currency and quantity-ledger rules come from the responserequires_currency decides which types carry a currency (previously MONEY and ACCOUNTING by name), and allows_quantity_ledger both validates the choice and writes the hint under the input.
  • GetProfileDetails columns show the SQL type behind them — the workspace's column list renders sql_type from the catalog beside each logical type, including for the companion columns the backend generates.

[v0.8.38] — 2026-08-05

The web crate wires up seven gRPC services and calls the following endpoints. Coverage notes describe which pages exercise each call and how deeply its response is consumed.

Auth (AuthServiceClient)

  • AuthService.Login — called by POST /login. Exchanges identifier and password for an access token; the token and expires_in are written into the analytics_token HTTP-only cookie that every subsequent gRPC call is signed with. Fully covered end-to-end.
  • AuthService.Register — called by POST /register. Submits the full RegisterRequest surface (username, email, password, password_confirmation, role, timezone, phone_country). Only the success/error message is shown; it does not create a session.
  • AuthService.GetAuthorization — called by every admin page loader (/admin, table-definition, add-table, add-logic, add-validation, import/export). Returns the caller's role; the web crate uses it for two things: gating the admin panel to role == "admin" and rendering the navbar with the current role. Response fields beyond role are not used.

Table definition (TableDefinitionClient)

  • TableDefinition.GetProfileTree — called by the analytics, admin, table definition, add-table, add-logic, and add-validation loaders. Populates the profile selectors (profile name + table count) and, in the admin panel, the per-profile table list including depends_on and row_display_columns. Response is consumed fairly deeply.
  • TableDefinition.PostTableDefinition — called by POST /admin/tables (add-table page). Creates a table from the draft; the returned success, sql, and message are surfaced. Full form → endpoint mapping.
  • TableDefinition.GetProfileDetails — called by the table-definition workspace loader. Returns per-table columns (name, type, currency, quantity-ledger, rounding, generated/read-only behaviors and generated_from for Steel scripts), scripts (target column/type/description/source), row display columns, and table kind. The most deeply consumed definition endpoint.
  • TableDefinition.GetColumnAliasRenameHistory — called by the table-definition workspace loader. Returns rename history entries (table, old/new column names, timestamp); only those four fields are rendered.
  • TableDefinition.AddTableColumns — called by POST /admin/table-definition/columns. Adds columns to an existing table.
  • TableDefinition.RenameColumnAlias — called by POST /admin/table-definition/rename. Renames a table column alias.
  • TableDefinition.DeleteTable — called by POST /admin/table-definition/delete. Deletes a table definition.
  • TableDefinition.CopyProfile — called by POST /admin/table-definition/copy. Copies a profile.
  • TableDefinition.CreateInvoiceTemplateTable — called by POST /admin/table-definition/invoice-template. Creates a table from the invoice template contract.

Table script (TableScriptClient)

  • TableScript.PostTableScript — called by POST /admin/logic (add-logic page). Creates a Steel table script; the returned id and warnings are surfaced to the user.

Table validation (TableValidationServiceClient)

  • TableValidationService.UpdateFieldValidation — called by POST /admin/validation. Creates/updates a field validation.
  • TableValidationService.UpsertValidationRule — called by POST /admin/validation/rules. Creates/updates a reusable validation rule.
  • TableValidationService.ApplyValidationSet — called by POST /admin/validation/sets. Applies a validation set.
  • TableValidationService.UpsertValidationSet — called by POST /admin/validation/sets. Creates/updates a reusable validation set.

Each validation POST maps the submitted form into the corresponding request and renders only the returned success/message.

Table structure (TableStructureServiceClient)

  • TableStructureService.GetTableStructure — called by the admin panel, CSV import, and CSV export. Returns table structures used three ways: the admin column browse (name, type, nullable, primary key, quantity-ledger), import header validation, and export column ordering. Only the structure for the selected/imported/exported tables is requested at a time.

Tables data (TablesDataClient)

  • TablesData.PostTableDataBulk — called by POST /admin/import. Chunked bulk insert of parsed CSV rows into a table, with per-chunk requests.
  • TablesData.GetTableDataByPosition — called by POST /admin/export.csv. Reads table rows by position for CSV download, one request per table.

Analytics (AnalyticsServiceClient)

  • AnalyticsService.GetAnalyticsCatalog — called by POST /api/catalog. Returns the live public analytics catalog for a profile (tables, columns, types, links); rendered in the sidebar and used to generate starter queries and LLM schema context.
  • AnalyticsService.ExecuteAnalyticsQuery — called by POST /api/query. Runs a read-only analytics SQL query; the result columns/rows feed the ECharts charts and table view.
  • The analytics profile selector is fed by TableDefinition.GetProfileTree (see above), not by a dedicated analytics profile endpoint.