Skip to content

Latest commit

 

History

History
158 lines (117 loc) · 4.65 KB

README.md

File metadata and controls

158 lines (117 loc) · 4.65 KB

Azathoth

Azathoth "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.

Goals

As application

Create an API to enable system users to upload and retrieve images securely provided that they are authenticated.

As project and research

  • 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.

Disclaimer

This project contains tons of overengeering.

Guidelines

  • 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
  • Async it all

Services

  • Users API
    • Create
    • Retrieve
    • Update
    • Delete
  • Images API
    • Create/Upload
    • Retrieve
    • Update
    • Delete
  • Auth
    • Login
    • Logout

TODO

  • Tests

  • Debugger

    • From VS Code
    • Local
    • Inside Docker
  • Security

    • Use Helmet
    • Sensitive information
    • Auth tests
  • Cache

    • Redis
  • Interfaces

    • HTTP
    • CLI
    • Lambda
  • Persistences

  • 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
  • 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

Instalation

How to dev

  • make dev

How to use

Improvements

References