🗄️ HYGYA PACS - Sua Saúde nas nuvens

📝 Descrição

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.

📚 Funcionalidades

  • 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..).

Sobre a API

  • 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;

User


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}

Medico


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}

Paciente

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}

Especialidade

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}

Login


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.

🔧 Tecnologias utilizadas

🚀 Rodando o projeto

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?

🔜 Implementação futura

  • O que será implementado na próxima sprint?

🤝 Colaboradores

Foto de Pio Netto no GitHub
@pionetto

🎯 Status do projeto