{"id":20644919,"url":"https://github.com/dhdsouza/re-ti-ajuda","last_synced_at":"2026-04-11T09:40:25.354Z","repository":{"id":178477278,"uuid":"660856790","full_name":"dhDSouza/re-ti-ajuda","owner":"dhDSouza","description":"Este repositório contém uma reengenharia do back-end do aplicativo TI-AJUDA realizada na disciplina de Programação IV do curso de Tecnólogo em Análise e Desenvolvimento de Sistemas no Instituto Federal de Educação, Ciência e Tecnologia Farroupilha - Campus São Vicente do Sul.","archived":false,"fork":false,"pushed_at":"2024-02-04T04:53:27.000Z","size":502,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-17T09:30:19.379Z","etag":null,"topics":["api-rest","docker-compose","eslint","express","githooks","husky-hooks","jest-tests","lint-staged","mysql","nodejs","postman-collection","sequelize"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dhDSouza.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-01T03:28:46.000Z","updated_at":"2024-08-25T03:22:31.000Z","dependencies_parsed_at":"2024-02-04T05:30:01.279Z","dependency_job_id":"7e4bd581-4ab8-403a-b41a-3ae1dca7b6d3","html_url":"https://github.com/dhDSouza/re-ti-ajuda","commit_stats":null,"previous_names":["dhdsouza/re-ti-ajuda"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhDSouza%2Fre-ti-ajuda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhDSouza%2Fre-ti-ajuda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhDSouza%2Fre-ti-ajuda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhDSouza%2Fre-ti-ajuda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhDSouza","download_url":"https://codeload.github.com/dhDSouza/re-ti-ajuda/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242714053,"owners_count":20173581,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","docker-compose","eslint","express","githooks","husky-hooks","jest-tests","lint-staged","mysql","nodejs","postman-collection","sequelize"],"created_at":"2024-11-16T16:18:02.800Z","updated_at":"2025-10-05T09:42:45.307Z","avatar_url":"https://github.com/dhDSouza.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# re-ti-ajuda\n\nEste repositório contém uma reengenharia do back-end do aplicativo TI-AJUDA realizada na disciplina de Programação IV do curso de Tecnólogo em Análise e Desenvolvimento de Sistemas no Instituto Federal de Educação, Ciência e Tecnologia Farroupilha - Campus São Vicente do Sul.\n\n## Sumário\n\n1. [Pré-requisitos](#pré-requisitos)\n2. [Visão geral da aplicação](#visão-geral-da-aplicação)\n3. [Estrutura do repositório](#estrutura-do-repositório)\n   - [Arquitetura Limpa](#arquitetura-limpa)\n   - [Camada de Apresentação](#camada-de-apresentação)\n   - [Camada de Infraestrutura](#camada-de-infraestrutura)\n   - [Camada de Domínio](#camada-de-domínio)\n   - [Camada Principal](#camada-principal)\n4. [Coleção do Postman](#coleção-do-postman)\n   - [Importando uma Coleção do Postman](#importando-uma-coleção-do-postman)\n5. [Como utilizar este projeto](#como-utilizar-este-projeto)\n6. [Docker Compose](#docker-compose)\n   - [Executando um banco de dados de desenvolvimento local com o Docker Compose](#executando-um-banco-de-dados-de-desenvolvimento-local-com-o-docker-compose)\n7. [Licença](#licença)\n\n## Pré-requisitos\n\nAntes de começar, verifique se você possui os seguintes pré-requisitos instalados:\n\n- Docker (opcional): [Instale o Docker](https://docs.docker.com/get-docker/)\n- Node.js: [Instale o Node.js](https://nodejs.org/)\n\n## Visão geral da aplicação\n\nA aplicação consiste nas seguintes funcionalidades:\n\n1. Cadastrar e/ou logar na aplicação.\n2. Consultar e/ou realizar perguntas.\n3. Consultar e/ou efeturar respostas.\n\n## Estrutura do repositório\n\nO repositório está organizado nas seguindo os princípios da arquitetura limpa.\n\n## Arquitetura Limpa\n\nA Arquitetura Limpa é um padrão arquitetural que promove a separação de responsabilidades dividindo sistemas de software em várias camadas, cada uma com uma responsabilidade específica. O objetivo principal da Arquitetura Limpa é tornar um sistema sustentável e flexível ao longo do tempo. Ela é especialmente útil para aplicações de grande escala que requerem desenvolvimento e manutenção contínuos.\n\nNo centro da Arquitetura Limpa está o princípio de desacoplamento. Isso significa que cada camada da aplicação deve ser independente das outras, para que as alterações feitas em uma camada não afetem as outras. Essa separação de responsabilidades é essencial para criar um sistema que seja fácil de entender, testar e modificar.\n\nExistem várias camadas em uma Arquitetura Limpa típica:\n\n### **Camada de Apresentação**\n\n Esta camada é responsável pelo manuseio de entrada e saída do usuário. Ela consiste em componentes de interface do usuário, como páginas da web, visualizações e controladores. Essa camada se comunica com a camada de Domínio por meio de interfaces e é responsável por traduzir a entrada e saída do usuário em conceitos do domínio.\n\n### **Camada de Infraestrutura**\n\nEsta camada é responsável por fornecer os detalhes técnicos do sistema. Ela inclui componentes como bancos de dados, serviços externos e sistema de arquivos. Essa camada é responsável por fornecer implementações para as interfaces definidas na camada de Domínio.\n\n### **Camada de Domínio**\n\nEsta camada contém a lógica de negócio da aplicação. Ela é responsável pelas entidades, casos de uso e serviços do domínio do sistema.\n\n### **Camada Principal**\n\nEsta camada coordena a interação entre as outras camadas. Ela é responsável por iniciar a aplicação e conectar as diferentes camadas. Ela pode conter o código de injeção de dependência que conecta as diferentes camadas.\n\n1. Camada de Apresentação:\n\n   - Controllers: Responsáveis por receber as requisições HTTP e coordenar a interação entre as rotas, middlewares e os serviços do domínio.\n   - Routes: Contém as definições das rotas e associação com os controladores correspondentes.\n   - Middlewares: Lidam com aspectos transversais, como autenticação, validação de entrada e tratamento de erros.\n\nEstrutura:\n```bash\n/controllers\n   answer-controller.js\n   question-controller.js\n   user-controller.js\n\n/routes\n   answer-routes.js\n   question-routes.js\n   user-routes.js\n\n/middlewares\n   auth-middleware.js\n   error-middleware.js\n   validation-middleware.js\n```\n\n2. Camada de Infraestrutura:\n\n   - Repositories: Responsáveis pela persistência e acesso aos dados.\n   - Config: Configuração e conexão com a base de dados.\n\nEstrutura:\n```bash\n/repositories\n   answer-repository.js\n   question-repository.js\n   user-repository.js\n\n/config\n   connection.js\n```\n\n3. Camada de Domínio:\n\n   - Models: Definição das entidades principais do domínio.\n   - Services: Contêm a lógica de negócio, aplicam regras do domínio e orquestram as operações relacionadas às entidades.\n   - Tests: Testes relacionados ao domínio e apresentação.\n\nEstrutura:\n```bash\n/models\n   answer.js\n   question.js\n   user.js\n\n/services\n   answer-service.js\n   question-service.js\n   user-service.js\n\n/tests\n   answer.test.js\n   question.test.js\n   user.test.js\n   answer-service.test.js\n   question-service.test.js\n   user-service.test.js\n```\n\n4. Camada Principal:\n   - server.js: Arquivo principal para iniciar o servidor.\n   - demais arquivos de configurações.\n\nEstrutura:\n```bash\nserver.js\n```\n\nUm dos benefícios da Arquitetura Limpa é que ela permite flexibilidade e adaptabilidade. Como cada camada é independente, as alterações podem ser feitas em uma camada sem afetar as outras. Isso significa que o sistema pode ser modificado e atualizado sem arriscar a estabilidade de toda a aplicação.\n\n## Coleção do Postman\n\nO Postman é uma ferramenta popular usada para o desenvolvimento e teste de APIs. Ele fornece uma interface amigável para enviar solicitações para APIs e inspecionar as respostas.\n\nUma coleção do Postman é um grupo de solicitações que podem ser organizadas em pastas e compartilhadas entre os membros da equipe. Nesta seção, veremos como importar e exportar uma coleção do Postman.\n\nNa raiz do projeto existe uma pasta `collections` nela contem o arquivo `re-ti-ajuda-postman-collection.json` este arquivo pode ser importado no Postman.\n\n### Importando uma Coleção do Postman\n\nPara importar uma coleção do Postman, siga estas etapas:\n\n1. Abra o Postman e clique no botão \"Importar\" no canto superior esquerdo da tela.\n2. Selecione o arquivo exportado que você deseja importar.\n3. Escolha o formato desejado (Postman Collection v1, Postman Collection v2, etc.) e clique em \"Importar\".\n4. A coleção estará disponível no seu espaço de trabalho do Postman.\n5. Usando coleções do Postman, você pode compartilhar facilmente solicitações de API e garantir consistência entre os membros da equipe.\n\n## Como utilizar este projeto\n\nSiga as instruções abaixo para configurar e executar o projeto:\n\n1. Instale as dependências necessárias usando o npm:\n\n```bash\nnpm install\n```\n\n2. Configure as variáveis de ambiente:\n\n    Crie um arquivo .env na raiz do projeto.\n    Adicione as seguintes variáveis de ambiente ao arquivo `.env` e preencha com as informações necessárias:\n\n```bash\nDB_HOST=''\nDB_USER=''\nDB_PASS=''\nDB_NAME=''\nDB_DIALECT=''\nDB_PORT=\nPORT=\nSECRET_KEY=''\n```\n3. Execute os testes (opcional):\n\n```bash\nnpm test\n```\nUma pasta `reports` será criada na raiz do projeto contendo um relatório detalhado em HTML dos testes realizados.\n\n4. Inicie o servidor:\n\n```bash\nnpm start\n```\n\nAgora você está pronto para começar a utilizar o projeto.\n\n## Docker Compose\n\nO Docker Compose é uma ferramenta que permite definir e executar aplicativos Docker com vários contêineres. Com o Docker Compose, você pode configurar e iniciar vários contêineres que fazem parte do seu aplicativo e gerenciar suas dependências e rede.\n\n### Executando um banco de dados de desenvolvimento local com o Docker Compose\n\nUm caso de uso comum para o Docker Compose é executar um banco de dados de desenvolvimento local. Por exemplo, este projeto usa o `MySQL`, você pode usar o Docker Compose para iniciar um contêiner do `MySQL` e conectar o projeto a ele.\n\nPara fazer isso, foi criado um arquivo `docker-compose.yaml` no diretório raiz do projeto.\n\n```yaml\n# Use root/example como credenciais de usuário/senha\nversion: '3.1'\n\nservices:\n\n  db:\n    image: mysql\n    # NOTA: O uso de \"mysql_native_password\" não é recomendado: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password\n    # (este é apenas um exemplo, não pretende ser uma configuração de produção)\n    command: --default-authentication-plugin=mysql_native_password\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: example\n\n  adminer:\n    image: adminer\n    restart: always\n    ports:\n      - 8080:8080\n```\n\nNesta configuração, definimos dois serviços chamados `db` e `adminer`, que utilizam imagens disponíveis no [Docker Hub](https://hub.docker.com/). Também especificamos que o contêiner deve ser sempre reiniciado em caso de falha `restart: always`\n\nPara iniciar o contêiner, execute o seguinte comando no mesmo diretório do seu arquivo docker-compose.yaml:\n\n```Bash\ndocker-compose up\n```\n\nIsso iniciará o contêiner do `MySQL` e exibirá seus logs no console. Você pode interromper o contêiner pressionando `Ctrl+C`.\n\n**OBS: Lembrando que por padrão o `MySQL` utiliza a porta `3306` e o `adminer` está utilizando a porta `8080`, então certifique-se de que estas portas não estão sendo utilizadas por outros serviços em sua máquina. Se você já possuí o `MySQL` e um gerenciador (ex: `phpmyadmin`) instalados em sua máquina, não é necessário o uso do docker-compose.**\n\n## Licença\n\nEste projeto está licenciado sob a [Licença MIT](./LICENSE). Você tem a liberdade de usar, modificar e distribuir este código.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhdsouza%2Fre-ti-ajuda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhdsouza%2Fre-ti-ajuda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhdsouza%2Fre-ti-ajuda/lists"}