@tailor-platform/erp-kit 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +35 -7
- package/dist/cli.mjs +779 -268
- package/package.json +5 -4
- package/skills/erp-kit-app-1-requirements/SKILL.md +8 -9
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +4 -0
- package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +4 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +27 -27
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +21 -17
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +15 -1
- package/skills/erp-kit-app-3-plan/references/story-extraction.md +8 -2
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +9 -11
- package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -22
- package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +0 -1
- package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +13 -4
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +5 -0
- package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
- package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -11
- package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +16 -17
- package/skills/erp-kit-module-1-requirements/SKILL.md +6 -12
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +21 -5
- package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +19 -0
- package/skills/erp-kit-module-3-plan/SKILL.md +2 -4
- package/skills/erp-kit-module-4-plan-review/SKILL.md +21 -5
- package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +15 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +21 -7
- package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +15 -0
- package/skills/erp-kit-module-shared/SKILL.md +4 -0
- package/src/commands/app/index.ts +28 -17
- package/src/commands/check.test.ts +1 -1
- package/src/commands/check.ts +2 -35
- package/src/commands/doc/index.ts +83 -0
- package/src/commands/doc/module.test.ts +119 -0
- package/src/commands/doc/module.ts +114 -0
- package/src/commands/doc/modules.test.ts +103 -0
- package/src/commands/doc/modules.ts +98 -0
- package/src/commands/doc/search.test.ts +94 -0
- package/src/commands/doc/search.ts +111 -0
- package/src/commands/generate-doc.ts +17 -10
- package/src/commands/index.ts +20 -8
- package/src/commands/lib/command-result.ts +30 -0
- package/src/commands/lib/discovery.test.ts +74 -0
- package/src/commands/lib/discovery.ts +106 -0
- package/src/commands/lib/paths.ts +22 -0
- package/src/commands/lib/sync-check-source.test.ts +197 -0
- package/src/commands/lib/sync-check-source.ts +100 -0
- package/src/commands/lib/sync-check-tests.test.ts +178 -0
- package/src/commands/lib/sync-check-tests.ts +69 -0
- package/src/commands/mock/index.ts +11 -6
- package/src/commands/module/generate.ts +13 -8
- package/src/commands/module/index.ts +17 -21
- package/src/commands/parse-doc-test-cases.ts +13 -2
- package/src/commands/sync-check.test.ts +6 -364
- package/src/commands/sync-check.ts +7 -251
- package/src/generator/generate-app-code.test.ts +121 -0
- package/src/generator/generate-app-code.ts +51 -0
- package/src/generator/generate-code-boilerplate.test.ts +1 -1
- package/src/generator/generate-code.test.ts +33 -6
- package/src/generator/generate-code.ts +12 -226
- package/src/generator/generate-errors.ts +34 -0
- package/src/generator/generate-permissions.ts +12 -0
- package/src/generator/generate-shells.ts +28 -0
- package/src/generator/generate-stubs.ts +31 -0
- package/src/generator/parse-resolver-doc.test.ts +89 -0
- package/src/generator/parse-resolver-doc.ts +125 -0
- package/src/generator/scaffold.ts +57 -0
- package/src/generator/stub-templates.test.ts +55 -0
- package/src/generator/stub-templates.ts +145 -0
- package/src/modules/audit/README.md +46 -0
- package/src/modules/audit/command/activateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/activateAuditPolicy.test.ts +186 -0
- package/src/modules/audit/command/activateAuditPolicy.ts +97 -0
- package/src/modules/audit/command/createAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/createAuditPolicy.test.ts +395 -0
- package/src/modules/audit/command/createAuditPolicy.ts +131 -0
- package/src/modules/audit/command/deactivateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/deactivateAuditPolicy.test.ts +138 -0
- package/src/modules/audit/command/deactivateAuditPolicy.ts +58 -0
- package/src/modules/audit/command/deleteAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/deleteAuditPolicy.test.ts +121 -0
- package/src/modules/audit/command/deleteAuditPolicy.ts +52 -0
- package/src/modules/audit/command/logAuditEvent.generated.ts +6 -0
- package/src/modules/audit/command/logAuditEvent.test.ts +991 -0
- package/src/modules/audit/command/logAuditEvent.ts +357 -0
- package/src/modules/audit/command/reactivateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/reactivateAuditPolicy.test.ts +143 -0
- package/src/modules/audit/command/reactivateAuditPolicy.ts +79 -0
- package/src/modules/audit/command/registerAuditableEntity.generated.ts +6 -0
- package/src/modules/audit/command/registerAuditableEntity.test.ts +268 -0
- package/src/modules/audit/command/registerAuditableEntity.ts +94 -0
- package/src/modules/audit/command/replaceAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/replaceAuditPolicy.test.ts +242 -0
- package/src/modules/audit/command/replaceAuditPolicy.ts +91 -0
- package/src/modules/audit/command/updateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/updateAuditPolicy.test.ts +284 -0
- package/src/modules/audit/command/updateAuditPolicy.ts +151 -0
- package/src/modules/audit/db/auditEntry.ts +47 -0
- package/src/modules/audit/db/auditPolicy.ts +33 -0
- package/src/modules/audit/db/auditableEntity.ts +22 -0
- package/src/modules/audit/db/changeDetail.ts +28 -0
- package/src/modules/audit/db/policyFieldRule.ts +23 -0
- package/src/modules/audit/docs/commands/ActivateAuditPolicy.md +69 -0
- package/src/modules/audit/docs/commands/CreateAuditPolicy.md +79 -0
- package/src/modules/audit/docs/commands/DeactivateAuditPolicy.md +55 -0
- package/src/modules/audit/docs/commands/DeleteAuditPolicy.md +55 -0
- package/src/modules/audit/docs/commands/LogAuditEvent.md +137 -0
- package/src/modules/audit/docs/commands/ReactivateAuditPolicy.md +58 -0
- package/src/modules/audit/docs/commands/RegisterAuditableEntity.md +62 -0
- package/src/modules/audit/docs/commands/ReplaceAuditPolicy.md +72 -0
- package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +77 -0
- package/src/modules/audit/docs/features/audit-event-logging.md +126 -0
- package/src/modules/audit/docs/features/audit-policy-configuration.md +135 -0
- package/src/modules/audit/docs/features/field-level-change-tracking.md +95 -0
- package/src/modules/audit/docs/models/AuditEntry.md +55 -0
- package/src/modules/audit/docs/models/AuditPolicy.md +79 -0
- package/src/modules/audit/docs/models/AuditableEntity.md +38 -0
- package/src/modules/audit/docs/models/ChangeDetail.md +55 -0
- package/src/modules/audit/docs/models/PolicyFieldRule.md +45 -0
- package/src/modules/audit/docs/queries/GetAuditEntry.md +49 -0
- package/src/modules/audit/docs/queries/GetAuditPolicy.md +54 -0
- package/src/modules/audit/docs/queries/GetAuditSummary.md +84 -0
- package/src/modules/audit/docs/queries/GetChangeDetails.md +56 -0
- package/src/modules/audit/docs/queries/ListAuditPolicies.md +58 -0
- package/src/modules/audit/docs/queries/SearchAuditEntries.md +91 -0
- package/src/modules/audit/generated/kysely-tailordb.ts +92 -0
- package/src/modules/audit/index.ts +2 -0
- package/src/modules/audit/lib/_db_deps.ts +13 -0
- package/src/modules/audit/lib/errors.generated.ts +120 -0
- package/src/modules/audit/lib/permissions.generated.ts +14 -0
- package/src/modules/audit/lib/types.ts +28 -0
- package/src/modules/audit/module.ts +57 -0
- package/src/modules/audit/permissions.ts +39 -0
- package/src/modules/audit/query/getAuditEntry.generated.ts +5 -0
- package/src/modules/audit/query/getAuditEntry.test.ts +123 -0
- package/src/modules/audit/query/getAuditEntry.ts +36 -0
- package/src/modules/audit/query/getAuditPolicy.generated.ts +5 -0
- package/src/modules/audit/query/getAuditPolicy.test.ts +169 -0
- package/src/modules/audit/query/getAuditPolicy.ts +42 -0
- package/src/modules/audit/query/getAuditSummary.generated.ts +5 -0
- package/src/modules/audit/query/getAuditSummary.test.ts +632 -0
- package/src/modules/audit/query/getAuditSummary.ts +164 -0
- package/src/modules/audit/query/getChangeDetails.generated.ts +5 -0
- package/src/modules/audit/query/getChangeDetails.test.ts +195 -0
- package/src/modules/audit/query/getChangeDetails.ts +42 -0
- package/src/modules/audit/query/listAuditPolicies.generated.ts +5 -0
- package/src/modules/audit/query/listAuditPolicies.test.ts +239 -0
- package/src/modules/audit/query/listAuditPolicies.ts +100 -0
- package/src/modules/audit/query/searchAuditEntries.generated.ts +5 -0
- package/src/modules/audit/query/searchAuditEntries.test.ts +424 -0
- package/src/modules/audit/query/searchAuditEntries.ts +121 -0
- package/src/modules/audit/tailor.config.ts +13 -0
- package/src/modules/audit/tailor.d.ts +13 -0
- package/src/modules/audit/testing/fixtures.ts +215 -0
- package/src/modules/business-partner/README.md +60 -0
- package/src/modules/business-partner/command/.gitkeep +0 -0
- package/src/modules/business-partner/command/activatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/activatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/activatePartner.ts +45 -0
- package/src/modules/business-partner/command/assignRoleToPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/assignRoleToPartner.test.ts +113 -0
- package/src/modules/business-partner/command/assignRoleToPartner.ts +72 -0
- package/src/modules/business-partner/command/createContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/createContactPerson.test.ts +193 -0
- package/src/modules/business-partner/command/createContactPerson.ts +98 -0
- package/src/modules/business-partner/command/createPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartner.test.ts +179 -0
- package/src/modules/business-partner/command/createPartner.ts +83 -0
- package/src/modules/business-partner/command/createPartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerAddress.test.ts +195 -0
- package/src/modules/business-partner/command/createPartnerAddress.ts +119 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +297 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.ts +114 -0
- package/src/modules/business-partner/command/createPartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerIdentification.test.ts +255 -0
- package/src/modules/business-partner/command/createPartnerIdentification.ts +97 -0
- package/src/modules/business-partner/command/deactivateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/deactivateContactPerson.test.ts +70 -0
- package/src/modules/business-partner/command/deactivateContactPerson.ts +54 -0
- package/src/modules/business-partner/command/deactivatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/deactivatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/deactivatePartner.ts +46 -0
- package/src/modules/business-partner/command/deleteContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/deleteContactPerson.test.ts +61 -0
- package/src/modules/business-partner/command/deleteContactPerson.ts +48 -0
- package/src/modules/business-partner/command/deletePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartner.test.ts +58 -0
- package/src/modules/business-partner/command/deletePartner.ts +46 -0
- package/src/modules/business-partner/command/deletePartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerAddress.test.ts +74 -0
- package/src/modules/business-partner/command/deletePartnerAddress.ts +52 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.test.ts +55 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.ts +36 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.test.ts +47 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.ts +37 -0
- package/src/modules/business-partner/command/reactivateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/reactivateContactPerson.test.ts +48 -0
- package/src/modules/business-partner/command/reactivateContactPerson.ts +48 -0
- package/src/modules/business-partner/command/reactivatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/reactivatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/reactivatePartner.ts +46 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.test.ts +82 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.ts +73 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.test.ts +60 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.ts +48 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.test.ts +56 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.ts +51 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.test.ts +63 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.ts +55 -0
- package/src/modules/business-partner/command/updateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/updateContactPerson.test.ts +193 -0
- package/src/modules/business-partner/command/updateContactPerson.ts +92 -0
- package/src/modules/business-partner/command/updatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartner.test.ts +101 -0
- package/src/modules/business-partner/command/updatePartner.ts +76 -0
- package/src/modules/business-partner/command/updatePartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerAddress.test.ts +148 -0
- package/src/modules/business-partner/command/updatePartnerAddress.ts +64 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.test.ts +249 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.ts +109 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.test.ts +162 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.ts +105 -0
- package/src/modules/business-partner/db/.gitkeep +0 -0
- package/src/modules/business-partner/db/businessPartner.ts +59 -0
- package/src/modules/business-partner/db/contactPerson.ts +49 -0
- package/src/modules/business-partner/db/partnerAddress.ts +45 -0
- package/src/modules/business-partner/db/partnerBankAccount.ts +53 -0
- package/src/modules/business-partner/db/partnerIdentification.ts +53 -0
- package/src/modules/business-partner/db/partnerRole.ts +43 -0
- package/src/modules/business-partner/docs/commands/ActivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/AssignRoleToPartner.md +49 -0
- package/src/modules/business-partner/docs/commands/CreateContactPerson.md +59 -0
- package/src/modules/business-partner/docs/commands/CreatePartner.md +54 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerAddress.md +60 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerBankAccount.md +68 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerIdentification.md +59 -0
- package/src/modules/business-partner/docs/commands/DeactivateContactPerson.md +42 -0
- package/src/modules/business-partner/docs/commands/DeactivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/DeleteContactPerson.md +43 -0
- package/src/modules/business-partner/docs/commands/DeletePartner.md +40 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerAddress.md +40 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerBankAccount.md +35 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerIdentification.md +33 -0
- package/src/modules/business-partner/docs/commands/ReactivateContactPerson.md +38 -0
- package/src/modules/business-partner/docs/commands/ReactivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/RemoveRoleFromPartner.md +46 -0
- package/src/modules/business-partner/docs/commands/SetDefaultPartnerAddress.md +38 -0
- package/src/modules/business-partner/docs/commands/SetDefaultPartnerBankAccount.md +38 -0
- package/src/modules/business-partner/docs/commands/SetPrimaryContactPerson.md +43 -0
- package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +66 -0
- package/src/modules/business-partner/docs/commands/UpdatePartner.md +48 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +46 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerBankAccount.md +64 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +52 -0
- package/src/modules/business-partner/docs/features/contact-person-management.md +70 -0
- package/src/modules/business-partner/docs/features/partner-address-management.md +96 -0
- package/src/modules/business-partner/docs/features/partner-bank-account.md +70 -0
- package/src/modules/business-partner/docs/features/partner-identification.md +76 -0
- package/src/modules/business-partner/docs/features/partner-lifecycle.md +59 -0
- package/src/modules/business-partner/docs/features/partner-role-classification.md +73 -0
- package/src/modules/business-partner/docs/models/BusinessPartner.md +64 -0
- package/src/modules/business-partner/docs/models/ContactPerson.md +62 -0
- package/src/modules/business-partner/docs/models/PartnerAddress.md +52 -0
- package/src/modules/business-partner/docs/models/PartnerBankAccount.md +50 -0
- package/src/modules/business-partner/docs/models/PartnerIdentification.md +46 -0
- package/src/modules/business-partner/docs/models/PartnerRole.md +42 -0
- package/src/modules/business-partner/docs/queries/GetContactPerson.md +34 -0
- package/src/modules/business-partner/docs/queries/GetDefaultPartnerAddress.md +40 -0
- package/src/modules/business-partner/docs/queries/GetDefaultPartnerBankAccount.md +36 -0
- package/src/modules/business-partner/docs/queries/GetPartner.md +35 -0
- package/src/modules/business-partner/docs/queries/GetPartnerAddress.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerBankAccount.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerIdentification.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerRole.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPrimaryContactPerson.md +36 -0
- package/src/modules/business-partner/docs/queries/ListContactPersonsByPartner.md +39 -0
- package/src/modules/business-partner/docs/queries/ListPartnerAddressesByPartner.md +41 -0
- package/src/modules/business-partner/docs/queries/ListPartnerBankAccountsByPartner.md +39 -0
- package/src/modules/business-partner/docs/queries/ListPartnerIdentificationsByPartner.md +41 -0
- package/src/modules/business-partner/docs/queries/ListPartnersByRole.md +47 -0
- package/src/modules/business-partner/executor/.gitkeep +0 -0
- package/src/modules/business-partner/generated/.gitkeep +0 -0
- package/src/modules/business-partner/generated/enums.ts +60 -0
- package/src/modules/business-partner/generated/kysely-tailordb.ts +114 -0
- package/src/modules/business-partner/index.ts +2 -0
- package/src/modules/business-partner/lib/_db_deps.ts +17 -0
- package/src/modules/business-partner/lib/errors.generated.ts +172 -0
- package/src/modules/business-partner/lib/errors.ts +2 -0
- package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
- package/src/modules/business-partner/lib/types.ts +53 -0
- package/src/modules/business-partner/module.ts +181 -0
- package/src/modules/business-partner/permissions.ts +3 -0
- package/src/modules/business-partner/query/.gitkeep +0 -0
- package/src/modules/business-partner/query/getContactPerson.generated.ts +5 -0
- package/src/modules/business-partner/query/getContactPerson.test.ts +31 -0
- package/src/modules/business-partner/query/getContactPerson.ts +16 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.generated.ts +5 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.test.ts +45 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.ts +30 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.generated.ts +5 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.test.ts +43 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.ts +17 -0
- package/src/modules/business-partner/query/getPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartner.test.ts +31 -0
- package/src/modules/business-partner/query/getPartner.ts +16 -0
- package/src/modules/business-partner/query/getPartnerAddress.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerAddress.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerAddress.ts +16 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.ts +16 -0
- package/src/modules/business-partner/query/getPartnerIdentification.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerIdentification.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerIdentification.ts +16 -0
- package/src/modules/business-partner/query/getPartnerRole.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerRole.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerRole.ts +19 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.generated.ts +5 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.test.ts +43 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.ts +17 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.test.ts +77 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.ts +32 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.test.ts +71 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.ts +37 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.test.ts +59 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.ts +32 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.test.ts +72 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.ts +40 -0
- package/src/modules/business-partner/query/listPartnersByRole.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnersByRole.test.ts +103 -0
- package/src/modules/business-partner/query/listPartnersByRole.ts +47 -0
- package/src/modules/business-partner/tailor.config.ts +13 -0
- package/src/modules/business-partner/tailor.d.ts +13 -0
- package/src/modules/business-partner/testing/fixtures.ts +204 -0
- package/src/modules/coa-management/README.md +61 -0
- package/src/modules/coa-management/command/.gitkeep +0 -0
- package/src/modules/coa-management/command/activateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/activateAccount.test.ts +125 -0
- package/src/modules/coa-management/command/activateAccount.ts +105 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +113 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.ts +104 -0
- package/src/modules/coa-management/command/createAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/createAccount.test.ts +767 -0
- package/src/modules/coa-management/command/createAccount.ts +247 -0
- package/src/modules/coa-management/command/createAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/createAccountGroup.test.ts +494 -0
- package/src/modules/coa-management/command/createAccountGroup.ts +207 -0
- package/src/modules/coa-management/command/createChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/createChartOfAccounts.test.ts +502 -0
- package/src/modules/coa-management/command/createChartOfAccounts.ts +267 -0
- package/src/modules/coa-management/command/deactivateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/deactivateAccount.test.ts +199 -0
- package/src/modules/coa-management/command/deactivateAccount.ts +142 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +91 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +88 -0
- package/src/modules/coa-management/command/deleteAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteAccount.test.ts +122 -0
- package/src/modules/coa-management/command/deleteAccount.ts +103 -0
- package/src/modules/coa-management/command/deleteAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteAccountGroup.test.ts +120 -0
- package/src/modules/coa-management/command/deleteAccountGroup.ts +113 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +154 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.ts +133 -0
- package/src/modules/coa-management/command/moveAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/moveAccountGroup.test.ts +199 -0
- package/src/modules/coa-management/command/moveAccountGroup.ts +145 -0
- package/src/modules/coa-management/command/reactivateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/reactivateAccount.test.ts +126 -0
- package/src/modules/coa-management/command/reactivateAccount.ts +123 -0
- package/src/modules/coa-management/command/updateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/updateAccount.test.ts +669 -0
- package/src/modules/coa-management/command/updateAccount.ts +370 -0
- package/src/modules/coa-management/command/updateAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/updateAccountGroup.test.ts +253 -0
- package/src/modules/coa-management/command/updateAccountGroup.ts +191 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +153 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.ts +133 -0
- package/src/modules/coa-management/db/.gitkeep +0 -0
- package/src/modules/coa-management/db/account.ts +119 -0
- package/src/modules/coa-management/db/accountGroup.ts +57 -0
- package/src/modules/coa-management/db/chartOfAccounts.ts +55 -0
- package/src/modules/coa-management/docs/commands/ActivateAccount.md +49 -0
- package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +47 -0
- package/src/modules/coa-management/docs/commands/CreateAccount.md +94 -0
- package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +70 -0
- package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +72 -0
- package/src/modules/coa-management/docs/commands/DeactivateAccount.md +65 -0
- package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +44 -0
- package/src/modules/coa-management/docs/commands/DeleteAccount.md +52 -0
- package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +50 -0
- package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +48 -0
- package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +57 -0
- package/src/modules/coa-management/docs/commands/ReactivateAccount.md +50 -0
- package/src/modules/coa-management/docs/commands/UpdateAccount.md +102 -0
- package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +62 -0
- package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +49 -0
- package/src/modules/coa-management/docs/features/account-group-hierarchy.md +81 -0
- package/src/modules/coa-management/docs/features/account-lifecycle.md +80 -0
- package/src/modules/coa-management/docs/features/account-management.md +114 -0
- package/src/modules/coa-management/docs/features/chart-of-accounts-setup.md +86 -0
- package/src/modules/coa-management/docs/models/Account.md +84 -0
- package/src/modules/coa-management/docs/models/AccountGroup.md +55 -0
- package/src/modules/coa-management/docs/models/ChartOfAccounts.md +65 -0
- package/src/modules/coa-management/docs/queries/DetectCircularReference.md +52 -0
- package/src/modules/coa-management/docs/queries/GetAccount.md +42 -0
- package/src/modules/coa-management/docs/queries/GetAccountGroup.md +42 -0
- package/src/modules/coa-management/docs/queries/GetChartOfAccounts.md +48 -0
- package/src/modules/coa-management/docs/queries/ListAccountGroups.md +42 -0
- package/src/modules/coa-management/docs/queries/ListAccounts.md +54 -0
- package/src/modules/coa-management/docs/queries/ListUnassignedAccounts.md +40 -0
- package/src/modules/coa-management/executor/.gitkeep +0 -0
- package/src/modules/coa-management/generated/.gitkeep +0 -0
- package/src/modules/coa-management/generated/enums.ts +45 -0
- package/src/modules/coa-management/generated/kysely-tailordb.ts +81 -0
- package/src/modules/coa-management/index.ts +2 -0
- package/src/modules/coa-management/lib/_db_deps.ts +17 -0
- package/src/modules/coa-management/lib/errors.generated.ts +162 -0
- package/src/modules/coa-management/lib/errors.ts +0 -0
- package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
- package/src/modules/coa-management/lib/types.ts +22 -0
- package/src/modules/coa-management/module.ts +136 -0
- package/src/modules/coa-management/permissions.ts +3 -0
- package/src/modules/coa-management/query/.gitkeep +0 -0
- package/src/modules/coa-management/query/detectCircularReference.generated.ts +5 -0
- package/src/modules/coa-management/query/detectCircularReference.test.ts +88 -0
- package/src/modules/coa-management/query/detectCircularReference.ts +46 -0
- package/src/modules/coa-management/query/getAccount.generated.ts +5 -0
- package/src/modules/coa-management/query/getAccount.test.ts +55 -0
- package/src/modules/coa-management/query/getAccount.ts +25 -0
- package/src/modules/coa-management/query/getAccountGroup.generated.ts +5 -0
- package/src/modules/coa-management/query/getAccountGroup.test.ts +55 -0
- package/src/modules/coa-management/query/getAccountGroup.ts +25 -0
- package/src/modules/coa-management/query/getChartOfAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/getChartOfAccounts.test.ts +79 -0
- package/src/modules/coa-management/query/getChartOfAccounts.ts +28 -0
- package/src/modules/coa-management/query/listAccountGroups.generated.ts +5 -0
- package/src/modules/coa-management/query/listAccountGroups.test.ts +72 -0
- package/src/modules/coa-management/query/listAccountGroups.ts +49 -0
- package/src/modules/coa-management/query/listAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/listAccounts.test.ts +136 -0
- package/src/modules/coa-management/query/listAccounts.ts +82 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.test.ts +96 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.ts +39 -0
- package/src/modules/coa-management/tailor.config.ts +13 -0
- package/src/modules/coa-management/tailor.d.ts +13 -0
- package/src/modules/coa-management/testing/fixtures.ts +201 -0
- package/src/modules/item-management/README.md +1 -1
- package/src/modules/organization/README.md +57 -0
- package/src/modules/organization/command/.gitkeep +0 -0
- package/src/modules/organization/command/activateCompany.generated.ts +6 -0
- package/src/modules/organization/command/activateCompany.test.ts +184 -0
- package/src/modules/organization/command/activateCompany.ts +92 -0
- package/src/modules/organization/command/createCompany.generated.ts +6 -0
- package/src/modules/organization/command/createCompany.test.ts +156 -0
- package/src/modules/organization/command/createCompany.ts +80 -0
- package/src/modules/organization/command/createDepartment.generated.ts +6 -0
- package/src/modules/organization/command/createDepartment.test.ts +239 -0
- package/src/modules/organization/command/createDepartment.ts +98 -0
- package/src/modules/organization/command/createSite.generated.ts +6 -0
- package/src/modules/organization/command/createSite.test.ts +262 -0
- package/src/modules/organization/command/createSite.ts +155 -0
- package/src/modules/organization/command/deactivateCompany.generated.ts +6 -0
- package/src/modules/organization/command/deactivateCompany.test.ts +58 -0
- package/src/modules/organization/command/deactivateCompany.ts +47 -0
- package/src/modules/organization/command/deactivateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/deactivateDepartment.test.ts +115 -0
- package/src/modules/organization/command/deactivateDepartment.ts +63 -0
- package/src/modules/organization/command/deactivateSite.generated.ts +6 -0
- package/src/modules/organization/command/deactivateSite.test.ts +53 -0
- package/src/modules/organization/command/deactivateSite.ts +47 -0
- package/src/modules/organization/command/deleteCompany.generated.ts +6 -0
- package/src/modules/organization/command/deleteCompany.test.ts +99 -0
- package/src/modules/organization/command/deleteCompany.ts +66 -0
- package/src/modules/organization/command/reactivateCompany.generated.ts +6 -0
- package/src/modules/organization/command/reactivateCompany.test.ts +58 -0
- package/src/modules/organization/command/reactivateCompany.ts +47 -0
- package/src/modules/organization/command/reactivateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/reactivateDepartment.test.ts +59 -0
- package/src/modules/organization/command/reactivateDepartment.ts +47 -0
- package/src/modules/organization/command/reactivateSite.generated.ts +6 -0
- package/src/modules/organization/command/reactivateSite.test.ts +53 -0
- package/src/modules/organization/command/reactivateSite.ts +47 -0
- package/src/modules/organization/command/updateCompany.generated.ts +6 -0
- package/src/modules/organization/command/updateCompany.test.ts +239 -0
- package/src/modules/organization/command/updateCompany.ts +127 -0
- package/src/modules/organization/command/updateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/updateDepartment.test.ts +232 -0
- package/src/modules/organization/command/updateDepartment.ts +120 -0
- package/src/modules/organization/command/updateSite.generated.ts +6 -0
- package/src/modules/organization/command/updateSite.test.ts +274 -0
- package/src/modules/organization/command/updateSite.ts +176 -0
- package/src/modules/organization/db/.gitkeep +0 -0
- package/src/modules/organization/db/company.ts +44 -0
- package/src/modules/organization/db/department.ts +46 -0
- package/src/modules/organization/db/site.ts +44 -0
- package/src/modules/organization/docs/commands/ActivateCompany.md +62 -0
- package/src/modules/organization/docs/commands/CreateCompany.md +49 -0
- package/src/modules/organization/docs/commands/CreateDepartment.md +62 -0
- package/src/modules/organization/docs/commands/CreateSite.md +74 -0
- package/src/modules/organization/docs/commands/DeactivateCompany.md +40 -0
- package/src/modules/organization/docs/commands/DeactivateDepartment.md +44 -0
- package/src/modules/organization/docs/commands/DeactivateSite.md +38 -0
- package/src/modules/organization/docs/commands/DeleteCompany.md +50 -0
- package/src/modules/organization/docs/commands/ReactivateCompany.md +39 -0
- package/src/modules/organization/docs/commands/ReactivateDepartment.md +37 -0
- package/src/modules/organization/docs/commands/ReactivateSite.md +37 -0
- package/src/modules/organization/docs/commands/UpdateCompany.md +58 -0
- package/src/modules/organization/docs/commands/UpdateDepartment.md +64 -0
- package/src/modules/organization/docs/commands/UpdateSite.md +80 -0
- package/src/modules/organization/docs/features/company-lifecycle.md +76 -0
- package/src/modules/organization/docs/features/department-management.md +66 -0
- package/src/modules/organization/docs/features/site-management.md +86 -0
- package/src/modules/organization/docs/models/Company.md +60 -0
- package/src/modules/organization/docs/models/Department.md +57 -0
- package/src/modules/organization/docs/models/Site.md +57 -0
- package/src/modules/organization/docs/queries/DetectDepartmentCircularReference.md +50 -0
- package/src/modules/organization/docs/queries/GetCompany.md +40 -0
- package/src/modules/organization/docs/queries/GetDepartment.md +44 -0
- package/src/modules/organization/docs/queries/GetDepartmentChildren.md +40 -0
- package/src/modules/organization/docs/queries/GetSite.md +37 -0
- package/src/modules/organization/docs/queries/ListDepartmentsByCompany.md +54 -0
- package/src/modules/organization/docs/queries/ListSitesByCompany.md +54 -0
- package/src/modules/organization/executor/.gitkeep +0 -0
- package/src/modules/organization/generated/.gitkeep +0 -0
- package/src/modules/organization/generated/kysely-tailordb.ts +77 -0
- package/src/modules/organization/index.ts +2 -0
- package/src/modules/organization/lib/_db_deps.ts +10 -0
- package/src/modules/organization/lib/errors.generated.ts +117 -0
- package/src/modules/organization/lib/errors.ts +1 -0
- package/src/modules/organization/lib/permissions.generated.ts +19 -0
- package/src/modules/organization/lib/types.ts +16 -0
- package/src/modules/organization/module.ts +89 -0
- package/src/modules/organization/permissions.ts +3 -0
- package/src/modules/organization/query/.gitkeep +0 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.generated.ts +5 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.test.ts +102 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.ts +27 -0
- package/src/modules/organization/query/getCompany.generated.ts +5 -0
- package/src/modules/organization/query/getCompany.test.ts +70 -0
- package/src/modules/organization/query/getCompany.ts +16 -0
- package/src/modules/organization/query/getDepartment.generated.ts +5 -0
- package/src/modules/organization/query/getDepartment.test.ts +85 -0
- package/src/modules/organization/query/getDepartment.ts +17 -0
- package/src/modules/organization/query/getDepartmentChildren.generated.ts +5 -0
- package/src/modules/organization/query/getDepartmentChildren.test.ts +75 -0
- package/src/modules/organization/query/getDepartmentChildren.ts +21 -0
- package/src/modules/organization/query/getSite.generated.ts +5 -0
- package/src/modules/organization/query/getSite.test.ts +55 -0
- package/src/modules/organization/query/getSite.ts +16 -0
- package/src/modules/organization/query/listDepartmentsByCompany.generated.ts +5 -0
- package/src/modules/organization/query/listDepartmentsByCompany.test.ts +124 -0
- package/src/modules/organization/query/listDepartmentsByCompany.ts +43 -0
- package/src/modules/organization/query/listSitesByCompany.generated.ts +5 -0
- package/src/modules/organization/query/listSitesByCompany.test.ts +126 -0
- package/src/modules/organization/query/listSitesByCompany.ts +41 -0
- package/src/modules/organization/tailor.config.ts +13 -0
- package/src/modules/organization/tailor.d.ts +13 -0
- package/src/modules/organization/testing/fixtures.ts +155 -0
- package/src/modules/primitives/README.md +1 -1
- package/src/modules/primitives/command/setBaseCurrency.test.ts +8 -64
- package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
- package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -1
- package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -1
- package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/CreateExchangeRate.md +2 -2
- package/src/modules/primitives/docs/commands/CreateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateCategory.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateCurrency.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/SetBaseCurrency.md +13 -23
- package/src/modules/primitives/docs/commands/SetReferenceUnit.md +1 -1
- package/src/modules/primitives/docs/features/currency-definitions.md +13 -14
- package/src/modules/primitives/docs/models/Currency.md +3 -4
- package/src/modules/primitives/docs/queries/ConvertAmount.md +2 -2
- package/src/modules/primitives/docs/queries/ConvertQuantity.md +2 -2
- package/src/modules/primitives/lib/errors.generated.ts +5 -0
- package/src/modules/product-management/README.md +1 -1
- package/src/modules/user-management/docs/commands/CreatePermission.md +3 -3
- package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
- package/src/modules/user-management/docs/queries/ListRolePermissionsByRole.md +39 -0
- package/src/modules/user-management/docs/queries/ListUserRolesByUser.md +39 -0
- package/src/modules/user-management/generated/enums.ts +0 -15
- package/src/modules/user-management/generated/kysely-tailordb.ts +0 -11
- package/src/shared/createContext.ts +2 -1
- package/src/shared/defineQuery.ts +36 -1
- package/src/shared/requirePermission.ts +3 -3
- package/src/shared/types.ts +3 -0
- package/templates/scaffold/app/backend/package.json +4 -3
- package/templates/scaffold/app/frontend/eslint.config.js +12 -0
- package/templates/scaffold/app/frontend/package.json +10 -7
- package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +30 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +3 -2
- package/templates/scaffold/app/frontend/vite.config.ts +5 -5
- package/src/commands/module/list.test.ts +0 -57
- package/src/commands/module/list.ts +0 -64
- /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
- /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
- /package/src/modules/{coa-management/.gitkeep → audit/lib/errors.ts} +0 -0
- /package/src/modules/{supplier-management → business-partner}/.gitkeep +0 -0
|
@@ -2,44 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Deprecated.** Base currency assignment is per company and owned by the organization module's company lifecycle. The primitives module owns the currency catalog but does not manage base currency designation. New implementations should use the organization module's company-level base currency assignment instead of this command.
|
|
6
|
+
|
|
7
|
+
Previously, SetBaseCurrency changed a single organization-wide base currency. This model has been replaced by per-company base currency assignment in the organization module, which correctly supports multi-company deployments where each legal entity may have a different functional currency.
|
|
6
8
|
|
|
7
9
|
## Business Rules
|
|
8
10
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- Previous base currency remains active but loses base currency designation
|
|
14
|
-
- Exchange rates may need to be recalculated or new rates added after changing base currency
|
|
11
|
+
- This command is deprecated and must not be used in new implementations
|
|
12
|
+
- Base currency assignment is per company, owned by the organization module
|
|
13
|
+
- The primitives module provides the currency catalog; it does not designate a global base currency
|
|
14
|
+
- Deactivation of a currency is blocked if any company references it as base currency (cross-module invariant with organization)
|
|
15
15
|
|
|
16
16
|
## Process Flow
|
|
17
17
|
|
|
18
18
|
```mermaid
|
|
19
19
|
flowchart TD
|
|
20
|
-
A[
|
|
21
|
-
B
|
|
22
|
-
B -->|Yes| D{Currency active?}
|
|
23
|
-
D -->|No| E[Return error: cannot set inactive currency as base]
|
|
24
|
-
D -->|Yes| F{Already base currency?}
|
|
25
|
-
F -->|Yes| G[Return success: no change needed]
|
|
26
|
-
F -->|No| H[Remove base flag from current base]
|
|
27
|
-
H --> I[Set base flag on target currency]
|
|
28
|
-
I --> J[Return updated currency]
|
|
20
|
+
A[SetBaseCurrency called] --> B[Return deprecation error]
|
|
21
|
+
B --> C[Caller should use organization module company-level base currency assignment]
|
|
29
22
|
```
|
|
30
23
|
|
|
31
24
|
## External Dependencies
|
|
32
25
|
|
|
33
|
-
-
|
|
26
|
+
- [organization](../../../organization/README.md) — Owns per-company base currency assignment
|
|
34
27
|
|
|
35
28
|
## Error Scenarios
|
|
36
29
|
|
|
37
|
-
- **
|
|
38
|
-
- **CANNOT_SET_INACTIVE_AS_BASE_CURRENCY**: Target currency is not in Active status, must be activated first
|
|
30
|
+
- **SET_BASE_CURRENCY_DEPRECATED**: This command is deprecated; use the organization module's company-level base currency assignment
|
|
39
31
|
|
|
40
32
|
## Test Cases
|
|
41
33
|
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- returns currency unchanged when already base
|
|
45
|
-
- changes base currency
|
|
34
|
+
- Calling SetBaseCurrency returns a deprecation error directing the caller to the organization module
|
|
35
|
+
- No currency is modified when SetBaseCurrency is invoked
|
|
@@ -43,7 +43,7 @@ flowchart TD
|
|
|
43
43
|
|
|
44
44
|
## Test Cases
|
|
45
45
|
|
|
46
|
-
- throws when unit doesn
|
|
46
|
+
- throws when unit doesn't exist
|
|
47
47
|
- throws when unit is not in specified category
|
|
48
48
|
- returns category unchanged when unit is already reference
|
|
49
49
|
- changes reference unit and recalculates conversion factors
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
Currency Definitions establish the monetary units available for use across the ERP system. Each currency record contains the ISO 4217 code, display symbol, name, and decimal precision.
|
|
5
|
+
Currency Definitions establish the monetary units available for use across the ERP system. Each currency record contains the ISO 4217 code, display symbol, name, and decimal precision. The primitives module owns the **currency master data** — the catalog of available currencies, their metadata, and exchange rates.
|
|
6
|
+
|
|
7
|
+
In a multi-company setup, each company assigns one of these currencies as its **base/functional currency** via the organization module's company record. The primitives module does not own the company→currency mapping; it provides the currency catalog that organization references. There is no global "base currency" concept at the primitives level — base currency assignment is always per company, owned by the organization module.
|
|
6
8
|
|
|
7
9
|
This feature provides the foundation for all multi-currency operations in sales, purchasing, and accounting.
|
|
8
10
|
|
|
@@ -21,20 +23,18 @@ Currency definitions ensure consistent monetary handling across all business ope
|
|
|
21
23
|
|
|
22
24
|
```mermaid
|
|
23
25
|
flowchart TD
|
|
24
|
-
A[Define Currency] --> B
|
|
25
|
-
B
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
D -->
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
F --> H[Orders Can Use Currency]
|
|
32
|
-
F --> I[Exchange Rates Can Reference]
|
|
26
|
+
A[Define Currency] --> B[Add to Currency Catalog]
|
|
27
|
+
B --> C[Currency Active]
|
|
28
|
+
C --> D[Available for Transactions]
|
|
29
|
+
D --> E[Products Can Set Prices]
|
|
30
|
+
D --> F[Orders Can Use Currency]
|
|
31
|
+
D --> G[Exchange Rates Can Reference]
|
|
32
|
+
D --> H[Companies Can Assign as Base Currency]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Scenario Patterns
|
|
36
36
|
|
|
37
|
-
- **Initial Setup**: Administrator defines
|
|
37
|
+
- **Initial Setup**: Administrator defines common currencies (e.g., USD, EUR, GBP, JPY) in the currency catalog during system initialization. Base currency assignment is performed per company via the organization module
|
|
38
38
|
- **Market Expansion**: Business enters new market and adds local currency (e.g., BRL for Brazil expansion)
|
|
39
39
|
- **Currency Deactivation**: Obsolete currency (e.g., legacy national currency replaced by EUR) is deactivated to prevent new transactions while preserving historical data
|
|
40
40
|
- **Precision Configuration**: Cryptocurrency or precious metal tracking requires higher decimal precision than standard currencies
|
|
@@ -43,9 +43,8 @@ flowchart TD
|
|
|
43
43
|
|
|
44
44
|
- Creating a currency with valid ISO 4217 code should succeed
|
|
45
45
|
- Currency codes must be unique (no duplicate USD)
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
- Deactivating the base currency should be prevented
|
|
46
|
+
- The primitives module does not designate a global base currency; base currency assignment is per company and owned by the organization module
|
|
47
|
+
- A currency that is assigned as base currency by any company cannot be deactivated (enforced via cross-module check with the organization module)
|
|
49
48
|
- Currency with active transactions should not be deletable (only deactivatable)
|
|
50
49
|
- Decimal places must be non-negative integer (0-4 typical range)
|
|
51
50
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Description
|
|
4
4
|
|
|
5
|
-
Currency defines a monetary unit available for use across the ERP system. Each currency contains the ISO 4217 code, display symbol, name, and decimal precision.
|
|
5
|
+
Currency defines a monetary unit available for use across the ERP system. Each currency contains the ISO 4217 code, display symbol, name, and decimal precision. The primitives module owns the currency catalog; base/functional currency assignment is per company and owned by the organization module.
|
|
6
6
|
|
|
7
7
|
Examples: USD (US Dollar), EUR (Euro), JPY (Japanese Yen).
|
|
8
8
|
|
|
@@ -19,7 +19,7 @@ stateDiagram-v2
|
|
|
19
19
|
[*] --> Active: create
|
|
20
20
|
Active --> Inactive: deactivate
|
|
21
21
|
Inactive --> Active: activate
|
|
22
|
-
note right of Active:
|
|
22
|
+
note right of Active: Currency assigned as base currency by any company cannot be deactivated
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### Command Definitions
|
|
@@ -40,8 +40,7 @@ stateDiagram-v2
|
|
|
40
40
|
### Invariants
|
|
41
41
|
|
|
42
42
|
- ISO 4217 code must be unique across all currencies
|
|
43
|
-
-
|
|
44
|
-
- Base currency cannot be deactivated
|
|
43
|
+
- A currency assigned as base currency by any company (via the organization module) cannot be deactivated
|
|
45
44
|
|
|
46
45
|
### Relationships
|
|
47
46
|
|
|
@@ -49,8 +49,8 @@ flowchart TD
|
|
|
49
49
|
|
|
50
50
|
## Test Cases
|
|
51
51
|
|
|
52
|
-
- returns error when source currency doesn
|
|
53
|
-
- returns error when target currency doesn
|
|
52
|
+
- returns error when source currency doesn't exist
|
|
53
|
+
- returns error when target currency doesn't exist
|
|
54
54
|
- returns error when source currency is inactive
|
|
55
55
|
- returns error when target currency is inactive
|
|
56
56
|
- returns error when no exchange rate exists for the currency pair
|
|
@@ -42,8 +42,8 @@ flowchart TD
|
|
|
42
42
|
|
|
43
43
|
## Test Cases
|
|
44
44
|
|
|
45
|
-
- returns error when source unit doesn
|
|
46
|
-
- returns error when target unit doesn
|
|
45
|
+
- returns error when source unit doesn't exist
|
|
46
|
+
- returns error when target unit doesn't exist
|
|
47
47
|
- returns error when source unit is inactive
|
|
48
48
|
- returns error when target unit is inactive
|
|
49
49
|
- returns error when units belong to different categories
|
|
@@ -110,3 +110,8 @@ export const InactiveUnitError = createDomainError(
|
|
|
110
110
|
"InactiveUnitError", "PRIMITIVES_INACTIVE_UNIT",
|
|
111
111
|
(identifier: string) => `Either source or target unit is inactive: ${identifier}`,
|
|
112
112
|
);
|
|
113
|
+
|
|
114
|
+
export const SetBaseCurrencyDeprecatedError = createDomainError(
|
|
115
|
+
"SetBaseCurrencyDeprecatedError", "PRIMITIVES_SET_BASE_CURRENCY_DEPRECATED",
|
|
116
|
+
(_identifier: string) => `SetBaseCurrency is deprecated; use the organization module's company-level base currency assignment`,
|
|
117
|
+
);
|
|
@@ -31,7 +31,7 @@ The Product Management module serves as the Product Information Management (PIM)
|
|
|
31
31
|
- Channel/marketplace definitions and listing management (sales-channel module)
|
|
32
32
|
- Inventory tracking and stock levels (inventory module)
|
|
33
33
|
- Product images and digital asset management
|
|
34
|
-
- Supplier-specific product information (
|
|
34
|
+
- Supplier-specific product information (business-partner module)
|
|
35
35
|
- Bill of Materials (manufacturing module)
|
|
36
36
|
|
|
37
37
|
### Scope Decision Rationale
|
|
@@ -11,16 +11,16 @@ Permissions are assigned to roles, which are then assigned to users. This indire
|
|
|
11
11
|
- Permission key must follow `resource:action` format (lowercase letters, colon separator)
|
|
12
12
|
- Permission key must be unique across all permissions
|
|
13
13
|
- Description is optional but recommended for clarity
|
|
14
|
-
-
|
|
14
|
+
- Permission assignment to roles is handled by AssignPermissionToRole command
|
|
15
15
|
|
|
16
16
|
## Process Flow
|
|
17
17
|
|
|
18
18
|
```mermaid
|
|
19
19
|
flowchart TD
|
|
20
20
|
A[Receive create request] --> B{Validate key format}
|
|
21
|
-
B -->|Invalid| C[Return error:
|
|
21
|
+
B -->|Invalid| C[Return error: INVALID_PERMISSION_KEY_FORMAT]
|
|
22
22
|
B -->|Valid| D{Key unique?}
|
|
23
|
-
D -->|No| E[Return error:
|
|
23
|
+
D -->|No| E[Return error: DUPLICATE_PERMISSION_KEY]
|
|
24
24
|
D -->|Yes| F[Create permission record]
|
|
25
25
|
F --> G[Return created permission]
|
|
26
26
|
```
|
|
@@ -20,7 +20,7 @@ flowchart TD
|
|
|
20
20
|
A[Receive create request] --> B{Name provided?}
|
|
21
21
|
B -->|No| C[Return error: MISSING_REQUIRED_FIELD]
|
|
22
22
|
B -->|Yes| D{Name unique?}
|
|
23
|
-
D -->|No| E[Return error:
|
|
23
|
+
D -->|No| E[Return error: DUPLICATE_ROLE_NAME]
|
|
24
24
|
D -->|Yes| F[Create role record]
|
|
25
25
|
F --> G[Return created role]
|
|
26
26
|
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ListRolePermissionsByRole
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ListRolePermissionsByRole retrieves all permissions assigned to a specific role. This query supports the permission check flow in RBAC, where after resolving a user's roles, the system resolves each role's permissions to determine whether the user has the required permission for an action.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts a roleId as input
|
|
10
|
+
- Returns all Permission records associated with the role via RolePermission join records
|
|
11
|
+
- Returns an empty array when the role has no permission assignments — not an error
|
|
12
|
+
- The role must exist; a non-existent roleId returns an error
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive roleId] --> B{Role exists?}
|
|
19
|
+
B -->|No| C[Return error: ROLE_NOT_FOUND]
|
|
20
|
+
B -->|Yes| D[SELECT permissions via RolePermission where roleId = input]
|
|
21
|
+
D --> E{Any permissions found?}
|
|
22
|
+
E -->|Yes| F[Return permission records]
|
|
23
|
+
E -->|No| G[Return empty array]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## External Dependencies
|
|
27
|
+
|
|
28
|
+
- None
|
|
29
|
+
|
|
30
|
+
## Error Scenarios
|
|
31
|
+
|
|
32
|
+
- **ROLE_NOT_FOUND**: Specified roleId does not exist
|
|
33
|
+
|
|
34
|
+
## Test Cases
|
|
35
|
+
|
|
36
|
+
- returns all permissions assigned to role
|
|
37
|
+
- returns empty array when role has no permissions
|
|
38
|
+
- returns error when roleId does not exist
|
|
39
|
+
- returns multiple permissions when role has multiple permission assignments
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ListUserRolesByUser
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ListUserRolesByUser retrieves all roles assigned to a specific user. This query supports the permission check flow in RBAC, where the system first resolves a user's roles, then resolves the permissions attached to those roles to determine whether the user has a required permission.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts a userId as input
|
|
10
|
+
- Returns all Role records associated with the user via UserRole join records
|
|
11
|
+
- Returns an empty array when the user has no role assignments — not an error
|
|
12
|
+
- The user must exist; a non-existent userId returns an error
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive userId] --> B{User exists?}
|
|
19
|
+
B -->|No| C[Return error: USER_NOT_FOUND]
|
|
20
|
+
B -->|Yes| D[SELECT roles via UserRole where userId = input]
|
|
21
|
+
D --> E{Any roles found?}
|
|
22
|
+
E -->|Yes| F[Return role records]
|
|
23
|
+
E -->|No| G[Return empty array]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## External Dependencies
|
|
27
|
+
|
|
28
|
+
- None
|
|
29
|
+
|
|
30
|
+
## Error Scenarios
|
|
31
|
+
|
|
32
|
+
- **USER_NOT_FOUND**: Specified userId does not exist
|
|
33
|
+
|
|
34
|
+
## Test Cases
|
|
35
|
+
|
|
36
|
+
- returns all roles assigned to user
|
|
37
|
+
- returns empty array when user has no roles
|
|
38
|
+
- returns error when userId does not exist
|
|
39
|
+
- returns multiple roles when user has multiple role assignments
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type of audit event
|
|
3
|
-
*/
|
|
4
|
-
export const AuditEventEventType = {
|
|
5
|
-
"USER_CREATED": "USER_CREATED",
|
|
6
|
-
"USER_ACTIVATED": "USER_ACTIVATED",
|
|
7
|
-
"USER_DEACTIVATED": "USER_DEACTIVATED",
|
|
8
|
-
"USER_REACTIVATED": "USER_REACTIVATED",
|
|
9
|
-
"ROLE_ASSIGNED": "ROLE_ASSIGNED",
|
|
10
|
-
"ROLE_REVOKED": "ROLE_REVOKED",
|
|
11
|
-
"PERMISSION_ASSIGNED": "PERMISSION_ASSIGNED",
|
|
12
|
-
"PERMISSION_REVOKED": "PERMISSION_REVOKED"
|
|
13
|
-
} as const;
|
|
14
|
-
export type AuditEventEventType = (typeof AuditEventEventType)[keyof typeof AuditEventEventType];
|
|
15
|
-
|
|
16
1
|
/**
|
|
17
2
|
* User status
|
|
18
3
|
*/
|
|
@@ -13,17 +13,6 @@ import {
|
|
|
13
13
|
|
|
14
14
|
export interface Namespace {
|
|
15
15
|
"main-db": {
|
|
16
|
-
AuditEvent: {
|
|
17
|
-
id: Generated<string>;
|
|
18
|
-
eventType: "USER_CREATED" | "USER_ACTIVATED" | "USER_DEACTIVATED" | "USER_REACTIVATED" | "ROLE_ASSIGNED" | "ROLE_REVOKED" | "PERMISSION_ASSIGNED" | "PERMISSION_REVOKED";
|
|
19
|
-
actorId: string;
|
|
20
|
-
targetId: string | null;
|
|
21
|
-
targetType: string | null;
|
|
22
|
-
payload: string | null;
|
|
23
|
-
createdAt: Generated<Timestamp>;
|
|
24
|
-
updatedAt: Timestamp | null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
16
|
Permission: {
|
|
28
17
|
id: Generated<string>;
|
|
29
18
|
key: string;
|
|
@@ -3,7 +3,7 @@ import type { CommandContext } from "./types";
|
|
|
3
3
|
interface ResolverContext {
|
|
4
4
|
user: {
|
|
5
5
|
id: string;
|
|
6
|
-
attributes: { permissions?: string[] } | null;
|
|
6
|
+
attributes: { permissions?: string[]; companyId?: string | null } | null;
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -11,5 +11,6 @@ export function createContext(context: ResolverContext): CommandContext {
|
|
|
11
11
|
return {
|
|
12
12
|
actorId: context.user.id,
|
|
13
13
|
permissions: [...new Set(context.user.attributes?.permissions ?? [])],
|
|
14
|
+
companyId: context.user.attributes?.companyId,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { QueryContext } from "./types";
|
|
2
|
+
import type { Result } from "./result";
|
|
3
|
+
import { requirePermission } from "./requirePermission";
|
|
4
|
+
import type { InsufficientPermissionError } from "./errors";
|
|
2
5
|
|
|
3
6
|
export type Query<TInput, TResult> = (
|
|
4
7
|
db: unknown,
|
|
@@ -6,10 +9,42 @@ export type Query<TInput, TResult> = (
|
|
|
6
9
|
ctx: QueryContext,
|
|
7
10
|
) => Promise<TResult>;
|
|
8
11
|
|
|
12
|
+
type QueryResult<TReturn> =
|
|
13
|
+
TReturn extends Result<infer _V, infer _E>
|
|
14
|
+
? TReturn | Result<never, InstanceType<typeof InsufficientPermissionError>>
|
|
15
|
+
: TReturn;
|
|
16
|
+
|
|
17
|
+
// Overload: no permission
|
|
18
|
+
export function defineQuery<TInput, TResult>(
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
impl: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
|
|
21
|
+
): Query<TInput, TResult>;
|
|
22
|
+
|
|
23
|
+
// Overload: with permission
|
|
9
24
|
export function defineQuery<TInput, TResult>(
|
|
25
|
+
permission: string,
|
|
10
26
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
27
|
impl: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
|
|
12
|
-
): Query<TInput, TResult
|
|
28
|
+
): Query<TInput, QueryResult<TResult>>;
|
|
29
|
+
|
|
30
|
+
// Implementation
|
|
31
|
+
export function defineQuery<TInput, TResult>(
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
permissionOrImpl: string | ((db: any, input: TInput, ctx: QueryContext) => Promise<TResult>),
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
|
+
maybeImpl?: (db: any, input: TInput, ctx: QueryContext) => Promise<TResult>,
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
+
): Query<TInput, any> {
|
|
38
|
+
if (typeof permissionOrImpl === "string") {
|
|
39
|
+
const permission = permissionOrImpl;
|
|
40
|
+
const impl = maybeImpl!;
|
|
41
|
+
return async (db, input, ctx) => {
|
|
42
|
+
const check = requirePermission(ctx, permission);
|
|
43
|
+
if (!check.ok) return check;
|
|
44
|
+
return impl(db, input, ctx);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const impl = permissionOrImpl;
|
|
13
48
|
return async (db, input, ctx) => {
|
|
14
49
|
return impl(db, input, ctx);
|
|
15
50
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { CommandContext } from "./types";
|
|
1
|
+
import type { CommandContext, QueryContext } from "./types";
|
|
2
2
|
import type { Result } from "./result";
|
|
3
3
|
import { InsufficientPermissionError } from "./errors";
|
|
4
4
|
import { ok, err } from "./result";
|
|
5
5
|
|
|
6
6
|
export function requirePermission(
|
|
7
|
-
ctx: CommandContext,
|
|
7
|
+
ctx: CommandContext | QueryContext,
|
|
8
8
|
key: string,
|
|
9
9
|
): Result<void, InstanceType<typeof InsufficientPermissionError>> {
|
|
10
|
-
if (!ctx.permissions
|
|
10
|
+
if (!ctx.permissions?.includes(key)) {
|
|
11
11
|
return err(new InsufficientPermissionError(ctx.actorId, key));
|
|
12
12
|
}
|
|
13
13
|
return ok(undefined);
|
package/src/shared/types.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export interface QueryContext {
|
|
2
2
|
actorId: string;
|
|
3
|
+
permissions?: readonly string[];
|
|
4
|
+
companyId?: string | null;
|
|
3
5
|
}
|
|
4
6
|
|
|
5
7
|
export interface CommandContext {
|
|
6
8
|
actorId: string;
|
|
7
9
|
permissions: readonly string[];
|
|
10
|
+
companyId?: string | null;
|
|
8
11
|
}
|
|
9
12
|
|
|
10
13
|
// Strips write methods (updateTable, insertInto, deleteFrom) from a Kysely DB instance.
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@tailor-platform/erp-kit": "workspace:*",
|
|
17
17
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
18
|
-
"@tailor-platform/sdk": "1.25.
|
|
18
|
+
"@tailor-platform/sdk": "1.25.2",
|
|
19
19
|
"kysely": "0.28.11"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@eslint/js": "
|
|
22
|
+
"@eslint/js": "10.0.1",
|
|
23
23
|
"@tailor-platform/function-types": "0.8.2",
|
|
24
24
|
"@types/node": "24.12.0",
|
|
25
|
-
"eslint": "
|
|
25
|
+
"@typescript-eslint/parser": "^8.57.0",
|
|
26
|
+
"eslint": "10.0.3",
|
|
26
27
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
27
28
|
"eslint-plugin-import-x": "4.16.2",
|
|
28
29
|
"typescript": "5.9.3",
|
|
@@ -31,6 +31,18 @@ export default defineConfig([
|
|
|
31
31
|
rules: {
|
|
32
32
|
"import-x/order": "error",
|
|
33
33
|
"import-x/no-unresolved": ["error", { ignore: ["^@tailor-platform/"] }],
|
|
34
|
+
"no-restricted-imports": [
|
|
35
|
+
"error",
|
|
36
|
+
{
|
|
37
|
+
paths: [
|
|
38
|
+
{
|
|
39
|
+
name: "@tailor-platform/app-shell",
|
|
40
|
+
importNames: ["useToast"],
|
|
41
|
+
message: "Import useToast from '@/hooks/use-toast' instead.",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
34
46
|
},
|
|
35
47
|
},
|
|
36
48
|
{
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"dev": "vite",
|
|
8
8
|
"preview": "vite preview",
|
|
9
9
|
"generate": "node --env-file=.env ./scripts/generate-graphql.mjs",
|
|
10
|
+
"gql-tada:check": "gql-tada check -c tsconfig.app.json",
|
|
10
11
|
"lint": "eslint .",
|
|
11
12
|
"lint:fix": "eslint --fix .",
|
|
12
13
|
"typecheck": "tsc --noEmit"
|
|
@@ -28,26 +29,28 @@
|
|
|
28
29
|
"zod": "4.3.6"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@eslint/js": "
|
|
32
|
+
"@eslint/js": "10.0.1",
|
|
33
|
+
"@rolldown/plugin-babel": "0.2.1",
|
|
32
34
|
"@tailor-platform/app-shell-vite-plugin": "0.1.0",
|
|
33
35
|
"@tailwindcss/vite": "4.2.1",
|
|
34
36
|
"@types/node": "25.5.0",
|
|
35
37
|
"@types/react": "19.2.14",
|
|
36
38
|
"@types/react-dom": "19.2.3",
|
|
37
|
-
"@
|
|
39
|
+
"@typescript-eslint/parser": "^8.57.0",
|
|
40
|
+
"@vitejs/plugin-react": "6.0.1",
|
|
38
41
|
"babel-plugin-react-compiler": "1.0.0",
|
|
39
|
-
"eslint": "
|
|
42
|
+
"eslint": "10.0.3",
|
|
40
43
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
41
44
|
"eslint-plugin-import-x": "4.16.2",
|
|
42
|
-
"eslint-plugin-react-dom": "
|
|
45
|
+
"eslint-plugin-react-dom": "3.0.0",
|
|
43
46
|
"eslint-plugin-react-hooks": "7.0.1",
|
|
44
|
-
"eslint-plugin-react-x": "
|
|
47
|
+
"eslint-plugin-react-x": "3.0.0",
|
|
45
48
|
"globals": "17.4.0",
|
|
46
|
-
"shadcn": "^
|
|
49
|
+
"shadcn": "^4.0.0",
|
|
47
50
|
"tailwindcss": "4.2.1",
|
|
48
51
|
"tw-animate-css": "1.4.0",
|
|
49
52
|
"typescript": "5.9.3",
|
|
50
53
|
"typescript-eslint": "8.57.0",
|
|
51
|
-
"vite": "
|
|
54
|
+
"vite": "8.0.0"
|
|
52
55
|
}
|
|
53
56
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// eslint-disable-next-line no-restricted-imports -- this is the wrapper itself
|
|
2
|
+
import { useToast as useBaseToast } from "@tailor-platform/app-shell";
|
|
3
|
+
import type { CombinedError } from "urql";
|
|
4
|
+
|
|
5
|
+
// Extract a human-readable error message from a urql CombinedError.
|
|
6
|
+
// Backend resolver errors are wrapped as "rpc error: code = ... desc = Error: <message>"
|
|
7
|
+
// inside extensions.attr.error. This function extracts <message> when available.
|
|
8
|
+
function getErrorMessage(error: CombinedError): string {
|
|
9
|
+
const gqlError = error.graphQLErrors[0];
|
|
10
|
+
const attrError = (gqlError?.extensions as Record<string, Record<string, string>> | undefined)
|
|
11
|
+
?.attr?.error;
|
|
12
|
+
if (attrError) {
|
|
13
|
+
const match = /desc = Error: (.+?)(?:\n|$)/.exec(attrError);
|
|
14
|
+
if (match) return match[1];
|
|
15
|
+
}
|
|
16
|
+
return error.message;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Wraps useToast so that toast.error() accepts a CombinedError directly
|
|
20
|
+
// and automatically extracts the human-readable message.
|
|
21
|
+
export function useToast() {
|
|
22
|
+
const toast = useBaseToast();
|
|
23
|
+
return {
|
|
24
|
+
...toast,
|
|
25
|
+
error: (error: string | CombinedError) => {
|
|
26
|
+
const message = typeof error === "string" ? error : getErrorMessage(error);
|
|
27
|
+
toast.error(message);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { useNavigate
|
|
1
|
+
import { useNavigate } from "@tailor-platform/app-shell";
|
|
2
2
|
import { useMutation } from "urql";
|
|
3
3
|
import { useForm } from "react-hook-form";
|
|
4
4
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { graphql } from "@/graphql";
|
|
7
|
+
import { useToast } from "@/hooks/use-toast";
|
|
7
8
|
import { Button } from "@/components/ui/button";
|
|
8
9
|
import { Input } from "@/components/ui/input";
|
|
9
10
|
import {
|
|
@@ -46,7 +47,7 @@ export const CreateUserForm = () => {
|
|
|
46
47
|
const onSubmit = (values: FormValues) => {
|
|
47
48
|
void createUser(values, { additionalTypenames: ["User"] }).then((result) => {
|
|
48
49
|
if (result.error) {
|
|
49
|
-
toast.error(result.error
|
|
50
|
+
toast.error(result.error);
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
53
|
toast.success("User created successfully");
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import tailwindcss from "@tailwindcss/vite";
|
|
3
|
-
import react from "@vitejs/plugin-react";
|
|
3
|
+
import react, { reactCompilerPreset } from "@vitejs/plugin-react";
|
|
4
|
+
import babel from "@rolldown/plugin-babel";
|
|
4
5
|
import { appShellRoutes } from "@tailor-platform/app-shell-vite-plugin";
|
|
5
6
|
import { defineConfig } from "vite";
|
|
6
7
|
|
|
7
8
|
// https://vite.dev/config/
|
|
8
9
|
export default defineConfig({
|
|
9
10
|
plugins: [
|
|
10
|
-
react(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
11
|
+
react(),
|
|
12
|
+
babel({
|
|
13
|
+
presets: [reactCompilerPreset()],
|
|
14
14
|
}),
|
|
15
15
|
tailwindcss(),
|
|
16
16
|
appShellRoutes(),
|