Skip to content

Personal project to research about project patterns in Node.js

Notifications You must be signed in to change notification settings

jotafeldmann/azathoth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Personal project to research about project patterns in Node.js

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published