Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gusmaomatheus/scheduling-appointments-api
A simple API that simulates scheduling medical appointments.
https://github.com/gusmaomatheus/scheduling-appointments-api
docker java maven rest-api spring-boot
Last synced: 14 days ago
JSON representation
A simple API that simulates scheduling medical appointments.
- Host: GitHub
- URL: https://github.com/gusmaomatheus/scheduling-appointments-api
- Owner: gusmaomatheus
- Created: 2023-11-13T18:10:51.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-21T02:13:05.000Z (about 1 year ago)
- Last Synced: 2024-12-22T18:17:37.554Z (14 days ago)
- Topics: docker, java, maven, rest-api, spring-boot
- Language: Java
- Homepage:
- Size: 296 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Agendamento de Consultas Médicas 👨🏻⚕️
## Descrição ✍🏻
Um 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.
## Tecnologias Utilizadas 💻
- [Spring Framework](https://spring.io/projects/spring-boot) 🍃
- [Spring Web](https://docs.spring.io/spring-boot/docs/current/reference/html/web.html) 🕸️
- [Spring Data JPA](https://spring.io/projects/spring-data) 🎲
- [Spring Validation](https://docs.spring.io/spring-framework/reference/core/validation/beanvalidation.html) ✅
- [Spring Security](https://docs.spring.io/spring-security/reference/index.html) 🔐
- [Maven](https://maven.apache.org/guides/index.html) 🪶
- [Docker](https://docs.docker.com/) 🐳
- [PostgreSQL](https://www.postgresql.org/docs/) 🐘
- [Flyway](https://flywaydb.org/postgresql) 🐦
- [Lombok](https://projectlombok.org/) 🌶
- [JWT Auth](https://jwt.io/introduction) 🎡## Práticas Adotadas 🛠️
Ao desenvolver esta aplicação, foram seguidas algumas práticas fundamentais:
- **SOLID** 🏋️♂️: Princípios sólidos da programação orientada a objetos foram aplicados para garantir um design flexível e escalável.
- **DRY** 🌵: "Don't Repeat Yourself" foi seguido para evitar redundâncias no código, promovendo a reutilização e a manutenção eficiente.
- **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.
- **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.## Instação ⚙
1. Clonar o repositório:
```bash
$ git clone [email protected]:gusmaomatheus/patient-scheduling.git
```2. Instalar e iniciar o [Docker desktop](https://www.docker.com/products/docker-desktop/)
3. Instalar dependencias com o [Maven](https://maven.apache.org/guides/index.html)
## Como usar 🖥
1. Iniciar a aplicação com o [Maven](https://maven.apache.org/guides/index.html)
2. A API ficará disponível em [http://localhost:8080](http://localhost:8080)
## Como logar na aplicação 🔐
1. Acessar http://localhost:15432/login e logar no Postgre com as credenciais:
- user: [email protected]
- password: root2. Inserir um usuário com permissões de administrador no Postgre executando o seguinte comando no query tool:
```sql
INSERT INTO users VALUES(1, 'admin', 'admin', 0)
```3. Depois faça um POST em http://localhost:8080/api/auth/login com o seguinte corpo:
```json
{
"login": "admin",
"password": "admin"
}
```
4. Com o token que ele irá gerar você poderá se autenticar na aplicação.
Postman:
![postman-example](https://i.imgur.com/jqMOIpp.png)## API Endpoints 🌐
A API fornece os seguintes endpoints:
## Auth
### POST LOGIN
```
POST /api/auth/login - Autentifica o usuário e retorna seu token de login.
```Exemplo:
```json
{
"login": "admin",
"password": "admin"
}
```Resultado esperado (200 - Ok):
```json
{
"token": "eyJhbGciOiJIuZi1nIisinR5cci6iKPxvcj9.eyjzdWIIOIIXmjm0nty30DKqweIktainnpvaFtZSI6IKG4.4pcPyMD09olPSyXnrXCjTwXyr4BsezdI1AVTmud2fU4"
}
```### POST REGISTER
```
POST /api/auth/register - Cria um novo usuário.
```Exemplo:
```json
{
"login": "matheus",
"password": "12345678",
"role": "USER"
}
```Resultado: (201 - Created)
```json
[]
```## Patients
### POST PATIENT
```
POST /api/patient - Cria um novo paciente.
```Exemplo:
```json
{
"firstName": "Caio",
"lastName": "Castro",
"cpf": "62306962073",
"email": "[email protected]"
}
```Resultado esperado: (201 - Created)
```json
{
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
```### GET PATIENTS
```
GET /api/patient - Retorna todos os pacientes registrados.
```Resultado esperado (200 - Ok):
```json
[
{
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
},
{
"id": 2,
"firstName": "Matheus",
"lastName": "Gusmão",
"cpf": "862.379.190-82",
"email": "[email protected]"
}
]
```### GET PATIENT
```
GET /api/patient/{id} - Retorna um único paciente pelo seu id.
```Resultado esperado (200 - Ok):
```json
{
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
```### PUT PATIENT
```
PUT /api/patient/{id} - Edita alguma(s) informação(ões) de um usuário pelo seu id.
```Exemplo:
```json
{
"email": "[email protected]"
}
```Resultado esperado (200 - Ok):
```json
{
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
```### DELETE PATIENT
```
DELETE /api/patient/{id} - Deleta um usuário pelo seu id.
```Resultado esperado (204 - No Content):
```json
[]
```## Schedules
### POST SCHEDULE
```
POST /api/schedule - Cria uma nova consulta.
```Exemplo:
```json
{
"description": "Exame de vista",
"date": "2023-11-25T16:19:04",
"patientId": 1
}
```Resultado esperado: (201 - Created)
```json
{
"id": 1,
"description": "Exame de vista",
"date": "2023-11-25T16:19:04",
"createdAt": "2023-11-19T17:16:11.220605",
"patient": {
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
}
```### GET SCHEDULES
```
GET /api/schedule - Retorna todas as consultas agendadas.
```Resultado esperado (200 - Ok):
```json
[
{
"id": 1,
"description": "Exame de vista",
"date": "2023-11-25T16:19:04",
"createdAt": "2023-11-19T17:16:11.220605",
"patient": {
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
},
{
"id": 2,
"description": "Exame de coração",
"date": "2023-11-22T16:19:04",
"createdAt": "2023-11-14T17:16:11.220605",
"patient": {
"id": 2,
"firstName": "Matheus",
"lastName": "Gusmão",
"cpf": "862.379.190-82",
"email": "[email protected]"
}
}
]
```### GET SCHEDULE
```
GET /api/schedule/{id} - Retorna uma consulta pelo seu id.
```Resultado esperado (200 - Ok):
```json
{
"id": 1,
"description": "Exame de vista",
"date": "2023-11-25T16:19:04",
"createdAt": "2023-11-19T17:16:11.220605",
"patient": {
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
}
```### PUT SCHEDULE
```
PUT /api/schedule/{id} - Edita alguma(s) informação(ões) de uma consulta pelo seu id.
```Exemplo:
```json
{
"description": "Exame de vista e de coração"
}
```Resultado esperado (200 - Ok):
```json
{
"id": 1,
"description": "Exame de vista e de coração",
"date": "2023-11-25T16:19:04",
"createdAt": "2023-11-19T17:16:11.220605",
"patient": {
"id": 1,
"firstName": "Caio",
"lastName": "Castro",
"cpf": "623.069.620-73",
"email": "[email protected]"
}
}
```### DELETE SCHEDULE
```
DELETE /api/schedule/{id} - Deleta uma consulta pelo seu id.
```Resultado esperado (204 - No Content):
```json
[]
```