https://github.com/jscodedevlopment/clean-architecure-back-end
Um backend em TypeScript com Clean Architecture e padrão de repositório é modular e escalável. Ele separa a lógica de negócios da infraestrutura e abstrai o acesso aos dados. Este boilerplate fornece uma base organizada com diretórios para entidades, casos de uso, repositórios e interfaces.
https://github.com/jscodedevlopment/clean-architecure-back-end
express pinned prisma typescript
Last synced: 2 months ago
JSON representation
Um backend em TypeScript com Clean Architecture e padrão de repositório é modular e escalável. Ele separa a lógica de negócios da infraestrutura e abstrai o acesso aos dados. Este boilerplate fornece uma base organizada com diretórios para entidades, casos de uso, repositórios e interfaces.
- Host: GitHub
- URL: https://github.com/jscodedevlopment/clean-architecure-back-end
- Owner: JsCodeDevlopment
- Created: 2024-06-06T01:15:19.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-06T00:16:27.000Z (almost 2 years ago)
- Last Synced: 2024-07-06T03:44:02.398Z (almost 2 years ago)
- Topics: express, pinned, prisma, typescript
- Language: TypeScript
- Homepage: https://clean-architecure-back-end-typescript.vercel.app
- Size: 1.69 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Boilerplate - Back-end Typescript + Clean Architecture
## 💬 Descrição.
Este projeto serve como um ponto de partida para a criação de aplicações backend robustas e bem estruturadas, utilizando as melhores práticas da Clean Architecture.
## 🚧 Estrutura do Projeto.
📂 **Esquema de pastas:** Este projeto segue os princípios da Clean Architecture, dividindo o código em camadas bem definidas:
```
src/
|- domain
|- infra
|- package
|- usecases
main.ts
domain/
|-| product
|-----| entity
|---------- product.entity.ts
|-----| gateway
|---------product.gateway.ts
infra/
|-| api
|----| express
|---------| routes
|--------------| products
|--------------------| create
|-------------------------| dto
|----------------------------- create.dto.ts
|----------------------------- create.route.express.ts
|--------------------| list
|------------------------| dto
|---------------------------- list.dto.ts
|------------------------- list.route.express.ts
|--------------- api.express.ts
|--------------- route.ts
|-| repositories
|--------| product
|------------- product.repository.ts
|-| api.ts
package/
|--| prisma
|------- prisma.ts
usecases/
|--| products
|-------| create
|-----------| dto
|--------------- create.input.dto.ts
|--------------- create.output.dto.ts
|------------ create.usecase.ts
|-------| list
|-----------| dto
|--------------- list.input.dto.ts
|--------------- list.output.dto.ts
|------------ list.usecase.ts
|--- usecase.ts
```
## ⚙ Resumo da Estrutura.
- **Entidade:** Define a estrutura e lógica de negócios básica da(s) Entidade(s).
- **Caso de Uso (UseCase):** Implementa a lógica de aplicação específica para criação, edição, deleção, listage ou atualização de uma entidade.
- **Configurações de Rota:** Define a abstração para as rotas HTTP.
- **Rota Específica:** Implementa a lógica da rota para executar uma ação feita no usecase.
- **Ponto de Entrada (Main):** Configura e inicializa a aplicação, incluindo a injeção de dependências.
## 🪀 Fluxo da Aplicação.
### Recepção da Requisição:
- O cliente faz uma requisição HTTP ao servidor Express.
- O servidor Express direciona a requisição para a rota apropriada com base no método HTTP e no caminho.
### Rota:
- A rota recebe a requisição e extrai os dados necessários.
- Cria um DTO de entrada Ex.: (CreateProductInputDto) com os dados extraídos.
- Chama o caso de uso Ex.: (CreateProductUsecase), passando o DTO de entrada.
### Caso de Uso (UseCase):
- O caso de uso recebe o DTO de entrada.
- Cria uma instância da entidade Product usando o método Ex.: Product.create.
- Interage com o repositório Ex.: (ProductGateway) para persistir o produto no banco de dados.
- Gera um DTO de saída Ex.: (CreateProductOutputDto) com os dados do produto criado.
### Repositório (Gateway):
- Implementa a interface do repositório definida no domínio.
- Usa Prisma para realizar operações no banco de dados.
- Retorna os dados necessários para o caso de uso.
### Resposta da Rota:
- A rota recebe o DTO de saída do caso de uso.
- Formata a resposta e envia de volta ao cliente.
## 🎯 Instalação.
1°→ Instalação das dependências:
```bash
npm install
# ou
yarn install
```
2°→ Inicialização do Prisma:
```bash
npx prisma init
```
3°→ Configure o banco de dados no arquivo `.env`:
```env
DATABASE_URL="postgresql://usuario:senha@localhost:5432/meubanco"
```
4°→ Execute as migrações do Prisma para configurar o banco de dados:
```bash
npx prisma migrate dev --name init
```
5°→ Execute a aplicação:
```bash
npm run dev
# ou
yarn dev
```
## 💻 Tecnologias Utilizadas.
## 👨💻 Desenvolvedor.
| Foto | Nome | Cargo |
| ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- | ------------------- |
|
| [Jonatas Silva](https://github.com/JsCodeDevlopment) | FullStack Developer |