typescript-clean-architecture
typescript-clean-architecture copied to clipboard
It is my attempt to create Clean Architecture based application in TypeScript.
Typescript Clean Architecture
It is my attempt to create Clean Architecture based application in Typescript.
IPoster
IPoster is a simple fictional application that allows users to publish posts.
Main Entities
- User
- Post
- Media
Use Cases
-
User -> IPoster
-
User
can createGuest
account inIPoster
-
User
can createAuthor
account inIPoster
-
-
User -> Media
-
Author
can create ownMedia
-
Author
can edit ownMedia
-
Author
can get ownMedia
-
Author
can get ownMedia
list -
Author
can remove ownMedia
-
-
User -> Post
-
Author
can create own draftPost
-
Author
can edit ownPost
-
Author
can attach an imageMedia
to ownPost
-
Author
can publish ownPost
-
Author
can get ownPost
-
Author
can get ownPost
list -
Author
can remove ownPost
-
Author
andGuest
can get publishedPost
-
Author
andGuest
can get list with publishedPosts
-
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:
- PostgreSQL - Credentials.
- Minio - Credentials.
- Run
-
Building
- Install libraries -
npm install
- Build application -
npm run build
- Install libraries -
-
Configuring
Configuring is based on the environment variables. All environment variables must be exposed before starting the application. See all environment variables.
-
Running
-
Start application -
npm run start
-
Expose ./env/local.app.env and start application -
npm run start:local
-
-
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
- Prepare environment -
-
Libraries checking
- Show new libraries' versions -
npm run lib:check
- Upgrade libraries' versions -
npm run lib:upgrade
- Show new libraries' versions -
-
IDE
-
IntelliJ IDEA:
- Launch Configuration
- Test Configuration
-
Visual Studio Code:
- Launch Configuration
- Test Configuration
-