ApiLogicServer 15.0.65__py3-none-any.whl → 15.1.0__py3-none-any.whl
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.
- api_logic_server_cli/api_logic_server.py +2 -2
- api_logic_server_cli/database/basic_demo.sqlite +0 -0
- api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +25 -2
- api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/.vscode/launch.json +2 -1
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/For_VSCode.dockerfile +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/devcontainer.json +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/readme.md +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/setup.sh +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.env +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.github/.copilot-instructions.md +581 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.gitignore +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/ApiLogicServer.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Report_Behave_Logic.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Run_Behave.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Windows_Run_Behave.xml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run___No_Security.xml +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run_docker.xml +59 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/launch.json +314 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/settings.json +40 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/venv_init.sh +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/_config.yml +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/_layouts/redirect.html +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/auto_discovery.py +27 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_discovery.py +97 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_expose_api_models.py +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/new_service.py +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/newer_service.py +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/ontimize_api.py +495 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/order_b2b_service.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/system.py +77 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/customize_api.py +63 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/expose_api_models.py +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/json_encoder.py +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/readme_customize_api.md +103 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/api_utils.py +171 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/custom_endpoint.py +1085 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/expression_parser.py +685 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_csv_report.py +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_pdf_report.py +215 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/opt_locking.py +158 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/readme.md +225 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/api_logic_server_run.py +162 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/activate_logicbank.py +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/config.py +772 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/default.env +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging-reduced.yml +112 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging.yml +123 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/mypy.ini +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/config/server_setup.py +459 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/api/api_discovery/openapi.py +92 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/config/default.env +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/models.py +130 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/docs/mcp_learning/mcp_discovery.json +108 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/cocktail-napkin.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/declare_logic.py +106 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/email_request.py +49 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/security/declare_security.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/admin.yaml +162 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/home.js +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README.md +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README_create_react_app.md +70 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.js +61 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config-reference.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer-reference.js +216 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer.js +230 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Item.js +170 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Order.js +207 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Product.js +140 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysEmail.js +157 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysMcp.js +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/alembic_run.py +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/env.py +78 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/readme_alembic.md +36 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/script.py.mako +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/readme.md +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic.ini +103 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/authentication_db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/bind_dbs.py +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/customize_models.py +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/authentication_models.py +183 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/auto_discovery.py +27 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db_debug/db_debug.py +90 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_models.py +58 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/models.py +132 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/system/SAFRSBaseX.py +139 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/alp_init.py +40 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/readme.md +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/response2code.py +148 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/test_data_preamble.py +83 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.Dockerfile +65 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.sql +112 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_postgres.sql +57 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-azure/azure-deploy.sh +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose-dev-local.yml +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose.sh +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.dockerfile +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.sh +67 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/env.list +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/run_image.sh +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/docker-compose-standard-image.yml +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/env.list +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.trace.db +236 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-realm.json +1807 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-users-0.json +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-realm.json +1953 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-users-0.json +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-dev-network.yml +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-nginx.yml +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose.yml +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-realm.json +1898 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-users-0.json +319 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-realm.json +1953 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-users-0.json +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/cert.pem +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/key.pem +28 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/nginx.conf +73 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_nginx.txt +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_no_nginx.txt +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/auth_provider.py +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/unused-docker-compose-keycloak.sh +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/python-anywhere/python_anywhere_wsgi.py +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/readme-devops.md +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/graphics/readme.md +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic/readme.md +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic_suggestions/readme_logic_suggestions.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp.prompt +39 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp_schema.json +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/models-not-code.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/runtime engines.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/system-creation-vibe.md +158 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_1_context.prompt.md +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_2_functionality.prompt.md +69 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_3_architecture.prompt.md +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_bank_api.prompt +342 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_example.py +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_map.prompt.md +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_tree.prompt.md +10 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_consumer.py +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_producer.py +127 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_readme.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_context_results.txt +142 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_discovery_response.json +150 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_request.prompt +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_schema.txt +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response.json +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_client_executor.py +545 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_server_discovery.json +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/readme-mcp.md +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +394 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_producer.py +172 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_readme.md +67 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/OrderB2BMapper.py +54 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/FlaskKafka.py +105 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/RowDictMapper.py +416 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/api/api_discovery/order_b2b.py +92 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/database/db.sqlite +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/docs/er_diagram.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py +36 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/logic/declare_logic.py +147 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/ui/admin/admin.yaml +175 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declare_logic.py +81 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/load_verify_rules.py +217 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/app_integration.py +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/auto_discovery.py +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/check_credit.py +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/mcp_client_executor_request.py +50 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/readme_logic_discovery.md +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/use_case.py +31 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/credit_service.py +204 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/readme_logic.md +249 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme.md +495 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_project.md +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_standard.md +492 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_vibe.md +353 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/requirements.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/run.ps1 +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/run.sh +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/abstract_authentication_provider.py +34 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/keycloak/auth_provider.py +238 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider.py +161 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider_no_swagger.py +98 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/sql/auth_provider.py +127 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/declare_security.py +49 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/readme_security.md +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authentication.py +129 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authorization.py +473 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/custom_swagger.json +62 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_logic_report.py +256 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_run.py +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/about.feature +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/test_utils.py +133 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +75 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +1180 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/basic/server_test.py +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/readme_test.md +395 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/__init__.py +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin.yaml +173 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin_loader.py +217 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/authentication_admin.yaml +99 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/home.js +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/mcp_admin.yaml +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.browserslistrc +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.dockerignore +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.editorconfig +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.eslintrc.json +51 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.gitignore +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/README.md +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/angular.json +206 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/app_model.yaml +303 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/docker-compose-ontimize.yml +54 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/protractor.conf.js +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.e2e-spec.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.po.ts +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/tsconfig.json +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/karma.conf.js +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/nginx/nginx.conf +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/ngsw-config.json +29 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package-lock.json +22651 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package.json +69 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app-routing.module.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.spec.ts +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.ts +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.config.ts +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login-routing.module.ts +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.html +58 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.scss +155 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.ts +81 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.theme.scss +51 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +90 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.html +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.html +26 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item-routing.module.ts +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.html +72 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.html +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.html +60 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.html +114 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.html +48 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product-routing.module.ts +37 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product.module.ts +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.html +91 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.html +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.ts +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.html +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about-routing.module.ts +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.html +39 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.scss +35 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.ts +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.theme.scss +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home-routing.module.ts +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.scss +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.ts +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-routing.module.ts +32 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-theme.scss +56 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.html +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.ts +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.module.ts +22 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings-routing.module.ts +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.html +14 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.scss +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.ts +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.module.ts +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.html +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.menu.config.ts +45 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.services.config.ts +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/constant.ts +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/shared.module.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/.gitkeep +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/app.scss +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/loader.css +173 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/en.json +44 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/es.json +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize128.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize16.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize256.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize32.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize48.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize64.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize72.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize96.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/github.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/login_bg.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image-transparent.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize_web_log.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/user_profile.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/domchange.js +110 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/keyboard.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.prod.ts +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/index.html +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/main.ts +15 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/manifest.webmanifest +59 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/polyfills.ts +66 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/styles.scss +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/test.ts +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.app.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.spec.json +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/andrew.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/anne.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/janet.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/laura.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/margaret.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/michael.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/nancy.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/robert.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/steven.jpg +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/beverages.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/cereals.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/condiments.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/confections.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/diary.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/meat.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/produce.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/seafood.gif +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README.md +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README_create_react_app.md +70 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.js +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Customer.js +218 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Item.js +190 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Order.js +189 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Product.js +159 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README.md +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README_create_react_app.md +72 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package-lock.json +18469 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package.json +47 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/product-cards.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/favicon.ico +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/index.html +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo192.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo512.png +0 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/manifest.json +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/robots.txt +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.css +38 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.js +80 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.test.js +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Config.js +527 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Customer.js +218 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Item.js +190 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Order.js +189 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Product.js +241 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/app_loader.js +24 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.css +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.js +17 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/logo.svg +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +116 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +7 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +9 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/reportWebVitals.js +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/setupTests.js +5 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/bar_chart.jinja +64 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/content.html +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/py.py +121 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/readme_venv.md +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/requirements-no-cli.txt +33 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv-linux.sh +28 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.ps1 +21 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.sh +28 -0
- api_logic_server_cli/prototypes/manager/samples/dbs/readme_dbs.md +4 -4
- api_logic_server_cli/prototypes/manager/samples/readme_samples.md +13 -6
- api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -2
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/METADATA +1 -1
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/RECORD +517 -17
- api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +0 -58
- api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +0 -15
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# Declarative vs. Procedural Business Logic: A Comprehensive Comparison
|
|
2
|
+
|
|
3
|
+
<br>
|
|
4
|
+
|
|
5
|
+
## Foreword
|
|
6
|
+
|
|
7
|
+
This document presents a real-world A/B comparison of two approaches to implementing the **same business logic requirements.** We asked AI to generate both a **procedural** implementation using conventional code, and a **declarative** implementation using the LogicBank rules engine.
|
|
8
|
+
|
|
9
|
+
This experiment highlights fundamental differences between the two approaches, and what they mean for building reliable, maintainable systems. It's important, because business logic typically represents *nearly half the effort* in database projects.
|
|
10
|
+
|
|
11
|
+
When asked to produce logic, AI (by itself) defaults to procedural code — because that’s all it knows. This study uncovered two critical problems with that approach:
|
|
12
|
+
1. **Quality:** The AI-generated procedural code contained subtle but serious bugs, even for just five rules—falling far short of basic reliability.
|
|
13
|
+
2. **Maintainability:** The procedural implementation exploded to over 200 lines — more than 40X the size of its declarative equivalent — creating “Franken-Code” that is brittle, opaque, and costly to maintain.
|
|
14
|
+
|
|
15
|
+
By contrast, the declarative approach was error free, and 5 Python statements.
|
|
16
|
+
|
|
17
|
+
The answer isn’t to reject AI. Its speed and simplicity are transformative. The key is to **teach AI about declarative rules** so it can produce concise, expressive rules instead of hundreds of lines of brittle procedural code. These rules are then executed by an **automated runtime engine** (like LogicBank), ensuring correctness, scalability, and maintainability — while preserving the velocity that makes AI so valuable.
|
|
18
|
+
|
|
19
|
+
By combining AI with declarative automation, GenAI-Logic delivers the best of both worlds: rapid development and enterprise-grade governance.
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
<br>
|
|
24
|
+
|
|
25
|
+
### Deeper Dive
|
|
26
|
+
|
|
27
|
+
[GenAI-Logic](https://www.genai-logic.com) is free and open source, so you can install it to explore declarative logic - [click here](https://apilogicserver.github.io/Docs/Install-Express/). This project is available in github - [click here](https://github.com/ApiLogicServer/basic_demo/blob/main/logic/declarative-vs-procedural-comparison.md).
|
|
28
|
+
|
|
29
|
+
<br>
|
|
30
|
+
|
|
31
|
+
### How this Document Was Created
|
|
32
|
+
|
|
33
|
+
We created this document from the following scenario:
|
|
34
|
+
|
|
35
|
+
1. Built the `basic_demo` project [as described here](https://apilogicserver.github.io/Docs/Sample-Basic-Demo/).
|
|
36
|
+
2. We asked CoPilot to **rebuild the logic *using a procedural approach*** - that is, without the LogicBank rule engine (part of GenAI-Logic).
|
|
37
|
+
* Resulting Procedural Logic: `logic/procedural_logic.py`
|
|
38
|
+
* Declarative logic: `logic/declare_logic.py` (*with LogicBank,* [below](#business-requirements))
|
|
39
|
+
3. We asked Copilot: **what would happen if the orders' customer-id were changed?**
|
|
40
|
+
* Copilot accepted this as a serious error, and made the bug fix.
|
|
41
|
+
4. We then asked Copilot: *what if the items' product-id were changed?*
|
|
42
|
+
* Copilot became agitated at finding yet another serious bug...
|
|
43
|
+
* It fixed it, and - ***unprompted* - provided the following analysis** of *Declarative vs Procedural Business Logic.*
|
|
44
|
+
|
|
45
|
+
<br>
|
|
46
|
+
|
|
47
|
+
> Here's the Copilot analysis, in its own words.
|
|
48
|
+
|
|
49
|
+
<br>
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## TL;DR
|
|
53
|
+
|
|
54
|
+
**LogicBank declarative rules provide a 44X reduction in code complexity** compared to traditional procedural implementations:
|
|
55
|
+
|
|
56
|
+
| Aspect | LogicBank Declarative | Procedural Code |
|
|
57
|
+
|--------|----------------------|-----------------|
|
|
58
|
+
| **Lines of Code** | 5 lines | 220+ lines |
|
|
59
|
+
| **Complexity** | Simple rule declarations | Complex event handling |
|
|
60
|
+
| **Maintenance** | Self-documenting business logic | Implementation details obscure logic |
|
|
61
|
+
| **Performance** | Built-in optimization & pruning | Multiple queries, N+1 problems |
|
|
62
|
+
| **Error Handling** | Automatic cascading | Manual event management |
|
|
63
|
+
| **Business Alignment** | Rules match requirements | Code doesn't reflect business intent |
|
|
64
|
+
|
|
65
|
+
**Bottom Line**: Declarative business logic eliminates complexity while providing better performance, maintainability, and business alignment.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Overview
|
|
70
|
+
|
|
71
|
+
This document compares two approaches to implementing business logic in enterprise applications:
|
|
72
|
+
- **Declarative Logic** using LogicBank rules
|
|
73
|
+
- **Traditional Procedural Logic** using event handlers
|
|
74
|
+
|
|
75
|
+
The comparison is based on implementing the same business requirements using both approaches in an order management system.
|
|
76
|
+
|
|
77
|
+
## Business Requirements
|
|
78
|
+
|
|
79
|
+
Our test case implements these common business rules:
|
|
80
|
+
|
|
81
|
+
1. **Copy unit_price from Product to Item**
|
|
82
|
+
2. **Calculate Item amount = quantity × unit_price**
|
|
83
|
+
3. **Calculate Order total = sum of Item amounts**
|
|
84
|
+
4. **Update Customer balance = sum of unshipped Order totals**
|
|
85
|
+
5. **Ensure Customer balance ≤ credit_limit**
|
|
86
|
+
6. **Validate Item quantity > 0**
|
|
87
|
+
7. **Log order events**
|
|
88
|
+
|
|
89
|
+
## Code Comparison
|
|
90
|
+
|
|
91
|
+
### LogicBank Declarative Rules (~5 lines)
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
# Business logic expressed as simple, readable rules
|
|
95
|
+
def declare_logic():
|
|
96
|
+
# Rule 1: Copy unit price from product to item
|
|
97
|
+
Rule.copy(derive=Item.unit_price, from_parent=Product.unit_price)
|
|
98
|
+
|
|
99
|
+
# Rule 2: Calculate item amount
|
|
100
|
+
Rule.formula(derive=Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
|
|
101
|
+
|
|
102
|
+
# Rule 3: Calculate order total
|
|
103
|
+
Rule.sum(derive=Order.amount_total, as_sum_of=Item.amount)
|
|
104
|
+
|
|
105
|
+
# Rule 4: Update customer balance
|
|
106
|
+
Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total,
|
|
107
|
+
where=lambda row: row.date_shipped is None)
|
|
108
|
+
|
|
109
|
+
# Rule 5: Validate credit limit
|
|
110
|
+
Rule.constraint(validate=Customer,
|
|
111
|
+
as_condition=lambda row: row.balance <= row.credit_limit,
|
|
112
|
+
error_msg="Customer balance exceeds credit limit")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Procedural Implementation (~220 lines)
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# Complex event handling with manual cascading
|
|
119
|
+
def handle_item_update(mapper, connection, target: models.Item):
|
|
120
|
+
session = Session.object_session(target)
|
|
121
|
+
|
|
122
|
+
# Get OLD version to detect changes
|
|
123
|
+
old_item = session.query(models.Item).get(target.id)
|
|
124
|
+
|
|
125
|
+
# Validate quantity
|
|
126
|
+
ProceduralBusinessLogic.validate_item_quantity(target)
|
|
127
|
+
|
|
128
|
+
# Handle product changes (CRITICAL BUG FIX)
|
|
129
|
+
if old_item and old_item.product_id != target.product_id:
|
|
130
|
+
ProceduralBusinessLogic.copy_unit_price_from_product(target, session)
|
|
131
|
+
|
|
132
|
+
# Recalculate item amount
|
|
133
|
+
ProceduralBusinessLogic.calculate_item_amount(target)
|
|
134
|
+
|
|
135
|
+
# Handle order changes (another potential bug!)
|
|
136
|
+
if old_item and old_item.order_id != target.order_id:
|
|
137
|
+
# Update OLD order total
|
|
138
|
+
old_order = session.query(models.Order).get(old_item.order_id)
|
|
139
|
+
if old_order:
|
|
140
|
+
ProceduralBusinessLogic.calculate_order_total(old_order, session)
|
|
141
|
+
# Update old customer balance
|
|
142
|
+
old_customer = session.query(models.Customer).get(old_order.customer_id)
|
|
143
|
+
if old_customer:
|
|
144
|
+
ProceduralBusinessLogic.update_customer_balance(old_customer, session)
|
|
145
|
+
ProceduralBusinessLogic.validate_credit_limit(old_customer)
|
|
146
|
+
|
|
147
|
+
# Update NEW order total
|
|
148
|
+
if target.order_id:
|
|
149
|
+
order = session.query(models.Order).get(target.order_id)
|
|
150
|
+
if order:
|
|
151
|
+
ProceduralBusinessLogic.calculate_order_total(order, session)
|
|
152
|
+
customer = session.query(models.Customer).get(order.customer_id)
|
|
153
|
+
if customer:
|
|
154
|
+
ProceduralBusinessLogic.update_customer_balance(customer, session)
|
|
155
|
+
ProceduralBusinessLogic.validate_credit_limit(customer)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Detailed Comparison
|
|
159
|
+
|
|
160
|
+
### 1. **Code Volume**
|
|
161
|
+
| Aspect | LogicBank | Procedural |
|
|
162
|
+
|--------|-----------|------------|
|
|
163
|
+
| Lines of Code | ~5 | ~220 |
|
|
164
|
+
| Complexity | Simple rule declarations | Complex event handling |
|
|
165
|
+
| Ratio | **44X MORE CONCISE** | Baseline |
|
|
166
|
+
|
|
167
|
+
### 2. **Maintainability**
|
|
168
|
+
|
|
169
|
+
**LogicBank:**
|
|
170
|
+
- ✅ Rules are self-documenting
|
|
171
|
+
- ✅ Business logic is immediately recognizable
|
|
172
|
+
- ✅ Changes are localized to specific rules
|
|
173
|
+
- ✅ Easy to add new rules without affecting existing ones
|
|
174
|
+
|
|
175
|
+
**Procedural:**
|
|
176
|
+
- ❌ Business logic buried in implementation details
|
|
177
|
+
- ❌ Hard to understand the complete business flow
|
|
178
|
+
- ❌ Changes require understanding entire event chain
|
|
179
|
+
- ❌ Risk of breaking existing functionality
|
|
180
|
+
|
|
181
|
+
### 3. **Error Handling & Edge Cases**
|
|
182
|
+
|
|
183
|
+
**LogicBank:**
|
|
184
|
+
- ✅ Automatic handling of all change scenarios
|
|
185
|
+
- ✅ Built-in transaction rollback
|
|
186
|
+
- ✅ No need to manually track old/new values
|
|
187
|
+
- ✅ Automatic cascade management
|
|
188
|
+
|
|
189
|
+
**Procedural:**
|
|
190
|
+
- ❌ Manual handling of every edge case
|
|
191
|
+
- ❌ Comments like "CRITICAL BUG FIX" indicate complexity
|
|
192
|
+
- ❌ Must manually track old values for comparison
|
|
193
|
+
- ❌ Easy to miss scenarios (product changes, order moves, etc.)
|
|
194
|
+
|
|
195
|
+
### 4. **Performance**
|
|
196
|
+
|
|
197
|
+
**LogicBank:**
|
|
198
|
+
- ✅ **Pruning**: Rules only fire when dependent attributes change
|
|
199
|
+
- ✅ **Optimization**: Uses SQL "adjustment" updates vs full recalculations
|
|
200
|
+
- ✅ **Minimal SQL**: Optimized query patterns
|
|
201
|
+
- ✅ **No N+1 problems**: Intelligent batching
|
|
202
|
+
|
|
203
|
+
**Procedural:**
|
|
204
|
+
- ❌ Multiple queries per operation
|
|
205
|
+
- ❌ Potential N+1 problems
|
|
206
|
+
- ❌ Full recalculations even for minor changes
|
|
207
|
+
- ❌ No automatic optimization
|
|
208
|
+
|
|
209
|
+
### 5. **Debugging & Observability**
|
|
210
|
+
|
|
211
|
+
**LogicBank:**
|
|
212
|
+
- ✅ Clear rule execution logs
|
|
213
|
+
- ✅ Shows rule chains and dependencies
|
|
214
|
+
- ✅ Easy to trace business logic flow
|
|
215
|
+
- ✅ Built-in logging with row state changes
|
|
216
|
+
|
|
217
|
+
**Procedural:**
|
|
218
|
+
- ❌ Hard to trace through event handlers
|
|
219
|
+
- ❌ Must manually add logging
|
|
220
|
+
- ❌ Difficult to understand execution flow
|
|
221
|
+
- ❌ Error messages don't relate to business rules
|
|
222
|
+
|
|
223
|
+
### 6. **Testing**
|
|
224
|
+
|
|
225
|
+
**LogicBank:**
|
|
226
|
+
- ✅ Test individual rules independently
|
|
227
|
+
- ✅ Clear rule execution reports
|
|
228
|
+
- ✅ Behave testing integration
|
|
229
|
+
- ✅ Rules map directly to test scenarios
|
|
230
|
+
|
|
231
|
+
**Procedural:**
|
|
232
|
+
- ❌ Must test entire event chain
|
|
233
|
+
- ❌ Hard to isolate specific logic
|
|
234
|
+
- ❌ Complex test setup required
|
|
235
|
+
- ❌ Brittle tests that break with changes
|
|
236
|
+
|
|
237
|
+
### 7. **Business Alignment**
|
|
238
|
+
|
|
239
|
+
**LogicBank:**
|
|
240
|
+
- ✅ Rules read like business requirements
|
|
241
|
+
- ✅ Business users can understand the logic
|
|
242
|
+
- ✅ Direct mapping from requirements to code
|
|
243
|
+
- ✅ Self-documenting business policies
|
|
244
|
+
|
|
245
|
+
**Procedural:**
|
|
246
|
+
- ❌ Implementation details obscure business logic
|
|
247
|
+
- ❌ Business users cannot read the code
|
|
248
|
+
- ❌ No clear mapping from requirements
|
|
249
|
+
- ❌ Business logic scattered across handlers
|
|
250
|
+
|
|
251
|
+
## Real-World Impact
|
|
252
|
+
|
|
253
|
+
### Development Time
|
|
254
|
+
- **LogicBank**: Write rules once, they work everywhere
|
|
255
|
+
- **Procedural**: Must consider every possible scenario upfront
|
|
256
|
+
|
|
257
|
+
### Risk Management
|
|
258
|
+
- **LogicBank**: Automatic handling reduces risk of bugs
|
|
259
|
+
- **Procedural**: High risk of missing edge cases
|
|
260
|
+
|
|
261
|
+
### Team Productivity
|
|
262
|
+
- **LogicBank**: New team members can quickly understand rules
|
|
263
|
+
- **Procedural**: Requires deep understanding of event system
|
|
264
|
+
|
|
265
|
+
### Business Agility
|
|
266
|
+
- **LogicBank**: Easy to modify rules as business changes
|
|
267
|
+
- **Procedural**: Changes require extensive testing and validation
|
|
268
|
+
|
|
269
|
+
## Conclusion
|
|
270
|
+
|
|
271
|
+
The comparison demonstrates that **LogicBank provides a 44X reduction in code complexity** while delivering:
|
|
272
|
+
|
|
273
|
+
- **Better Maintainability**: Rules are self-documenting and easy to modify
|
|
274
|
+
- **Higher Quality**: Automatic handling eliminates common bugs
|
|
275
|
+
- **Better Performance**: Built-in optimizations and pruning
|
|
276
|
+
- **Business Alignment**: Rules directly express business requirements
|
|
277
|
+
- **Faster Development**: Write less code, get more functionality
|
|
278
|
+
|
|
279
|
+
### The LogicBank Advantage
|
|
280
|
+
|
|
281
|
+
> **"Logic is declarative, not procedural"**
|
|
282
|
+
|
|
283
|
+
LogicBank represents a fundamental shift from asking **"How do I implement this?"** to **"What do I want to happen?"**
|
|
284
|
+
|
|
285
|
+
This declarative approach:
|
|
286
|
+
1. **Eliminates the complexity** of manual event handling
|
|
287
|
+
2. **Reduces maintenance burden** through automatic rule management
|
|
288
|
+
3. **Improves business alignment** with readable, requirements-based rules
|
|
289
|
+
4. **Accelerates development** with dramatically less code
|
|
290
|
+
|
|
291
|
+
The evidence is clear: **Declarative business logic is not just more concise—it's fundamentally superior for enterprise application development.**
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
*This comparison is based on actual implementations in the API Logic Server project, demonstrating real-world benefits of declarative business logic.*
|
|
Binary file
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
This describes how to use Logic; for more information, [see here](https://apilogicserver.github.io/Docs/Logic-Why).
|
|
2
|
+
|
|
3
|
+
> What is Logic: Multi-table Derivation and Constraint Rules, Extensible with Python
|
|
4
|
+
<br>Rules are:
|
|
5
|
+
<br>1. **Declared** in your IDE - 40X more concise
|
|
6
|
+
<br>2. **Activated** on server start
|
|
7
|
+
<br>3. **Executed** - *automatically* - on updates (using SQLAlchemy events)
|
|
8
|
+
<br>4. **Debugged** in your IDE, and with the console log
|
|
9
|
+
<br>For more on rules, [click here](https://apilogicserver.github.io/Docs/Logic-Why/).
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## 🚀 Quick Start, using the `basic_demo` sample database
|
|
14
|
+
|
|
15
|
+
You can provide prompts like this to CoPilot. This is a good approach for new users:
|
|
16
|
+
|
|
17
|
+
```text title="Declare Logic in Natural Language"
|
|
18
|
+
Create Business Logic for Use Case = Check Credit:
|
|
19
|
+
1. The Customer's balance is less than the credit limit
|
|
20
|
+
2. The Customer's balance is the sum of the Order amount_total where date_shipped is null
|
|
21
|
+
3. The Order's amount_total is the sum of the Item amount
|
|
22
|
+
4. The Item amount is the quantity * unit_price
|
|
23
|
+
5. The Item unit_price is copied from the Product unit_price
|
|
24
|
+
|
|
25
|
+
Use case: App Integration
|
|
26
|
+
1. Send the Order to Kafka topic 'order_shipping' if the date_shipped is not None.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Basic process:
|
|
30
|
+
1. Create a file such as `logic/logic_discovery/check_credit.py` (e.g., copy from `use_case.py`).
|
|
31
|
+
2. Paste the prompt above into CoPilot - use `docs/training` to generate logic
|
|
32
|
+
3. Paste the generated logic into `logic/logic_discovery/check_credit.py`
|
|
33
|
+
|
|
34
|
+
From the Natural Language, Copilot will create Python rules (you can also create these directly using code completion):
|
|
35
|
+
```python
|
|
36
|
+
if os.environ.get("WG_PROJECT"):
|
|
37
|
+
# Inside WG: Load rules from docs/expprt/export.json
|
|
38
|
+
load_verify_rules()
|
|
39
|
+
else:
|
|
40
|
+
# Outside WG: load declare_logic function
|
|
41
|
+
from logic.logic_discovery.auto_discovery import discover_logic
|
|
42
|
+
discover_logic()
|
|
43
|
+
|
|
44
|
+
# Logic from GenAI: (or, use your IDE w/ code completion)
|
|
45
|
+
from database.models import Product, Order, Item, Customer, SysEmail
|
|
46
|
+
|
|
47
|
+
# Ensure the customer's balance is less than their credit limit
|
|
48
|
+
Rule.constraint(validate=Customer, as_condition=lambda row: row.balance <= row.credit_limit, error_msg="Customer balance ({row.balance}) exceeds credit limit ({row.credit_limit})")
|
|
49
|
+
|
|
50
|
+
# Derive the customer's balance as the sum of order totals where not yet shipped.
|
|
51
|
+
Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None)
|
|
52
|
+
|
|
53
|
+
# Derive the order's total amount from the sum of item amounts.
|
|
54
|
+
Rule.sum(derive=Order.amount_total, as_sum_of=Item.amount)
|
|
55
|
+
|
|
56
|
+
# Calculate item amount based on quantity and unit price.
|
|
57
|
+
Rule.formula(derive=Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
|
|
58
|
+
|
|
59
|
+
# Copy unit price from product to item.
|
|
60
|
+
Rule.copy(derive=Item.unit_price, from_parent=Product.unit_price)
|
|
61
|
+
|
|
62
|
+
# Send order details to Kafka if order is shipped.
|
|
63
|
+
Rule.after_flush_row_event(on_class=Order, calling=kafka_producer.send_row_to_kafka, if_condition=lambda row: row.date_shipped is not None, with_args={'topic': 'order_shipping'})
|
|
64
|
+
|
|
65
|
+
# End Logic from GenAI
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Natural Language vs. IDE
|
|
69
|
+
|
|
70
|
+
If you are using WebGenAI, you can specify rules in Natural Language. You can also augment them in the IDE using code completion. There are some important usage guidelines.
|
|
71
|
+
|
|
72
|
+
> You should generally not alter any files in the `wg_rules` directory. For more information, see [WebGenAI](https://apilogicserver.github.io/Docs/WebGenAI/), and [WebGenAI Logic](https://apilogicserver.github.io/Docs/WebGenAI-CLI.md#natural-language-logic).
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Using Discovery
|
|
77
|
+
|
|
78
|
+
You can declare logic in `declare_logic.py`,
|
|
79
|
+
but that can lead to a lot of rules in 1 file.
|
|
80
|
+
|
|
81
|
+
A *best practice* is to create logic files in `logic/logic_discovery`,
|
|
82
|
+
named after the use case (e.g., `check_credit.py`).
|
|
83
|
+
|
|
84
|
+
The easiest way to to copy/paste `use_case.py` to a new file, then
|
|
85
|
+
add your logic either by Natural Language (use your Coding Assistant, such as CoPilot),
|
|
86
|
+
or your IDE's code completion.
|
|
87
|
+
|
|
88
|
+
<br>
|
|
89
|
+
|
|
90
|
+
## Examples
|
|
91
|
+
Examples from tutorial project:
|
|
92
|
+
* Examples drawn from [tutorial project](https://github.com/ApiLogicServer/demo/blob/main/logic/declare_logic.py)
|
|
93
|
+
* Use Shift + "." to view in project mode
|
|
94
|
+
|
|
95
|
+
You can [find the rules here](https://apilogicserver.github.io/Docs/Logic). Below, we explore the syntax of 3 typical rules.
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### 1. Multi-Table Derivations
|
|
100
|
+
|
|
101
|
+
This declares the Customer.Balance as the sum of the unshipped Order.AmountTotal:
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
Rule.sum(derive=models.Customer.Balance,
|
|
105
|
+
as_sum_of=models.Order.AmountTotal,
|
|
106
|
+
where=lambda row: row.ShippedDate is None)
|
|
107
|
+
```
|
|
108
|
+
It means the rule engine **watches** for these changes:
|
|
109
|
+
* Order inserted/deleted, or
|
|
110
|
+
* AmountTotal or ShippedDate or CustomerID changes
|
|
111
|
+
|
|
112
|
+
Iff changes are detected, the engine **reacts** by *adjusting* the Customer.Balance. SQLs are [optimized](#declarative-logic-important-notes).
|
|
113
|
+
|
|
114
|
+
This would **chain** to check the Customers' Constraint rule, described below.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
### 2. Constraints: lambda or function
|
|
119
|
+
|
|
120
|
+
Constraints are multi-field conditions which must be true for transactions to succeed (else an exception is raised). You can express the condition as a lambda or a function:
|
|
121
|
+
|
|
122
|
+
**As a lambda:**
|
|
123
|
+
```python
|
|
124
|
+
Rule.constraint(validate=models.Customer,
|
|
125
|
+
as_condition=lambda row: row.Balance <= row.CreditLimit, # parent references are supported
|
|
126
|
+
error_msg="balance ({row.Balance}) exceeds credit ({row.CreditLimit})")
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Or, as a function:**
|
|
130
|
+
```python
|
|
131
|
+
def check_balance(row: models.Customer, old_row: models.Customer, logic_row: LogicRow):
|
|
132
|
+
if logic_row.ins_upd_dlt != "dlt": # see also: logic_row.old_row
|
|
133
|
+
return row.Balance <= row.CreditLimit
|
|
134
|
+
else:
|
|
135
|
+
return True
|
|
136
|
+
|
|
137
|
+
Rule.constraint(validate=models.Customer,
|
|
138
|
+
calling=check_balance,
|
|
139
|
+
error_msg=f"balance ({row.Balance}) exceeds credit ({row.CreditLimit})")
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
### 3. Row Events: Extensible with Python
|
|
145
|
+
|
|
146
|
+
Events are procedural Python code, providing extensibility for declarative rules:
|
|
147
|
+
```python
|
|
148
|
+
def congratulate_sales_rep(row: models.Order, old_row: models.Order, logic_row: LogicRow):
|
|
149
|
+
pass # event code here - sending email, messages, etc.
|
|
150
|
+
|
|
151
|
+
Rule.commit_row_event(on_class=models.Order, calling=congratulate_sales_rep)
|
|
152
|
+
```
|
|
153
|
+
Note there are multiple kinds of events, so you can control whether they run before or after rule execution. For more information, [see here](https://apilogicserver.github.io/Docs/Logic-Type-Constraint).
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
## LogicRow: old_row, verb, etc
|
|
158
|
+
|
|
159
|
+
A key argument to functions is `logic_row`:
|
|
160
|
+
|
|
161
|
+
* **Wraps row and old_row,** plus methods for insert, update and delete - rule enforcement
|
|
162
|
+
|
|
163
|
+
* **Additional instance variables:** ins_upd_dlt, nest_level, session, etc.
|
|
164
|
+
|
|
165
|
+
* **Helper Methods:** are_attributes_changed, set_same_named_attributes, get_parent_logic_row(role_name), get_derived_attributes, log, is_inserted, etc
|
|
166
|
+
|
|
167
|
+
Here is an example:
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
"""
|
|
171
|
+
STATE TRANSITION LOGIC, using old_row
|
|
172
|
+
"""
|
|
173
|
+
def raise_over_20_percent(row: models.Employee, old_row: models.Employee, logic_row: LogicRow):
|
|
174
|
+
if logic_row.ins_upd_dlt == "upd" and row.Salary > old_row.Salary:
|
|
175
|
+
return row.Salary >= Decimal('1.20') * old_row.Salary
|
|
176
|
+
else:
|
|
177
|
+
return True
|
|
178
|
+
|
|
179
|
+
Rule.constraint(validate=models.Employee,
|
|
180
|
+
calling=raise_over_20_percent,
|
|
181
|
+
error_msg="{row.LastName} needs a more meaningful raise")
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Note the `log` method, which enables you to write row/old_row into the log with a short message:
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
logic_row.log("no manager for this order's salesrep")
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
## Declarative Logic: Important Notes
|
|
193
|
+
|
|
194
|
+
Logic *declarative*, which differs from conventional *procedural* logic:
|
|
195
|
+
|
|
196
|
+
1. **Automatic Invocation:** you don't call the rules; they execute in response to updates (via SQLAlchemy events).
|
|
197
|
+
|
|
198
|
+
2. **Automatic Ordering:** you don't order the rules; execution order is based on system-discovered depencencies.
|
|
199
|
+
|
|
200
|
+
3. **Automatic Optimizations:** logic is optimized to reduce SQLs.
|
|
201
|
+
|
|
202
|
+
* Rule execution is *pruned* if dependent attributes are not altered
|
|
203
|
+
* SQL is optimized, e.g., `sum` rules operate by *adjustment*, not expensive SQL `select sum`
|
|
204
|
+
|
|
205
|
+
These simplify maintenance / iteration: you can be sure new logic is always called, in the correct order.
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
## Debugging
|
|
210
|
+
|
|
211
|
+
Debug rules using **system-generated logic log** and your **IDE debugger**; for more information, [see here](https://apilogicserver.github.io/Docs/Logic-Use).
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
### Using the debugger
|
|
216
|
+
|
|
217
|
+
Use the debugger as shown below. Note you can stop in lambda functions.
|
|
218
|
+
|
|
219
|
+

|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
### Logic Log
|
|
224
|
+
|
|
225
|
+
Logging is performed using standard Python logging, with a logger named `logic_logger`. Use `info` for tracing, and `debug` for additional information (e.g., all declared rules are logged).
|
|
226
|
+
|
|
227
|
+
In addition, the system logs all rules that fire, to aid in debugging. Referring the the screen shot above:
|
|
228
|
+
|
|
229
|
+
* Each line represents a rule execution, showing row state (old/new values), and the _{reason}_ that caused the update (e.g., client, sum adjustment)
|
|
230
|
+
* Log indention shows multi-table chaining
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
## How Logic works
|
|
235
|
+
|
|
236
|
+
*Activation* occurs in `api_logic_server_run.py`:
|
|
237
|
+
```python
|
|
238
|
+
LogicBank.activate(session=session, activator=declare_logic, constraint_event=constraint_handler)
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
This installs the rule engine as a SQLAlchemy event listener (`before_flush`). So, Logic *runs* automatically, in response to transaction commits (typically via the API).
|
|
242
|
+
|
|
243
|
+
Rules plug into SQLAlchemy events, and execute as follows:
|
|
244
|
+
|
|
245
|
+
| Logic Phase | Why It Matters |
|
|
246
|
+
|:-----------------------------|:---------------------|
|
|
247
|
+
| **Watch** for changes at the attribute level | Performance - Automatic Attribute-level Pruning |
|
|
248
|
+
| **React** by recomputing value | Ensures Reuse - Invocation is automatic<br>Derivations are optimized (e.g. *adjustment updates* - not aggregate queries) |
|
|
249
|
+
| **Chain** to other referencing data | Simplifies Maintenance - ordering is automatic<br>Multi-table logic automation |
|