Integração Sistema - Banco de dados
Para além da integração entre sistema e robô, é necessário integrar sistema e banco de dados. Isso permite que a PharmaTech possa persistir as interações do usuário no sistema. Além disso, permite criar um sistema de login, salvar interações do usuário e - o mais importante para um sistema de monitoramento - persistir as ações e o estado do robô.
Na sprint 3, a Pharmatech já tinha criado rotas no backend para armazenar e visualizar os logs do sistema. Nessa sprint, outras informações puderam ser realizadas e persistidas, com a ajuda de rotas HTTP para acontecerem. Abaixo, vê-se as interações que o sistema tem com o banco de dados e por quais rotas isso é feito. Evidencia-se que essas rotas têm como base o CRUD (Create, Read, Update e Delete). Entretanto, nem todas rotas do CRUD foram implementadas por razões de regras de negócio.
Rotas Criadas
Bins
- Criar Bin
Rota:
bins/criar; Tabela: configuracoes_bins Método: POST Corpo:
{
"nomeBin": /**<string> Nome do Bin **/,
"nomeMedicamento": /**<string> Nome do Bin **/,
"quantidade": /**<int> Quantidade de remédio **/,
"x": /**<float> coordenada x **/,
"y": /**<float> coordenada y **/,
"z": /**<float> coordenada z **/
}
-
Listar Bins Rota:
bins/criar; Tabela: configuracoes_bins Método: GET -
Encontrar um bin Rota:
bins/list/<int:id>; Tabela: configuracoes_bins Método: GET -
Editar um bin Rota:
bins/editar/<int:id>; Tabela:configuracoes_binsMétodo: POST Observação: Apesar de PUT ser o método mais adequado, a componentização do formulário no modal, nos fez recorrer a um método mais geral: o POST
Prescrições
- Criar uma prescrição
Rota:
/medicine/prescriptionTabelas:PedidoePedidoMedicamentoMétodo: POST Corpo:
{
"pacienteId": /**<int> ID do paciente **/,
"prioridade": /**<string> Prioridade da prescrição **/,
"liberadoPor": /**<string> Nome do farmacêutico **/,
"medicamentos": [
{
"id": /**<int> ID do medicamento **/,
"quantidade": /**<int> Quantidade do medicamento **/
}
]
}
Observação: Ao criar a prescrição, o sistema adiciona um registro na tabela Pedido e, para cada medicamento, um registro na tabela PedidoMedicamento. Após a criação, são emitidos os eventos socket "medicine" (caso nenhum item esteja com status "Separando") e "queue" com a fila atualizada.
-
Listar as prescrições em ordem decrescente de data do pedido Rota:
/medicine/logsTabela:PedidoMétodo: GET -
Fila de Medicamentos Rota:
/medicine/queueTabelas:Pedido,PedidoMedicamentoeMedicamentoMétodo: GET Observação: Retorna a fila completa de medicamentos para os pedidos realizados no dia corrente, organizando as informações de cada pedido e os seus medicamentos. Além disso, emite o evento socketmedicineQueuecom a fila. Essa rota é tanto da integração sistema-robô quanto da integração sistema - banco de dados -
Contagem de Pedidos Pendentes e Completo Rota:
/medicine/statusesTabela:PedidoMétodo: GET
Devido as regras de negócio desse projeto, não é recomendado criar rotas de deleção de prescrições, isso porque prescrições irá interagir com outros sistemas e está ligada com grande parte das tabelas do projeto. Deste modo, deletar uma prescrição causaria um problema para a segurança dos dados.
Estoque
-
Listar Medicamentos no estoque Rota:
/estoque/Tabela:EstoqueeMedicamentoMétodo: GET -
Criar um item no estoque Rota:
/estoque/criarTabela:EstoqueMétodo: POST Corpo:
{
"medicamento_id": /**<int> ID do medicamento **/,
"quantidade": /**<int> Quantidade em estoque **/,
"bin_localizacao": /**<string> Localização do bin (opcional) **/
}
Rotas a criar na sprint 5
Para a próxima sprint, é preciso criar rotas de CRUD para medicamentos e paciente. Nessa sprint, foi necessário utilizar o SGBD DBeaver para conseguir interagir com essas rotas. Ademais, é necessário criar rotas de deleção e atualização do estoque. Por último, é necessário atualizar prescrições.