{"id":27125081,"url":"https://github.com/davidezechukwu/decode_api","last_synced_at":"2026-04-02T18:53:41.032Z","repository":{"id":286485552,"uuid":"961541289","full_name":"davidezechukwu/decode_api","owner":"davidezechukwu","description":"A NodeJS Typescript Loopback4 RESTful API","archived":false,"fork":false,"pushed_at":"2025-04-06T18:30:24.000Z","size":3547,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T19:32:10.612Z","etag":null,"topics":["loopback4","nodejs","restful","typescript","xslt"],"latest_commit_sha":null,"homepage":"https://decodeonline.app/api","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidezechukwu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-06T18:15:20.000Z","updated_at":"2025-04-06T18:30:30.000Z","dependencies_parsed_at":"2025-04-06T19:43:09.171Z","dependency_job_id":null,"html_url":"https://github.com/davidezechukwu/decode_api","commit_stats":null,"previous_names":["davidezechukwu/decode_api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidezechukwu%2Fdecode_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidezechukwu%2Fdecode_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidezechukwu%2Fdecode_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidezechukwu%2Fdecode_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidezechukwu","download_url":"https://codeload.github.com/davidezechukwu/decode_api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247669142,"owners_count":20976336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["loopback4","nodejs","restful","typescript","xslt"],"created_at":"2025-04-07T14:29:12.481Z","updated_at":"2026-04-02T18:53:41.021Z","avatar_url":"https://github.com/davidezechukwu.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Improved compatibility of back to top link: See: https://github.com/microsoft/TypeScript/pull/73 --\u003e\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![LinkedIn][Linkedin-shield]][Linkedin-url]\n\n## Overview\n\nThis platform is a commercially engineered full‑stack application framework designed to accelerate the delivery of modern digital products. Built entirely with **TypeScript**, it unifies the UX, API, and Data layers into a single, cohesive ecosystem that supports scalable, maintainable, and enterprise‑grade development.\n\nThe architecture incorporates industry‑proven design patterns and delivers a comprehensive suite of production‑ready capabilities, including:\n\n- Authentication and authorisation  \n- Email and in‑app notification infrastructure  \n- Automated testing  \n- CI/CD pipelines  \n- API gateway and service orchestration  \n- Background workers  \n- Localisation and globalisation  \n- Multi‑channel communication  \n- Extensible, pattern‑driven architecture  \n\nThis foundation enables organisations to rapidly build bespoke web and cross‑platform mobile applications while maintaining high standards of security, performance, and operational clarity.  \nThe Notification Engine, for example, is built using the **Strategy Pattern** and the **Open/Closed Principle**, allowing seamless integration of new channels such as Facebook Messenger, WhatsApp, or Twitter DM with minimal code.\n\nAlthough React’s functional‑only paradigm introduces architectural constraints, the use of **SWR Hooks** within the web client delivers exceptional data‑fetching performance and developer efficiency.\n\n---\n\n## Technology Direction\n\nWhile the current TypeScript‑based stack is powerful and commercially viable, the long‑term strategic direction is shifting toward the **.NET ecosystem** to meet enterprise requirements for:\n\n- Greater architectural stability  \n- Mature tooling and diagnostics  \n- Stronger AI and ML integration  \n- Enhanced security posture  \n- First‑class support for complex data modelling  \n\nFrameworks such as **Blazor (C#)** and **MAUI (C#)** offer a unified, enterprise‑ready environment for building cross‑platform applications with long‑term maintainability.\n\nLoopback remains a strong API framework, but limitations such as the absence of compound primary key support restrict advanced database normalisation (4NF/5NF) and reduce performance‑tuning flexibility for large datasets.  \nSimilarly, **Next.js**, while powerful, introduces frequent breaking changes that complicate long‑term enterprise planning.\n\nDespite these considerations, the current platform remains a highly capable, extensible, and commercially deployable solution for organisations seeking rapid development with modern tooling.\n\n---\n\n## Additional Insights\n\nFor more insights on database performance, architectural patterns, and object‑oriented JavaScript, visit:  \n**https://twitter.com/davidezechukwu**\n\n---\n\n## API Documentation\n\nComprehensive API documentation is available, covering all endpoints, parameters, and response formats.\n\n\u003e **Swagger Endpoint**  \n\u003e Explore and test API endpoints using the interactive Swagger interface.\n\n\u003e **TypeDoc Reference**  \n\u003e Detailed documentation generated using TypeDoc, covering all classes, functions, interfaces, and internal structures.\n\nStart building with the API today. If you have questions or encounter issues, feel free to  \n[reach out](mailto:davidezechukwu@hotmail.com?subject=Report%20a%20bug\u0026body=Details:%0A%0AExtra%20information:%0A).\n\n### 👉 Technical Documentation  \nhttps://decodeonline.app/api/docs/modules.html\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Built With\n\n* [![Typescript][Typescript]][Typescript-url]  \n* [![Loopback][Loopback.js]][Loopback-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Supported Databases\n\n* [![SQLServer][SQLServer]][SQLServer-url]  \n* [![Postgres][Postgres]][Postgres-url]  \n* [![MongoDB Badge][MongoDB]][MongoDB-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Getting Started\n\nA database is required before running the platform. You may:\n\n- Use the provided T‑SQL scripts (ANSI‑compatible and suitable for PostgreSQL), or  \n- Run `npm run migrate` to automatically create database objects and seed taxonomy tables.\n\n\u003e **Important:**  \n\u003e The database **must** be created manually beforehand, including the login credentials specified in the `.env` file. Neither the scripts nor the migration command create the database or user accounts.\n\nLoopback does not include native Up/Down migration support (unlike .NET Entity Framework), though third‑party libraries can be integrated if needed.\n\n### Local Development (Windows)\n\nYou will need:\n\n- Docker (if using containerised DB, Redis, or worker processes)  \n- Redis server (WSL2 Ubuntu Redis works well)  \n- Node.js `\u003e= 20.9.0`  \n- NPM `\u003e= 7.24.2`  \n- PowerShell with `Set-ExecutionPolicy RemoteSigned`  \n- Port forwarding enabled via  \n  `.\\api\\src\\_infrastructure\\docker\\os\\windows\\set-up-port-forwarding-for-wsl2.ps1`  \n- Updated hosts file using  \n  `.\\api\\src\\_infrastructure\\docker\\os\\windows\\hosts.txt`\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Roadmap\n\n- [x] SCRUM Project  \n- [x] Public Website  \n- [x] Administrative Website  \n- [ ] Android Native Application  \n- [ ] iOS Native Application  \n- [x] Multi‑language Support  \n  - [x] English  \n  - [x] French  \n  - [x] Punjabi  \n  - [ ] Spanish  \n  - [ ] German  \n- [x] Email \u0026 SMS communication  \n- [x] Documentation  \n- [x] Azure CI/CD  \n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Bugs\n\n[Report a bug](mailto:davidezechukwu@hotmail.com?subject=Report%20a%20bug\u0026body=Url:%0ADetails:%0A%0ABrowser:%0A%0AOS:%0AExtra%20information:%0A)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Request a Feature\n\n[Request a feature](mailto:davidezechukwu@hotmail.com?subject=Request%20a%20feature\u0026body=Details:%0A%0AExtra%20information:%0A)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Live Demo\n\n- API Explorer: https://decodelocal.com/api/explorer/  \n- Web Client: https://decodeonline.app/  \n\nAuthentication is required for protected API endpoints.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Reference\n\nhttps://decodeonline.app/api/docs/modules.html\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n## Contact\n\n- **Name:** David Ezechukwu  \n- **Email:** mailto:davidezechukwu@hotmail.com  \n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n---\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n[Typescript]: https://img.shields.io/badge/typescript-000000?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\n[Typescript-url]: https://www.typescriptlang.org/\n[Linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[Linkedin-url]: https://linkedin.com/in/davidezechukwu\n[Loopback.js]: https://img.shields.io/badge/loopback.js-000000?style=for-the-badge\u0026logo=loopbackdotjs\u0026logoColor=white\n[Loopback-url]: https://loopback.io/\n[SQLServer]: https://img.shields.io/badge/sqlserver-DD0031?style=for-the-badge\u0026logo=sqlserver\u0026logoColor=white\n[SQLServer-url]: https://www.microsoft.com/en-gb/sql-server/\n[Postgres]: https://img.shields.io/badge/postgres-DD0031?style=for-the-badge\u0026logo=postgres\u0026logoColor=white\n[Postgres-url]: https://www.postgresql.org/\n[MongoDB]: https://img.shields.io/badge/MongoDB-green?style=flat\u0026logo=mongodb\u0026logoColor=white\n[MongoDB-url]: https://www.mongodb.com/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidezechukwu%2Fdecode_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidezechukwu%2Fdecode_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidezechukwu%2Fdecode_api/lists"}