Skip to content

Instantly share code, notes, and snippets.

@Josimar16
Last active December 1, 2023 23:20
Show Gist options
  • Save Josimar16/f37c9e8e8da59ba790c869e5cc261a67 to your computer and use it in GitHub Desktop.
Save Josimar16/f37c9e8e8da59ba790c869e5cc261a67 to your computer and use it in GitHub Desktop.
Estruturação da arquitetura de pasta do back-end
## Backend em REST e Graphql
backend
*** Pasta types para guardar novas tipagens do TypeScript ***
|__ @types
*** Adicionar nova tipagem para a lib do express na request ***
|__ express.d.ts
*** Pasta de configuração de serviços ***
|__ config
*** Arquivo de configuração para a autenticação ***
|__ auth.ts
*** Arquivo de configuração para a fila de cache ***
|__ cache.ts
*** Arquivo de configuração para upload de imagens ***
|__ upload.ts
*** Arquivo de configuração para envio de e-mails ***
|__ mail.ts
*** Arquivo de configuração para o graphql ***
|__ graphql.ts
*** Pasta para guardar as imagens ***
|__ tmp
*** Pasta para uploads permanentes, para criar um volume ***
*** Não pode ser enviada para o github ***
|__ uploads
*** Na raiz da pasta tmp guarda os arquivos temporariamente ***
|__ .gitkeep
*** Pasta source onde esta todo o projeto ***
|__ src
*** Organização de todos os modules e regra de negocio da aplicação ***
|__ modules
*** Modulo de Usuario, separado por negocio e nao por entidade ***
|__ users
*** Todas as tipagens de dados vindo da requisição ***
|__ dtos
*** Arquivo de interface para as tipagens ***
|__ ICreateUserDTO.input.ts
*** Camada de infra onde fica a comunicação com o DB e as requests ***
|__ infra
*** Camada HTTP para receber e tratar a request ***
|__ http
*** Tratativas da requição onde trabalha com o body, params e query ***
|__ controllers
*** Arquivo de controller separado por dominio(negocio), recomendasse ter apenas 6 metodos Index, Show, Create, Update, Patch e Delete ***
*** Não pode ter dois metodos iguais, exemplo: Update() e Update() ***
*** Sempre nomear as funções com esses nomes: Index, Show, Create, Update, Patch e Delete. ***
|__ UsersController.ts
*** Pasta dos middlewares ***
|__ middlewares
*** Arquivo de autenticação para saber se o usuario esta logado ***
|__ ensureAuthenticated.ts
*** Configuração nos nomes das rotas por dominio ***
|__ routes
*** Arquivo de router separado por dominio(negocio), recomendasse ter apenas 6 metodos Index, Show, Create, Update, Patch e Delete ***
*** Não pode ter dois metodos iguais, exemplo: Update() e Update(), tratar apenas rotas desse dominio ***
*** Sempre nomear as funções com esses nomes: Index, Show, Create, Update, Patch e Delete. ***
|__ users.routes.ts
|__ graphql
*** Tratativas da queries e mutations onde trabalha com o Args e Guards ***
|__ controllers
*** Arquivo de controller separado por dominio(negocio), recomendasse ter apenas 6 metodos Index, Show, Create, Update, Patch e Delete ***
*** Não pode ter dois metodos iguais, exemplo: Update() e Update() ***
*** Sempre nomear as funções com esses nomes: Index, Show, Create, Update, Patch e Delete. ***
|__ UsersController.ts
*** Pasta dos middlewares ***
|__ middlewares
*** Arquivo de autenticação para saber se o usuario esta logado ***
|__ ensureAuthenticated.ts
*** Configuração nos nomes das queries e mutations por dominio ***
|__ resolvers
*** Arquivo de resolver separado por dominio(negocio), recomendasse ter apenas 6 metodos Index, Show, Create, Update, Patch e Delete ***
*** Não pode ter dois metodos iguais, exemplo: Update() e Update() ***
|__ users.resolvers.ts
*** Camada de ORM para a comunicação com o DB ***
|__ typeorm
*** Entidades do DB que tem relação com o dominio(negocio) ***
|__ entities
*** Separar por tabela ***
|__ User.ts
*** Pasta para guardar todos metodos feitos em cima da entidade ***
|__ repositories
*** Metodos que serão realizados em cima da tabela, tambem separado por entidade e sempre implementado de ../../repositories/IEntidadeRepository.ts ***
|__ UsersRepository.ts
*** Pasta provider que só sera usada apenas nesse modulo ***
|__ providers
|__ NomeProvider
|__ fakes
|__ FakeNomeProvider.ts
|__ implementations
|__ NomeProvider.ts
|__ models
|__ INomeProvider.ts
|__ index.ts
*** Pasta para repositorio fake e interface de implementação ***
|__ repositories
*** Repositorio Fake para realizar todos os metodos do repositorio sem guardar no banco, sera usado nos testes ***
|__ fakes
*** Clone de todos os metodos, sempre implementando da interface IUsersRepository ***
|__ FakeUsersRepository.ts
*** Interface criada para informar quais metodos teram nos repositorios que se conectam com o DB ***
|__ IUsersRepository.ts
*** Pasta para ficar toda a regra de negocio do dominio ***
|__ services
*** Teste unitário para essa regra de negocio ***
|__ CreateUserService.spec.ts
*** Cada controler chama um service, que chama um ou varios repositorios, nao pode haver comunicações com o DB ***
|__ CreateUserService.ts
*** Templates de emails que nao serao compartilhado entre modulos ***
|__ views
*** Template criado com handlebars ***
|__ forgot_password.hbs
*** Pasta que serve para compartilhar servicos entre os modulos da aplicação ***
|__ shared
*** Pasta das implementações das libs de terceiros e configuração das injeções de dependencias ***
|__ container
*** Pasta das implementações das libs de terceiros ***
|__ providers
*** Pasta do provider ***
|__ NomeProvider
*** Payload a ser recebido para tipagem de dado ***
|__ dtos
|__ INomeDTO.ts
*** Configuração fake para o provider, será usado nos testes ***
|__ fakes
|__ FakeNomeProvider.ts
*** Declaração de varias implementações de um provider, pode ter mais de uma lib para o mesmo serviço ***
*** Sempre implementar os metodos do model ***
|__ implementations
|__ NomeProvider.ts
*** Interface criada para definição dos metodos usados nos implements e fakes ***
|__ models
|__ INomeProvider.ts
*** Exportação de todas as implementations ***
|__ index.ts
*** Exportação de todos os providers ***
|__ index.ts
*** Exportações de todos os providers ***
|__ index.ts
*** Pasta de configuração dos errors que acontece na API ***
|__ errors
*** Arquivo de configuração ***
|__ AppError.ts
*** Camada de infra onde fica a configuração do banco de dados e da Request ***
|__ infra
*** Camada de configuração do http para criar grupos de rotas e os middlewares geral que pode ser compartilhado entre os modulos ***
|__ http
*** Configuração dos middlewares e prevenção de ataques ***
|__ middlewares
rateLimiter.ts
*** Configuração do grupo de rotas ***
|__ routes
|__ index.ts
*** Configuração do DB e das migrations ***
|__ typeorm
*** Configuração de todas as migrations para realizar mudanças no banco ***
|__ migrations
*** Arquivo de configuração do DB, entities e migrations ***
|__ index.ts
*** Arquivo de modularização do NestJs ***
*** Inicialização do DB, graphql e injeção dos modulos da aplicação ***
|__ app.module.ts
*** Arquivo de inicialização do projeto ***
*** Definição de porta e cors ***
|__ main.ts
*** Arquivo de configuração das variaveis de ambiente ***
*** Não pode ser enviada para o github ***
|__ .env
*** Arquivo de exemplo para a configuração das variaveis de ambiente ***
|__ .env.example
*** Arquivo de geração automatica com os types, queries e mutations do graphql ***
|__ schema.gql
segue os links para ter como base:
https://github.com/Josimar16/boilerplate/tree/master/backend
https://github.com/Josimar16/api-nestjs-graphql/tree/develop/backend
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment