"That is not dead which can eternal lie, and with strange aeons even death may die" Abdul Alhazred, "The Nameless City" (1921) |
---|
This is my personal project to research about project patterns in Node.js
Azathoth is the greatest old one, from my favorite author H.P. Lovecraft.
Create an API to enable system users to upload and retrieve images securely provided that they are authenticated.
- Independent of Frameworks: The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints.
- Testable: The business rules can be tested without the UI, Database, Web Server, or any other external element. Independent of UI. The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules.
- Independent of Database: You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.
- Independent of any external agency: business rules simply don’t know anything at all about the outside world.
This project contains tons of overengeering.
- Detach domain from controller
- Error handler: there's only one success flow, so otherwise, throw errors
- Code oriented to IDE (mainly VS Code) autocompletion and IntelliSense
- Dependency injection
- Please, tests without
rewire
- Tests looking only to the function signature
- Please, tests without
- Async it all
- Users API
- Create
- Retrieve
- Update
- Delete
- Images API
- Create/Upload
- Retrieve
- Update
- Delete
- Auth
- Login
- Logout
-
Tests
- Aplly TDD
- Implement suite
- Unit tests
- Integrated tests
-
Debugger
- From VS Code
- Local
- Inside Docker
-
Security
- Use Helmet
- Sensitive information
- Auth tests
-
Cache
- Redis
-
Interfaces
- HTTP
- CLI
- Lambda
-
Persistences
- Sequelize
- SQLite Memory
- Main class refactory
- Postgres
- File
-
Domains
- Validations with Joi
- Wrap Joi
- Wrap Sequelize
-
Profiles
- PROD
- Dev
-
Container
- Docker
- Docker compose
- Postgres
- Redis
- Push to Docker Hub
-
CI/CD
- Circle CI
- Badge
- Version generation
- Diff log
- Circle CI
-
Code templates
- Code template library
- Domains and tests
- Controllers and tests
- Interfaces and tests
-
Logs
-
Performance
- Stress test
- APM
- Dashboard
-
Documentation
- Links
- Layers structure
- Technologies
- Install GIT
- Install NPM and Node
- Clone the repo:
git clone https://github.com/jotafeldmann/azathoth.git
cd azathoth
make install
make dev
-
Check interfaces
- Use a TLS termination proxy on DMZ (maybe Nginx) due to Node.js and HTTPS/TLS crypto performance issues
- Clean Code, by Uncle Bob
- Onion architecture
- SOLID
- DRY
- YAGNI
- KISS