Este projeto é um software para consumo de dados de um servidor de imagens DICOM PACS. Ele serve para que o médico possa receber as imagens DICOM para laudo de exames de imagem (Ultrassonografia, Tomografia, Raio-X e Mamografias) de forma mais rápida e de qualquer lugar, pelo fato da aplicação ser web.
- Funcionalidade 1
Esta é uma API desenvolvida na linguagem [Golang](https://go.dev/).
Ela realiza o cadastro, edição, visualização e remoção de:
- Usuários;
- Médicos (controllers/user_controller.go);
- Especialidades;
Ela realiza visualização de:
- Pacientes/Exames;
Pois os exames e pacientes são dados que não podem ser apagados.
O usuário realiza o login via middleware, através de token de autentitação via JWT com Bearer no Header ( arquivo em server/middlewares/auth_middleware.go ).
Abaixo estão as rotas criadas:
func ConfigRoutes(router *gin.Engine) *gin.Engine {
main := router.Group("api/v1")
{
user := main.Group("users")
{
user.GET("/:id", controllers.ShowUser)
user.POST("/", controllers.CreateUser)
user.GET("/", controllers.ShowUsers)
user.PUT("/", controllers.UpdateUsers)
user.DELETE("/:id", controllers.DeleteUsers)
}
pacientes := main.Group("paciente", middlewares.Auth())
{
pacientes.GET("/:id", controllers.ShowPaciente)
pacientes.GET("/", controllers.ShowPacientes)
pacientes.POST("/", controllers.CreatePaciente)
pacientes.PUT("/", controllers.UpdatePacientes)
pacientes.DELETE("/:id", controllers.DeletePacientes)
}
medicos := main.Group("medico")
{
medicos.GET("/:id", controllers.ShowMedico)
medicos.GET("/", controllers.ShowMedicos)
medicos.POST("/", controllers.CreateMedico)
medicos.PUT("/", controllers.UpdateMedicos)
medicos.DELETE("/:id", controllers.DeleteMedicos)
}
especialidades := main.Group("especialidades")
{
especialidades.GET("/:id", controllers.ShowEspecialidade)
especialidades.GET("/", controllers.ShowEspecialidades)
especialidades.POST("/", controllers.CreateEspecialidade)
especialidades.PUT("/", controllers.UpdateEspecialidades)
especialidades.DELETE("/:id", controllers.DeleteEspecialidades)
}
main.POST("login", controllers.Login)
}
return router
}
E para acessa-las, podemos utilizar uma ferramenta chamada Insomnia(clique aqui para baixar), para testar se os endpoints estão funcionando corretamente. Ela serve para que possamos fazer requisições (GET, POST, PUT, DELETE..).
- Todos os caminhos da API poderão ser acessados a partir do link http://localhost:5000/api/v1;
- Todos os caminhos da api utilizam o metodo de requisição GET;
- As respostas das requisições feitas a api são em formato JSON;
Criar Usuário
Método: POST
Endpoint: http://localhost:5000/api/v1/users
Objeto JSON a ser enviado:
{
"name": "Pio Lima",
"email": "pio@pio.com",
"password": "123456"
}
Listar Usuários
Método: GET
Endpoint: http://localhost:5000/api/v1/users
Listar um Usuário
Método: GET
Endpoint: http://localhost:5000/api/v1/users/{id}
Atualizar Usuários
Método: PUT
Endpoint: http://localhost:5000/api/v1/users
Objeto JSON a ser enviado:
{
"id": 3,
"name": "Pandora Cunha",
"email": "pandora@pandora.com",
"password": "pandora"
}
Deletar um Usuário
Método: DELETE
Endpoint: http://localhost:5000/api/v1/users/{id}
Criar Médico
Método: POST
Endpoint: http://localhost:5000/api/v1/medico
Objeto JSON a ser enviado:
{
"nome": "Hipócrates da Grecia Antiga",
"sexo": "M",
"data_nasc": "1900-06-20T00:00:00Z",
"cpf": "99999999999",
"especialidade": "1",
"rqe": "44664644",
"crm_estado": "PARÁ",
"crm_numero": "121212",
"end_logradouro": "RUA ABCD",
"end_numero": "11111",
"end_complemento": "ESQUINA COM RUA B",
"end_bairro": "CENTRO",
"end_cidade": "SANTARÉM",
"end_uf": "PARÁ",
"end_cep": "68000-000",
"contato_email": "teste@teste.com",
"contato_telefone1": "939999-9999",
"contato_telefone2": " ",
"contato_telefone3": " ",
"contato_obs": " "
}
Listar Médicos
Método: GET
Endpoint: http://localhost:5000/api/v1/medico
Listar um Médico
Método: GET
Endpoint: http://localhost:5000/api/v1/medico/{id}
Atualizar Médico
Método: PUT
Endpoint: http://localhost:5000/api/v1/medico
Objeto JSON a ser enviado:
{
"id": 1,
"nome": "Hipócrates da Grecia Nova",
"sexo": "M",
"data_nasc": "1900-06-20T00:00:00Z",
"cpf": "99999999999",
"especialidade": "Radiologia",
"rqe": "44664644",
"crm_estado": "PARÁ",
"crm_numero": "121212",
"end_logradouro": "RUA ABCD",
"end_numero": "11111",
"end_complemento": "ESQUINA COM RUA B",
"end_bairro": "CENTRO",
"end_cidade": "SANTARÉM",
"end_uf": "PARÁ",
"end_cep": "68000-000",
"contato_email": "teste@teste.com",
"contato_telefone1": "939999-9999",
"contato_telefone2": " ",
"contato_telefone3": " ",
"contato_obs": " "
}
Deletar um Médico
Método: DELETE
Endpoint: http://localhost:5000/api/v1/medico/{id}
Listar Pacientes
Método: GET
Endpoint: http://localhost:5000/api/v1/medico
Listar um Paciente
Método: GET
Endpoint: http://localhost:5000/api/v1/medico/{id}
Criar Especialidade
Método: POST
Endpoint: http://localhost:5000/api/v1/especialidade
Objeto JSON a ser enviado:
{
"especialidade": "Radiologia"
}
Listar Especialidades
Método: GET
Endpoint: http://localhost:5000/api/v1/especialidades
Listar uma Especialidade
Método: GET
Endpoint: http://localhost:5000/api/v1/especialidade/{id}
Atualizar Especialidade
Método: PUT
Endpoint: http://localhost:5000/api/v1/users
Objeto JSON a ser enviado:
{
"id": 1,
"especialidade": "Radiologiaa"
}
Deletar uma Especialidade
Método: DELETE
Endpoint: http://localhost:5000/api/v1/users/{id}
Realizar login do usuário
Método: POST
Endpoint: http://localhost:5000/api/v1/login
Objeto JSON a ser enviado:
{
"email": "pio@pio.com",
"password": "123456"
}
Se os dados de login estiverem corretos, ele retornará um JSON como este abaixo:
{
"email": "pio@pio.com",
"id": 1,
"password": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdW0iOjEsImV4cCI6MTY4NzgzMjQzNCwiaWF0IjoxNjg3ODI1MjM0LCJpc3MiOiJwYWNpZW50ZS1hcGkifQ.kiyduTv6wX0SQyKf9tslrIdlurDFPz8zfGMZaS1ZmP8"
}
Este token é gerado no package services.
- Golang;
- Gin Framework;
- Gorm;
- Golang-JWT;
- Gorilla Mux;
- PostgreSQL;
- Github;
- Visual Studio Code;
- S.O. Linux Mint;
- Insomnia - Para alguns testes da API;
São necessários alguns requisitos para rodar a aplicação.
- Ter o PostgreSQL instalado e configurado, tem um guia clicando aqui.
- Ter instalado o Golang.
Para instalar o golang, faça:
sudo apt install -y golang
Crie um diretório (mkdir) em seu lugar de preferência.
sudo apt install -y golang
Para rodar o repositório é necessário clonar o mesmo, dar o seguinte comando para iniciar o projeto:
git clone https://github.com/pionetto/hygya-api.git
Com o PostgreSQL instalado, execute o seguinte comando de criação das tabelas do banco de dados, localizado no arquivo database.sql. (Isso é necessário pelo fato das migrations não rodarem automaticamente com o AutoMigrate(), no package migrations em database).
Em seguida, para instalar as dependências do projeto e executar a aplicação, acesse a raiz da pasta do projeto e digite:
go run main.go
O que ainda está sendo implementado?
- Banco de dados hospedado na AWS-RDS
- API hospedada na AWS-EC2
- Frontend em ReactJS. https://hygya-interface.vercel.app/login
- Repositório do Frontend: https://github.com/pionetto/hygya-interface
- O que será implementado na próxima sprint?
@pionetto |