Bem-vindo à documentação da API de Marcação de Consultas da Blue Health Tech. Este projeto visa fornecer uma solução robusta e eficiente para a marcação de consultas médicas, oferecendo funcionalidades de autenticação, agendamento, geração de PDF, visualização e modificação/cancelamento de consultas.
-
Symfony Framework (Route Annotation): Framework PHP versátil para desenvolvimento web, utilizando anotações para definição de rotas.
-
Doctrine ORM: Biblioteca PHP para mapeamento objeto-relacional, facilitando a manipulação de bancos de dados através de objetos PHP.
-
JWT para Autenticação: JSON Web Token, um padrão aberto que define uma maneira compacta e autocontida de transmitir informações entre as partes para autenticação.
-
MySQL: Sistema de gerenciamento de banco de dados relacional, amplamente utilizado em aplicações web.
-
Docker e Docker-Compose: Plataforma e ferramenta para empacotamento e distribuição de aplicações em contêineres.
-
PHPUnit: Framework de teste unitário para PHP, garantindo a integridade e qualidade do código.
-
DomPDF: Biblioteca PHP para geração de PDF a partir de HTML e CSS, utilizada na criação de documentos para detalhes das consultas médicas.
-
Composer: Gerenciador de dependências para PHP, simplificando a gestão e instalação de bibliotecas.
- Clone o projeto na sua máquina.
git clone git@github.com:abnerferreiradesousa/desafio-backend.git
- Entre na pasta do projeto.
cd desafio-backend/blue_appointment_api/
- Siga as instruções específicas para configurar o ambiente de desenvolvimento (incluir dependências, configurações do banco de dados, etc.).
docker-compose up --build -d
command not found
para o comando acima, nesse caso, tente rodar:
docker compose up --build -d
- Quando terminar, a API estará pronta para receber requisições no endereço http://localhost:8080/api, basta seguir os exemplos na seção Rotas Disponíveis - Fluxo de Utilização. Embora o cURL esteja sendo usado nos exemplos abaixo, o ideal para uma melhor experiência(visualizar o arquivo .pdf) é Postman ou a ferramenta gráfica de sua escolha.
Este projeto utiliza Docker para facilitar a configuração do ambiente. Certifique-se de ter as ferramentas mencionadas instaladas antes de prosseguir.
- POST /api/user/register
- Registra um novo usuário.
- Exemplo de Requisição:
curl -X POST -H "Content-Type: application/json" -d '{"email": "garfield@gmail.com", "sex": "M", "fullName": "Garfield", "birthDate": "1978-06-19", "password": "lasagna_lover"}' http://localhost:8080/api/user/register
- Resposta de Sucesso:
HTTP/1.1 200 OK {"patientId": "garfield_user_id"}
- POST /api/login_check
- Realiza o login e retorna um token JWT.
- Exemplo de Requisição:
curl -X POST -H "Content-Type: application/json" -d '{"username": "garfield@gmail.com", "password": "lasagna_lover"}' http://localhost:8080/api/login_check
- Resposta de Sucesso:
HTTP/1.1 200 OK {"token": "garfield_jwt_token"}
- POST /api/medical-appointments/create
- Cria uma nova consulta médica.
- Exemplo de Requisição:
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer garfield_jwt_token" -d '{"notes": "Em abril foi parar no hospital depois de comer muita lasagna.", "titleReason": "Check-up", "descriptionReason": "Checagem anual de saúde do Garfield", "appointmentDate": "2023-03-01", "patientId": "garfield_user_id"}' http://localhost:8080/api/medical-appointments/create
- Resposta de Sucesso:
HTTP/1.1 201 Created {"appointment_details_link": "http://localhost:8080/api/medical-appointments/view/{token}", "appointment_id": "garfield_appointment_id"}
- GET /api/medical-appointments/view/{token}
- Visualiza detalhes da consulta em PDF.
- Exemplo de Requisição:
curl -X GET -H "Authorization: Bearer garfield_jwt_token" http://localhost:8080/api/medical-appointments/view/{token}
- Resposta de Sucesso:
(Binary PDF content)
HTTP/1.1 200 OK Content-Type: application/pdf
- PUT /api/medical-appointments/modify/{id}
- Modifica detalhes de uma consulta médica.
- Exemplo de Requisição:
curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer garfield_jwt_token" -d '{"notes": "Em abril foi parar no hospital depois de comer muita lasagna. E depois disso o médico recomendou que ele fizesse mais exercícios", "titleReason": "Comeu demais de novo", "descriptionReason": "Check-up anual", "appointmentDate": "2023-03-01", "patientId": "garfield_user_id"}' http://localhost:8080/api/medical-appointments/modify/{id}
- Resposta de Sucesso:
HTTP/1.1 200 OK {"message": "Medical appointment modified successfully"}
- POST /api/medical-appointments/access-link-generator/{id}
- Gera um link de acesso para a consulta.
- Exemplo de Requisição:
curl -X POST -H "Authorization: Bearer garfield_jwt_token" http://localhost:8080/api/medical-appointments/access-link-generator/{id}
- Resposta de Sucesso:
HTTP/1.1 201 Created {"appointment_details_link": "http://localhost:8080/api/medical-appointments/view/{token}"}
- DELETE /api/medical-appointments/cancel/{id}
- Cancela uma consulta médica.
- Exemplo de Requisição:
curl -X DELETE -H "Authorization: Bearer garfield_jwt_token" http://localhost:8080/api/medical-appointments/cancel/{id}
- Resposta de Sucesso:
HTTP/1.1 204 No Content
O projeto segue a arquitetura MVC (Model-View-Controller) para uma organização clara e modular. A estrutura básica inclui:
src/
: Contém os controladores, modelos(repository) e serviços.config/
: Configurações da aplicação, rotas e serviços.templates/
: Modelo de visualização para geração de PDF.
Em caso de erros, a API retorna mensagens descritivas e códigos de status apropriados. Consulte a documentação específica de cada rota para detalhes sobre possíveis erros.
Neste projeto, foram realizados alguns testes unitários e de integração para garantir a robustez e confiabilidade do código. Embora o número de testes seja limitado no momento, o foco é garantir a qualidade das funcionalidades principais.
Para executar os testes unitários e de integração, siga as instruções abaixo:
- Certifique-se de estar na raiz do projeto:
cd desafio-backend/blue_appointment_api/
- Construa e inicie os containers Docker (se ainda não estiverem em execução):
docker-compose up --build -d
- Execute o seguinte comando para rodar os testes dentro do container Docker:
php bin/phpunit
- https://symfony.com/
- https://www.binaryboxtuts.com/php-tutorials/generating-pdf-from-html-in-symfony-6/
- https://www.youtube.com/watch?v=XjbIDOIoXTo&t=347s
- https://docs.docker.com/compose/
- https://symfony.com/doc/current/routing.html#creating-routes
- https://symfony.com/doc/current/event_dispatcher.html
- https://symfony.com/doc/current/testing.html
- https://medium.com/accesto/simple-docker-setup-for-symfony-project-accesto-blog-9dc4e3179642
- https://www.binaryboxtuts.com/php-tutorials/symfony-6-json-web-tokenjwt-authentication/
- https://symfony.com/doc/current/doctrine.html
- https://symfony.com/bundles/LexikJWTAuthenticationBundle/current/index.html
Gostei muito do projeto, sem dúvida pude me desafiar muito! O ponto de melhoria que eu faria é somente:
- Deixar mais claro o retorno de cada rota, fiquei confuso sobre quando deveria ser retornado o PDF(no momento da criação da consulta ou se o PDF era só pra ser gerado e retornado posteriormente em outra funcionalidade, tendo em vista que tem uma requisito de visualização de detalhes de uma consulta).
No mais, obrigado! Eu gostei muito mesmo do projeto!