Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pvarentsov/typescript-clean-architecture
It is my attempt to create Clean Architecture based application in TypeScript.
https://github.com/pvarentsov/typescript-clean-architecture
back-end clean-architecture clean-code e2e-testing nestjs nodejs typeorm typescript unit-testing
Last synced: 5 days ago
JSON representation
It is my attempt to create Clean Architecture based application in TypeScript.
- Host: GitHub
- URL: https://github.com/pvarentsov/typescript-clean-architecture
- Owner: pvarentsov
- License: mit
- Created: 2020-07-07T17:19:36.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-17T19:30:04.000Z (about 1 year ago)
- Last Synced: 2024-10-01T15:02:35.817Z (2 months ago)
- Topics: back-end, clean-architecture, clean-code, e2e-testing, nestjs, nodejs, typeorm, typescript, unit-testing
- Language: TypeScript
- Homepage:
- Size: 5.24 MB
- Stars: 1,395
- Watchers: 17
- Forks: 175
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nestjs - TypeScript Clean Architecture - Clean Architecture based application with NestJS, PostgreSQL and TypeORM. (Resources)
README
# Typescript Clean Architecture
It is my attempt to create Clean Architecture based application in Typescript.
[![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](./LICENSE)
![Build](https://github.com/pvarentsov/typescript-clean-architecture/workflows/Build/badge.svg)
## 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](./docker-compose.local.yaml):
* Run `docker-compose -f docker-compose.local.yaml up -d`
* Stop `docker-compose -f docker-compose.local.yaml stop`
Services:
1. PostgreSQL - [Credentials](./env/local.pg.env).
2. Minio - [Credentials](./env/local.minio.env).
* **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](./env/local.app.env).
* **Running*** Start application - `npm run start`
* Expose [./env/local.app.env](./env/local.app.env) and start application - `npm run start:local`
API documentation will be available on the endpoint GET http://localhost:3005/documentation
* **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*** IntelliJ IDEA:
1. [Launch Configuration](./asset/IdeaRunConfiguration.png)
2. [Test Configuration](./asset/IdeaTestConfiguration.png)
* Visual Studio Code:
1. [Launch Configuration](./.vscode/launch.json)
2. [Test Configuration](./.vscode/settings.json)