{"id":23412632,"url":"https://github.com/gusmaomatheus/scheduling-appointments-api","last_synced_at":"2026-04-13T21:01:19.616Z","repository":{"id":207038194,"uuid":"718262319","full_name":"gusmaomatheus/scheduling-appointments-api","owner":"gusmaomatheus","description":"A simple API that simulates scheduling medical appointments.","archived":false,"fork":false,"pushed_at":"2023-11-21T02:13:05.000Z","size":303,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T04:09:42.032Z","etag":null,"topics":["docker","java","maven","rest-api","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","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/gusmaomatheus.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":"2023-11-13T18:10:51.000Z","updated_at":"2025-01-25T15:04:31.000Z","dependencies_parsed_at":"2024-12-22T18:17:40.463Z","dependency_job_id":"eeef5968-efcf-4c31-b194-3b13c617ddfc","html_url":"https://github.com/gusmaomatheus/scheduling-appointments-api","commit_stats":null,"previous_names":["gusmaomatheus/patient-scheduling","gusmaomatheus/scheduling-appointments-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gusmaomatheus/scheduling-appointments-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusmaomatheus%2Fscheduling-appointments-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusmaomatheus%2Fscheduling-appointments-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusmaomatheus%2Fscheduling-appointments-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusmaomatheus%2Fscheduling-appointments-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gusmaomatheus","download_url":"https://codeload.github.com/gusmaomatheus/scheduling-appointments-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusmaomatheus%2Fscheduling-appointments-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31770726,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T20:17:16.280Z","status":"ssl_error","status_checked_at":"2026-04-13T20:17:08.216Z","response_time":93,"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":["docker","java","maven","rest-api","spring-boot"],"created_at":"2024-12-22T18:17:41.584Z","updated_at":"2026-04-13T21:01:19.582Z","avatar_url":"https://github.com/gusmaomatheus.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Agendamento de Consultas Médicas 👨🏻‍⚕️\n\n## Descrição ✍🏻\n\nUm microserviço para agendar uma consulta para um paciente. A relação entre Paciente e Consulta é **1-N**, onde **um** paciente pode estar em **n** consultas, mas **uma** consulta só tem **um** paciente atrelado a ela.\n\n## Tecnologias Utilizadas 💻\n\n- [Spring Framework](https://spring.io/projects/spring-boot) 🍃\n    - [Spring Web](https://docs.spring.io/spring-boot/docs/current/reference/html/web.html) 🕸️\n    - [Spring Data JPA](https://spring.io/projects/spring-data) 🎲\n    - [Spring Validation](https://docs.spring.io/spring-framework/reference/core/validation/beanvalidation.html) ✅\n    - [Spring Security](https://docs.spring.io/spring-security/reference/index.html) 🔐\n- [Maven](https://maven.apache.org/guides/index.html) 🪶\n- [Docker](https://docs.docker.com/) 🐳\n- [PostgreSQL](https://www.postgresql.org/docs/) 🐘\n- [Flyway](https://flywaydb.org/postgresql) 🐦\n- [Lombok](https://projectlombok.org/) 🌶\n- [JWT Auth](https://jwt.io/introduction) 🎡\n\n\n## Práticas Adotadas 🛠️\n\nAo desenvolver esta aplicação, foram seguidas algumas práticas fundamentais:\n\n- **SOLID** 🏋️‍♂️: Princípios sólidos da programação orientada a objetos foram aplicados para garantir um design flexível e escalável.\n  \n- **DRY** 🌵: \"Don't Repeat Yourself\" foi seguido para evitar redundâncias no código, promovendo a reutilização e a manutenção eficiente.\n  \n- **YAGNI** 🤷‍♂️: \"You Aren't Gonna Need It\" foi mantido em mente para evitar o desenvolvimento de recursos que não são necessários no momento, mantendo o foco na simplicidade.\n  \n- **KISS** 💋: \"Keep It Simple, Stupid\" foi seguido para manter a simplicidade na implementação, facilitando a compreensão e a manutenção do código.\n\n## Instação ⚙\n\n1. Clonar o repositório:\n    ```bash\n    $ git clone git@github.com:gusmaomatheus/patient-scheduling.git\n    ``` \n\n2. Instalar e iniciar o [Docker desktop](https://www.docker.com/products/docker-desktop/)\n\n3. Instalar dependencias com o [Maven](https://maven.apache.org/guides/index.html)\n\n## Como usar 🖥\n\n1. Iniciar a aplicação com o [Maven](https://maven.apache.org/guides/index.html)\n\n2. A API ficará disponível em [http://localhost:8080](http://localhost:8080)\n\n## Como logar na aplicação 🔐\n1. Acessar http://localhost:15432/login e logar no Postgre com as credenciais:\n    - user: admin@admin.com\n    - password: root\n\n2. Inserir um usuário com permissões de administrador no Postgre executando o seguinte comando no query tool:\n\n    ```sql\n    INSERT INTO users VALUES(1, 'admin', 'admin', 0)\n    ```\n\n3. Depois faça um POST em http://localhost:8080/api/auth/login com o seguinte corpo:\n    ```json\n    {\n        \"login\": \"admin\",\n        \"password\": \"admin\"\n    }\n    ```\n4. Com o token que ele irá gerar você poderá se autenticar na aplicação.\n    \n    Postman:\n\n   \n    ![postman-example](https://i.imgur.com/jqMOIpp.png)\n\n\n## API Endpoints 🌐\n\nA API fornece os seguintes endpoints:\n\n## Auth \n\n### POST LOGIN\n\n```\nPOST /api/auth/login - Autentifica o usuário e retorna seu token de login.\n```\n\nExemplo:\n\n```json\n{\n    \"login\": \"admin\",\n    \"password\": \"admin\"\n}\n```\n\nResultado esperado (200 - Ok):\n\n```json\n{\n    \"token\": \"eyJhbGciOiJIuZi1nIisinR5cci6iKPxvcj9.eyjzdWIIOIIXmjm0nty30DKqweIktainnpvaFtZSI6IKG4.4pcPyMD09olPSyXnrXCjTwXyr4BsezdI1AVTmud2fU4\"\n}\n```\n\n### POST REGISTER\n\n```\nPOST /api/auth/register - Cria um novo usuário.\n```\n\nExemplo:\n\n```json\n{\n    \"login\": \"matheus\",\n    \"password\": \"12345678\",\n    \"role\": \"USER\"\n}\n```\n\nResultado: (201 - Created)\n\n```json\n[]\n```\n\n## Patients\n\n### POST PATIENT\n\n```\nPOST /api/patient - Cria um novo paciente.\n```\n\nExemplo:\n\n```json\n{\n    \t\"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"62306962073\",\n\t\"email\": \"caio.castro@gmail.com\"\n}\n```\n\nResultado esperado: (201 - Created)\n\n```json\n{\n\t\"id\": 1,\n    \t\"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"caio.castro@gmail.com\"\n}\n```\n\n### GET PATIENTS\n\n```\nGET /api/patient - Retorna todos os pacientes registrados.\n```\n\nResultado esperado (200 - Ok):\n\n```json\n[\n    {\n\t\"id\": 1,\n        \"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"caio.castro@gmail.com\"\n    },\n    {\n        \"id\": 2,\n        \"firstName\": \"Matheus\",\n        \"lastName\": \"Gusmão\",\n        \"cpf\": \"862.379.190-82\",\n        \"email\": \"gusmao.matheus@gmail.com\"\n    }\n]\n```\n\n### GET PATIENT\n\n```\nGET /api/patient/{id} - Retorna um único paciente pelo seu id.\n```\n\nResultado esperado (200 - Ok):\n\n```json\n{\n    \t\"id\": 1,\n    \t\"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"caio.castro@gmail.com\"\n}\n```\n\n### PUT PATIENT\n\n```\nPUT /api/patient/{id} - Edita alguma(s) informação(ões) de um usuário pelo seu id.\n```\n\nExemplo:\n\n```json\n{\n    \"email\": \"castro.caio@gmail.com\"\n}\n```\n\nResultado esperado (200 - Ok):\n\n```json\n{\n    \t\"id\": 1,\n    \t\"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"castro.caio@gmail.com\"\n}\n```\n\n### DELETE PATIENT\n\n```\nDELETE /api/patient/{id} - Deleta um usuário pelo seu id.\n```\n\nResultado esperado (204 - No Content):\n\n```json\n[]\n```\n\n## Schedules\n\n### POST SCHEDULE\n\n```\nPOST /api/schedule - Cria uma nova consulta.\n```\n\nExemplo:\n\n```json\n{\n\t\"description\": \"Exame de vista\",\n\t\"date\": \"2023-11-25T16:19:04\",\n\t\"patientId\": 1\n}\n```\n\nResultado esperado: (201 - Created)\n\n```json\n{\n    \"id\": 1,\n    \"description\": \"Exame de vista\",\n    \"date\": \"2023-11-25T16:19:04\",\n    \"createdAt\": \"2023-11-19T17:16:11.220605\",\n    \"patient\": {\n        \"id\": 1,\n        \"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"castro.caio@gmail.com\"        \n    } \n}\n```\n\n### GET SCHEDULES\n\n```\nGET /api/schedule - Retorna todas as consultas agendadas.\n```\n\nResultado esperado (200 - Ok):\n\n```json\n[\n    {\n        \"id\": 1,\n        \"description\": \"Exame de vista\",\n        \"date\": \"2023-11-25T16:19:04\",\n        \"createdAt\": \"2023-11-19T17:16:11.220605\",\n        \"patient\": {\n\t\t\"id\": 1,\n            \t\"firstName\": \"Caio\",\n\t\t\"lastName\": \"Castro\",\n\t        \"cpf\": \"623.069.620-73\",\n\t        \"email\": \"castro.caio@gmail.com\"        \n        } \n    },\n    {\n        \"id\": 2,\n        \"description\": \"Exame de coração\",\n        \"date\": \"2023-11-22T16:19:04\",\n        \"createdAt\": \"2023-11-14T17:16:11.220605\",\n        \"patient\": {\n\t\t\"id\": 2,\n\t\t\"firstName\": \"Matheus\",\n\t\t\"lastName\": \"Gusmão\",\n\t\t\"cpf\": \"862.379.190-82\",\n\t\t\"email\": \"gusmao.matheus@gmail.com\"    \n        } \n    }\n]\n```\n\n### GET SCHEDULE\n\n```\nGET /api/schedule/{id} - Retorna uma consulta pelo seu id.\n```\n\nResultado esperado (200 - Ok):\n\n```json\n{\n    \"id\": 1,\n    \"description\": \"Exame de vista\",\n    \"date\": \"2023-11-25T16:19:04\",\n    \"createdAt\": \"2023-11-19T17:16:11.220605\",\n    \"patient\": {\n\t\"id\": 1,\n\t\"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"castro.caio@gmail.com\"        \n    } \n}\n```\n\n### PUT SCHEDULE\n\n```\nPUT /api/schedule/{id} - Edita alguma(s) informação(ões) de uma consulta pelo seu id.\n```\n\nExemplo:\n\n```json\n{\n    \"description\": \"Exame de vista e de coração\"\n}\n```\n\nResultado esperado (200 - Ok):\n\n```json\n{\n    \"id\": 1,\n    \"description\": \"Exame de vista e de coração\",\n    \"date\": \"2023-11-25T16:19:04\",\n    \"createdAt\": \"2023-11-19T17:16:11.220605\",\n    \"patient\": {\n        \"id\": 1,\n        \"firstName\": \"Caio\",\n\t\"lastName\": \"Castro\",\n\t\"cpf\": \"623.069.620-73\",\n\t\"email\": \"castro.caio@gmail.com\"        \n    } \n}\n```\n\n### DELETE SCHEDULE\n\n```\nDELETE /api/schedule/{id} - Deleta uma consulta pelo seu id.\n```\n\nResultado esperado (204 - No Content):\n\n```json\n[]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusmaomatheus%2Fscheduling-appointments-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgusmaomatheus%2Fscheduling-appointments-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusmaomatheus%2Fscheduling-appointments-api/lists"}