diorgeneseugenio / fiap-tech-challenge-soat

Esse repositório é usado pelo grupo 30 da primeira turma do curso Pós-Tech FIAP em Arquitetura de software para a realização do Tech Challenge
Apache License 2.0
2 stars 3 forks source link

Clean Architeture - Organização #37

Closed EltonARodrigues closed 1 year ago

EltonARodrigues commented 1 year ago

Peguei a organização atual e tentei mudar para algo mais próximo da CA e termos um ponto de partida na discussão

src/
    drivers/  # Framework & drivers
        api/
            config/
                interfaces/
                    server.config.interface.ts
                server.config.ts
            controllers/
                categoriaController.ts
                metodoPagamentoController.ts
                pedidoController.ts
                produtoController.ts
                usuarioController.ts
            routers/
                categoriaRouter.ts
                index.ts
                pagamentoRouter.ts
                pedidoRouter.ts
                produtoRouter.ts
                usuarioRouter.ts
                schemas/
                    categoriaRouter.schema.ts
                    pagamentoRouter.schema.ts
                    pedidoRouter.schema.ts
                    produtoRouter.schema.ts
                    usuarioRouter.schema.ts
                utils.ts
                swaggerConfig.ts
            checkout/
                repository/
                    checkoutRepository.ts
        infra/
            database/
                config/
                    db.config.ts
                    interfaces/
                        db.config.interface.ts
                models/
                    categoriaModel.ts
                    faturaModel.ts
                    index.ts
                    itemPedidoModel.ts
                    metodoDePagamentoModel.ts
                    pedidoModel.ts
                    produtoImagensModel.ts
                    produtoModel.ts
                    usuarioModel.ts
                repository/
                    categoriaDatabaseRepository.ts
                    faturaDatabaseRepository.ts
                    metodoPagamentoDatabaseRepository.ts
                    pedidoDatabaseRepository.ts
                    produtoDatabaseRepository.ts
                    usuarioDatabaseRepository.ts
                seeders/
                    cria-categorias.ts
                    cria-metodo-de-pagamento.ts
    interfaces/ # interface adapters
        gateways/
            categoriaGateway.ts     
            metodoPagamentoGateway.ts     
            pedidoGateway.ts     
            produtoGateway.ts     
            usuarioGateway.ts     
        presents/
            categoriaGateway.ts     
            metodoPagamentoGateway.ts     
            pedidoGateway.ts     
            produtoGateway.ts     
            usuarioGateway.ts 
        controllers/
            categoriaController.ts     
            metodoPagamentoController.ts     
            pedidoController.ts     
            produtoController.ts     
            usuarioController.ts  
    application/ # Application Business Rules
        categoriaUseCase.ts     
        metodoPagamentoUseCase.ts     
        pedidoUseCase.ts     
        produtoUseCase.ts     
        usuarioUseCase.ts     
    domain/ # Enterprise Business Rules
        entities/
            valueObjects/
            categoria.ts
            fatura.ts
            itemPedido.ts
            metodoDePagamento.ts
            pedido.ts
            produto.ts
            usuario.ts
    shared/ # Compartilhado entre todo o projeto 
        // adicionar log
        // tratativa de error
JulianaAmoasei commented 1 year ago

Opa gente, desculpem a demora. Sobre a sugestão acima, meus comentários são:

vou fazer um rascunho e postar aqui.

JulianaAmoasei commented 1 year ago

Segue o rascunho de nova organização:

├─ src
│  ├─ adapters
│  │  ├─ driven
# aqui estou confusa com esse checkout
│  │  │  ├─ checkout
│  │  │  │  └─ repository
│  │  │  │     └─ checkoutRepository.ts
# podemos manter a pasta infra ou deixar tudo direto em driven
│  │  │  └─ infra
│  │  │     ├─ config
│  │  │     │  ├─ db.config.ts
│  │  │     │  └─ interfaces
│  │  │     │     └─ db.config.interface.ts
│  │  │     ├─ models
│  │  │     │  ├─ categoriaModel.ts
│  │  │     │  ├─ faturaModel.ts
│  │  │     │  ├─ index.ts
│  │  │     │  ├─ itemPedidoModel.ts
│  │  │     │  ├─ metodoDePagamentoModel.ts
│  │  │     │  ├─ pedidoModel.ts
│  │  │     │  ├─ produtoImagensModel.ts
│  │  │     │  ├─ produtoModel.ts
│  │  │     │  └─ usuarioModel.ts
│  │  │     ├─ repository
│  │  │     │  ├─ categoriaDatabaseRepository.ts
│  │  │     │  ├─ faturaDatabaseRepository.ts
│  │  │     │  ├─ metodoPagamentoDatabaseRepository.ts
│  │  │     │  ├─ pedidoDatabaseRepository.ts
│  │  │     │  ├─ produtoDatabaseRepository.ts
│  │  │     │  └─ usuarioDatabaseRepository.ts
│  │  │     └─ seeders
│  │  │        ├─ cria-categorias.ts
│  │  │        └─ cria-metodo-de-pagamento.ts
│  │  └─ driver
# parte da API exposta e suas implementações
│  │     └─ api
│  │        ├─ config
│  │        │  ├─ interfaces
│  │        │  │  └─ server.config.interface.ts
│  │        │  └─ server.config.ts
│  │        ├─ controllers
│  │        │  ├─ categoriaController.ts
│  │        │  ├─ metodoPagamentoController.ts
│  │        │  ├─ pedidoController.ts
│  │        │  ├─ produtoController.ts
│  │        │  └─ usuarioController.ts
│  │        ├─ routers
│  │        │  ├─ categoriaRouter.ts
│  │        │  ├─ index.ts
│  │        │  ├─ pagamentoRouter.ts
│  │        │  ├─ pedidoRouter.ts
│  │        │  ├─ produtoRouter.ts
│  │        │  ├─ usuarioRouter.ts
│  │        │  └─ utils.ts
# passei os schemas pra fora de routers mas pode ficar onde está
│  │        ├─ schemas
│  │        │  ├─ categoriaRouter.schema.ts
│  │        │  ├─ pagamentoRouter.schema.ts
│  │        │  ├─ pedidoRouter.schema.ts
│  │        │  ├─ produtoRouter.schema.ts
│  │        │  └─ usuarioRouter.schema.ts
│  │        └─ swaggerConfig.ts
# troquei domain por entities
│  ├─ entities
│  │  ├─ categoria.ts
│  │  ├─ fatura.ts
│  │  ├─ itemPedido.ts
│  │  ├─ metodoDePagamento.ts
│  │  ├─ pedido.ts
│  │  ├─ produto.ts
│  │  ├─ usuarios.ts
│  │  └─ valueObjects
│  │     ├─ cpf.ts
│  │     └─ email.ts
│  ├─ index.ts
# troquei applications por useCases
│  └─ useCases
│     ├─ repositories
│     │  ├─ categoriaRepository.ts
│     │  ├─ checkoutRepository.ts
│     │  ├─ faturaRepository.ts
│     │  ├─ metodoPagamentoRepository.ts
│     │  ├─ pedidoRepository.ts
│     │  ├─ produtoRepository.ts
│     │  └─ usuarioRepository.ts
│     └─ services
│        ├─ categoriaService.ts
│        ├─ metodoPagamentoService.ts
│        ├─ pedidoService.ts
│        ├─ pedidoService.type.ts
│        ├─ produtoService.ts
│        └─ usuarioService.ts
├─ tsconfig.json
├─ yarn.lock
├─ commitlint.config.js
├─ docker-compose.yaml
├─ Dockerfile
├─ LICENSE
├─ package.json
├─ README.md

Eu pesquisei um monte de modelos e exemplos de repositórios de projetos e na real não vejo muita coisa para mudar do nosso, pelo menos nada muito significativo.

Aí entraria depois a parte de refatorar os módulos, ver se tem mais coisa para separar, se isso geraria outras camadas, etc.