{"id":19389328,"url":"https://github.com/lucianosants/simairu-odonto-api","last_synced_at":"2026-04-11T12:47:57.875Z","repository":{"id":226485976,"uuid":"768269203","full_name":"lucianosants/simairu-odonto-api","owner":"lucianosants","description":"API developed with Node.js, Fastify and patterns like S.O.L.I.D","archived":false,"fork":false,"pushed_at":"2024-04-11T18:58:46.000Z","size":272,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T20:35:58.105Z","etag":null,"topics":["clean-architecture","docker","docker-compose","fastify","nodejs","prisma","solid-principles","typescrit","vitest"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/lucianosants.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}},"created_at":"2024-03-06T19:21:30.000Z","updated_at":"2024-04-11T19:04:21.000Z","dependencies_parsed_at":"2024-03-28T13:35:05.101Z","dependency_job_id":null,"html_url":"https://github.com/lucianosants/simairu-odonto-api","commit_stats":null,"previous_names":["lucianosants/simairu-odonto-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lucianosants/simairu-odonto-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucianosants%2Fsimairu-odonto-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucianosants%2Fsimairu-odonto-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucianosants%2Fsimairu-odonto-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucianosants%2Fsimairu-odonto-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucianosants","download_url":"https://codeload.github.com/lucianosants/simairu-odonto-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucianosants%2Fsimairu-odonto-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31681201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: 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":["clean-architecture","docker","docker-compose","fastify","nodejs","prisma","solid-principles","typescrit","vitest"],"created_at":"2024-11-10T10:15:54.127Z","updated_at":"2026-04-11T12:47:57.848Z","avatar_url":"https://github.com/lucianosants.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simairu Odonto API\n\n![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge\u0026logo=node.js\u0026logoColor=white)\n![Fastify](https://img.shields.io/badge/fastify-%23000000.svg?style=for-the-badge\u0026logo=fastify\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![Prisma](https://img.shields.io/badge/Prisma-3982CE?style=for-the-badge\u0026logo=Prisma\u0026logoColor=white)\n![Vite](https://img.shields.io/badge/vite-%23646CFF.svg?style=for-the-badge\u0026logo=vite\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n\n\n## `Descrição`\nEste projeto tem como objetivo, facilitar a realização de **agendamentos** para **consultas médicas**. Nele, poderá ser cadastrado **médicos**, **pacientes** e suas atribuições ao ser agendado de acordo com sua disponibilidade. Neste projeto, foi utilizado **padrões de arquitetura de software** e implementação de **Unit Tests (Teste unitários)** e **E2E Tests (testes de ponta a ponta)**.\n\n\n\n##  `Tecnologias`\n\n- Node.js\n- Fastify\n- Docker\n- Prisma\n- Vitest\n- TypeScript\n\n\n## `Funcionalidades`\n\n  - [x] `RFs (Requisitos funcionais)`\n\t- [x] Deve ser possível se autenticar\n\t- [x] Deve ser possível obter o perfil de um usuário logado\n\t- [x] Deve ser possível criar o cadastro de um médico \n\t- [x] Deve ser possível obter uma lista de médicos\n\t- [x] Deve ser possível Alterar informações de um médico\n\t- [x] Deve ser possível criar o cadastro de um paciente\n\t- [x] Deve ser possível obter uma lista de pacientes\n\t- [x] Deve ser possível atualizar o status do médico\n\t- [x] Deve ser possível obter uma lista de consultas\n\t- [x] Deve ser possível buscar uma consulta por id\n\t- [x] Deve ser possível buscar uma ou mais consultas por data\n\t- [x] Deve ser possível o obter uma lista de disponibilidade\n\t- [x] Deve ser possível buscar um pacientes por nome\n\t- [x] Deve ser possível mudar o dia da consulta\n\t- [x] Deve ser possível marcar a consulta como realizada\n\t- [x] Deve ser possível marcar uma consulta como não realizada\n-  [x] `RN (Regras de negócio)` \n\t- [x] Não poderá ter médicos e pacientes duplicados\n-  [x] `RNFs (Requisitos não funcionais)`\n\t- [x] A senha precisa ser criptografada\n\t- [x] Os dados precisam persistir em um banco de dados postgreSQL\n\t- [x] Todas as listas precisam ser paginadas com até 20 itens\n\t- [x] O usuário deve ser identificado por um JWT (JSON Web Token)\n\n## `Instalação`\n\n### Pré-requisitos\n- Ter o Node.js instalado;\n- Ter o Docker e Docker-compose instalados e configurados.\n\nPara instalar a API, execute os seguintes comandos no terminal:\n\n`Instalar dependências`\n\n```shell\nnpm install\n```\n\n\n`Execute contêiner Docker`\n\n```shell\ndocker compose up -d\n```\n\n\n`Rodar migrations do Prisma`\n\n```shell \nnpx prisma migrate dev\n```\n\n\n`Iniciar projeto`\n```shell \nnpm run start:dev\n```\n\n\n\n\u003e Executar testes unitários e E2E\n\n```shell \n# unit\nnpm run test:unit\nnpm run test:unit:watch\n\n# e2e\nnpm run test:e2e\nnpm run test:e2e:watch\n``` \n\n---\n\nDesenvolvido com 💜 por [lucianosants](https://lucianosants.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucianosants%2Fsimairu-odonto-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucianosants%2Fsimairu-odonto-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucianosants%2Fsimairu-odonto-api/lists"}