{"id":20876830,"url":"https://github.com/brawlingthebits/omni","last_synced_at":"2026-04-24T06:33:36.307Z","repository":{"id":238923253,"uuid":"795503260","full_name":"brawlingthebits/omni","owner":"brawlingthebits","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-08T21:53:12.000Z","size":233,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-27T16:13:46.893Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brawlingthebits.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-03T12:27:36.000Z","updated_at":"2024-05-08T21:53:15.000Z","dependencies_parsed_at":"2024-05-08T22:50:50.939Z","dependency_job_id":null,"html_url":"https://github.com/brawlingthebits/omni","commit_stats":null,"previous_names":["brawlingthebits/omni"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brawlingthebits/omni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Fomni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Fomni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Fomni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Fomni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brawlingthebits","download_url":"https://codeload.github.com/brawlingthebits/omni/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brawlingthebits%2Fomni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32212807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-18T06:55:07.432Z","updated_at":"2026-04-24T06:33:36.290Z","avatar_url":"https://github.com/brawlingthebits.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Documentação do aplicativo Omni\n\n## 1. Visão geral\n\nO Omni é um aplicativo da Web do Node.js que oferece suporte à autenticação de usuários e à comunicação em tempo real por meio de uma interface de bate-papo. Ele foi projetado para demonstrar operações fundamentais de backend, interação em tempo real com o Socket.io e uso da API REST para gerenciamento de usuários.\n\n## 2. Stack de tecnologia\n\n- **Node.js**: O ambiente de tempo de execução para a lógica do lado do servidor.\n- **Express**: Estrutura usada para criar o servidor da Web.\n- **Sequelize**: ORM para interagir com o banco de dados MySQL.\n- **MySQL**: O banco de dados relacional para armazenar dados do usuário e mensagens de bate-papo.\n- **Socket.io**: Permite a comunicação bidirecional em tempo real entre clientes da Web e o servidor.\n- **JWT**: Usado para proteger e autenticar solicitações de API e conexões de soquete.\n- **Passport**: Middleware de autenticação para Node.js.\n- **Jest**: Estrutura de teste para executar e gerenciar testes.\n- **Supertest**: Biblioteca para lidar com asserções HTTP, facilitando o teste de servidores HTTP do Node.js.\n- **bcryptjs**: Biblioteca para fazer hash de senhas antes de armazená-las no banco de dados.\n\n## 3. Instruções de configuração\n\n### Pré-requisitos\n- Node.js instalado em sua máquina.\n- Servidor MySQL em execução localmente ou acessível remotamente.\n- Postman ou qualquer cliente de API para testar endpoints.\n\n### Etapas de instalação\n\n1. **Clone o repositório:**\n  ```bash\n  git clone [URL do repositório]\n  cd omni\n  ```\n2. Instale as dependências:\n```bash\nnpm install\n```\n3. Configuração do banco de dados:\nCertifique-se de que o MySQL esteja em execução e crie um banco de dados nomeado de acordo com a configuração .env.\n\n4. Configuração do ambiente:\nCrie um arquivo .env em seu diretório raiz com as seguintes chaves:\n\n```bash\nDB_NAME=omni_db\nDB_USER=root\nDB_PASSWORD=senha\nDB_HOST=localhost\nJWT_SECRET=seu_jwt_secret\n```\n\n5. Inicie o servidor:\n\n```bash\nnpm start\n```\nIsso iniciará o servidor em http://localhost:3000.\n\n## 3.5 Teste o aplicativo\n\nPara testar o aplicativo, execute o seguinte comando:\n\n```bash\nnpm test\n```\n\n### Descrições dos testes\n\nOs testes de integração concentram-se em testar as operações CRUD relacionadas aos usuários, bem como a funcionalidade de login. Abaixo, há uma descrição detalhada de cada teste:\n\n#### Criação de usuário\n\n- Ponto final**: `POST /users`\n- **Purpose**: Testa a criação de um novo usuário. Ele verifica se o código de status da resposta é 201 e confirma se o e-mail do usuário retornado corresponde à entrada.\n\n#### Retrieve All Users (Recuperar todos os usuários)\n\n- Ponto de extremidade**: `GET /users`\n- **Purpose**: Valida se a API pode recuperar uma lista de usuários, garantindo que a resposta contenha pelo menos um usuário e retorne um código de status 200.\n\n#### Recuperar usuário específico\n\n- **Endpoint**: `GET /users/:id`\n- **Purpose**: Testa a recuperação de um usuário específico por ID, verificando se os dados corretos do usuário são retornados com um código de status 200.\n\n#### Atualizar informações do usuário\n\n- **Endpoint**: `PUT /users/:id`\n- **Purpose**: Assegura que os dados do usuário possam ser atualizados corretamente e que a resposta reflita as informações atualizadas com um código de status 200.\n\n#### Excluir usuário\n\n- **Endpoint**: `DELETE /users/:id`\n- **Purpose**: Confirma que um usuário pode ser excluído com êxito, resultando em um código de status 204.\n\n#### Usuário não encontrado após a exclusão\n\n- **Endpoint**: `GET /users/:id`\n- **Purpose**: Após a exclusão de um usuário, esse teste verifica se o usuário não existe mais, esperando um código de status 404.\n\n#### Funcionalidade de login\n\n- Caso de sucesso**: Testa o login bem-sucedido com as credenciais corretas, esperando um código de status 200 e um token JWT na resposta.\n- Caso de falha**: A senha incorreta resulta em um código de status 400 e uma mensagem de erro.\n- Credenciais ausentes**: A tentativa de fazer login sem uma senha ou sem credenciais também deve retornar um código de status 400 com uma mensagem de erro apropriada.\n\n\n## 4. Guia do usuário\n\n### Testando com o Postman\n\n#### Registro de usuário\n- **Endpoint:** POST `/users/`\n- **Body:** \n  ```json\n  {\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\",\n    \"password\": \"123456\"\n  }\n#### Login de usuário\n\n- **Endpoint:** POST `/users/login`\n- **Body:**\n  ```json\n  {\n    \"email\": \"john@example.com\",\n    \"password\": \"123456\"\n  }\nObservação: após o login bem-sucedido, use o JWT retornado para autenticar solicitações de bate-papo. Armazene esse token no navegador da Web usando:\n```shell\nlocalStorage.setItem('jwtToken', 'Bearer \u003cyour_jwt_token\u003e');\n```\n#### Interface de bate-papo\nDepois de fazer login e definir o token JWT, carregue a interface de bate-papo navegando até http://localhost:3000/chat.\n\n![alt text](./assets/1.png)\n![alt text](./assets/2.png)\n![alt text](./assets/3.png)\n\n## 5. Documentação da API\n\n### Endpoints\n\n#### Criar usuário\n- **Endpoint:** POST `/users/`\n- **Body:**\n  ```json\n  {\n    \"name\": \"string\",\n    \"email\": \"string\",\n    \"password\": \"string\"\n  }\n### Login\n- **Endpoint:** POST /users/login\n- **Body:**\n```json\n{\n  \"email\": \"string\",\n  \"password\": \"string\"\n}\n```\n\n### Rotas de bate-papo\n### Interface da sala de bate-papo\n- Ponto final: GET /chat\n- Autenticação: JWT necessário no parâmetro de consulta.\n\n### Recuperar todos os usuários\nPara obter todos os usuários no banco de dados, envie uma solicitação GET para o ponto de extremidade /users:\n\n```bash\ncurl -X GET http://localhost:3000/users\n```\nIsso retornará uma lista de todos os usuários com sua identificação, nome e e-mail.\n\n### Recuperar um único usuário\nPara obter um usuário específico por ID, você precisa do ID do usuário da saída anterior. Substitua :id pelo ID real do usuário.\n\n```bash\ncurl -X GET http://localhost:3000/users/:id\n```\nSubstitua :id pelo ID real do usuário que deseja recuperar. Isso deve retornar os detalhes do usuário, se encontrados.\n\n### Atualizar informações do usuário\nPara atualizar as informações de um usuário existente, use o método PUT. Você precisará incluir o novo nome e/ou e-mail no corpo da solicitação.\n\n```bash\ncurl -X PUT http://localhost:3000/users/:id \\\n-H \"Content-Type: application/json\" \\\n-d '{\"name\": \"Jane Doe\", \"email\": \"janedoe@example.com\"}'\n```\nSubstitua :id pelo ID do usuário. Isso deve atualizar o nome e o e-mail do usuário, se ele existir.\n\n### Excluir um usuário\nPara excluir um usuário, envie uma solicitação DELETE com o ID do usuário:\n\n```bash\ncurl -X DELETE http://localhost:3000/users/:id\n```\nSubstitua :id pelo ID real do usuário. Isso deve excluir o usuário e retornar um código de status 204 se for bem-sucedido.\n\n### Tratamento de erros\nVocê também deve testar como a API trata os erros, como a tentativa de recuperar, atualizar ou excluir um usuário inexistente. Por exemplo, a tentativa de obter um usuário que não existe deve retornar um código de status 404:\n\n```bash\ncurl -X GET http://localhost:3000/users/99999\n```\nSupondo que 99999 seja um ID que não existe no banco de dados.\n\n## 6. Tratamento de erros\nOs erros são registrados no console e retornados ao cliente com os códigos de status HTTP apropriados. Os erros de autenticação impedem que os usuários acessem a funcionalidade de bate-papo e exigem a verificação da validade do JWT.\n\n## 7. Conclusão\nEsta documentação deve fornecer todas as informações necessárias para configurar, testar e entender o aplicativo Omni. Para qualquer dúvida adicional ou solução de problemas, consulte o código-fonte e os registros de erros.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrawlingthebits%2Fomni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrawlingthebits%2Fomni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrawlingthebits%2Fomni/lists"}