Skip to content

Latest commit

 

History

History
89 lines (64 loc) · 2.91 KB

README.md

File metadata and controls

89 lines (64 loc) · 2.91 KB

Server

The system design is heavily inspired by Clean Architecture, DDD and Layered Architecture concepts.

sysarch

  • Controller - Handling requests, parsing and data validation.
  • Service - Contains the business logic.
  • Repository - Data layer managing communication with the database.

Folder structure

├── src
   ├── app  // application configuration, DI and setup
   ├── core // holds all domain packages
      ├── domain1
         ├── http      // transport/presenter layer handling data I/O, validation and routing.
         ├── repo      // data layer managing data fetching from db, cache etc.
         ├── mocks     // mocks for testing
         ├── service   // buisness logic layer
         └── domain.ts // domain entities, interfaces and type definitions
      ├── domain2
      └── ...
   ├── pkg // foundation packages for supporting core packages with db, logging, auth etc.
      ├── db          // db connection, migrations and helpers
      ├── error       // internal error definitions
      ├── logger      // logger setup
      ├── middleware  // middlewares handling permissions, logging, auth etc.
      ├── web         // response renderer for processing responses
      └── ...
   ├── cli.ts   // cli for creating users and generating jwts for server side development
   └── index.ts // application entrypoint
└── README.md

Requirements

Database

Seup

Migrations

Database migrations is handled using dbmate and can be run using cli or docker. Migration files can be found in src/pkg/db/migrations.

Using dbmate cli

Migrate to latest database version

pnpm migrate up

Rollback one version

pnpm migrate rollback

Create new migration file

pnpm migrate new <name>

Using Docker

docker run --rm -it --network=host -v "$(pwd)/src/pkg/db:/db" --env-file=.env ghcr.io/amacneil/dbmate:1 --no-dump-schema <COMMAND>

Access Prod DB

Prod database can be accessed using the gcloud cli by installing the following component

gcloud components install cloud_sql_proxy

WARNING: This is the production database and should not be manipulated manually

cloud_sql_proxy -instances=<your-gcp-project-id>:<gcp-region>:prod=tcp:5432