Last active
December 1, 2023 23:20
-
-
Save Josimar16/f37c9e8e8da59ba790c869e5cc261a67 to your computer and use it in GitHub Desktop.
Estruturação da arquitetura de pasta do back-end
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 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