Skip to content

It is my attempt to create Clean Architecture based application in TypeScript.

License

Notifications You must be signed in to change notification settings

pvarentsov/typescript-clean-architecture

Repository files navigation

Typescript Clean Architecture

It is my attempt to create Clean Architecture based application in Typescript.

License: MIT Build

IPoster

IPoster is a simple fictional application that allows users to publish posts.

Main Entities

  1. User
  2. Post
  3. Media

Use Cases

  • User -> IPoster

    1. User can create Guest account in IPoster
    2. User can create Author account in IPoster
  • User -> Media

    1. Author can create own Media
    2. Author can edit own Media
    3. Author can get own Media
    4. Author can get own Media list
    5. Author can remove own Media
  • User -> Post

    1. Author can create own draft Post
    2. Author can edit own Post
    3. Author can attach an image Media to own Post
    4. Author can publish own Post
    5. Author can get own Post
    6. Author can get own Post list
    7. Author can remove own Post
    8. Author and Guest can get published Post
    9. Author and Guest can get list with published Posts

Local Development

  • Docker

    All necessary external services are described in the ./docker-compose.local.yml:

    • Run docker-compose -f docker-compose.local.yaml up -d
    • Stop docker-compose -f docker-compose.local.yaml stop

    Services:

    1. PostgreSQL - Credentials.
    2. Minio - Credentials.
  • Building

    1. Install libraries - npm install
    2. Build application - npm run build
  • Configuring

    Configuring is based on the environment variables. All environment variables must be exposed before starting the application. See all environment variables.

  • Running

  • Linting

    • npm run lint
  • Testing

    • Prepare environment - docker-compose -f docker-compose.test.yaml up -d
    • Run tests - npm run test
    • Run tests with coverage - npm run test:cov
  • Libraries checking

    • Show new libraries' versions - npm run lib:check
    • Upgrade libraries' versions - npm run lib:upgrade
  • IDE