Skip to content

Naliat/PersistenciaT3

Repository files navigation

Sistema Farmácia

API para gestão de fornecedores, remédios e estoque

Diagrama de Classes

Aqui está o diagrama de classes para as entidades principais do sistema:

classDiagram
direction LR
    class Fornecedor {
        +String nome
        +String cnpj
        +String telefone
        +String endereco
        +datetime criado_em
        +datetime atualizado_em
    }
    
    class Remedio {
        +String nome
        +String descricao
        +Float preco
        +datetime validade
        +ObjectId fornecedor_id
        +datetime criado_em
        +datetime atualizado_em
    }
    
    class Estoque {
        +ObjectId remedio_id
        +Int quantidade
        +datetime data_entrada
        +datetime validade
        +datetime criado_em
        +datetime atualizado_em
    }

    Fornecedor "1" --> "0..*" Remedio : fornece
    Remedio "1" --> "0..*" Estoque : tem
    Estoque "0..*" --> "1" Fornecedor : pertence_a
Loading

Relações Entre as Entidades

O diagrama mostra as seguintes relações:

Fornecedor → Remedio ("fornece")

  • Um Fornecedor pode fornecer vários Remédios.
  • Relacionamento 1 para muitos (um fornecedor pode ter 0 ou mais remédios).

Remedio → Estoque ("tem")

  • Um Remédio pode estar presente em vários registros de Estoque.
  • Relacionamento 1 para muitos (um remédio pode ter 0 ou mais estoques).

Estoque → Fornecedor ("pertence_a")

  • Embora a relação direta no diagrama entre Estoque e Fornecedor não seja explicitada no objeto Estoque (ele se relaciona ao Remédio, que por sua vez tem referência ao Fornecedor), o diagrama indica que um Estoque também está associado a um Fornecedor.
  • Essa associação pode ser derivada indiretamente através do remédio, pois o remédio possui um fornecedor_id.

Nesse sentido

Atualização via PUT:

O exemplo de PUT atualiza um estoque e, ao mesmo tempo, permite atualizar os dados do remédio vinculado (embora, na prática, a atualização do remédio possa ser gerenciada por outra rota ou lógica de negócio, dependendo da arquitetura).

Timestamps e Controle de Validade:

O uso de criado_em, atualizado_em e campos de validade em ambas as entidades (Remedio e Estoque) é essencial para rastrear a evolução dos registros e gerenciar prazos de validade, o que é especialmente importante em ambientes regulados como o de medicamentos.

Relações entre Entidades:

As relações estabelecem uma estrutura que facilita consultas agregadas, como “todos os remédios de um fornecedor” ou “estoques disponíveis para um determinado remédio”, permitindo um gerenciamento integrado do sistema.

API de Estoque de Medicamentos - FastAPI + Odmantic

Esta aplicação foi construída utilizando o framework FastAPI e a biblioteca Odmantic para interação com o MongoDB. O objetivo é gerenciar um sistema de estoque de medicamentos, permitindo operações de CRUD (Create, Read, Update, Delete) em medicamentos, fornecedores e estoques, com suporte a relações entre as entidades.

Tecnologias Utilizadas

  • FastAPI: Framework para criação da API.
  • Odmantic: ORM assíncrono para MongoDB.
  • Motor: Motor assíncrono para conexão com MongoDB.
  • MongoDB: Banco de dados NoSQL.
  • Pydantic: Validação de dados.
  • Uvicorn: Servidor ASGI.

Como Executar o Projeto

Pré-requisitos

  • Python 3.7+
  • MongoDB em execução local ou remota.

Instalação

  1. Clone o repositório:

    git clone https://github.com/seu-repositorio/estoque-medicamentos.git
    cd estoque-medicamentos
  2. Instale as dependências:

    pip install -r requirements.txt
  3. Inicie o servidor:

    uvicorn main:app --reload

    Acesse http://127.0.0.1:8000.

Documentação da API

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

Estrutura do Projeto

Entidades Principais

  1. Fornecedor: Representa fornecedores de medicamentos.
  2. Remédio: Armazena informações dos medicamentos.
  3. Estoque: Controla a quantidade de medicamentos disponíveis.

Modelos de Dados

1. Fornecedor

from odmantic import Model, Field
from datetime import datetime

class Fornecedor(Model):
    nome: str
    cnpj: str
    telefone: str
    endereco: str
    criado_em: datetime = Field(default_factory=datetime.utcnow)
    atualizado_em: datetime = Field(default_factory=datetime.utcnow)

Exemplo de POST:

{
  "nome": "Fornecedor ABC",
  "cnpj": "12.345.678/0001-99",
  "telefone": "(11) 1234-5678",
  "endereco": "Rua Exemplo, 123, São Paulo, SP",
  "criado_em": "2025-02-21T15:00:00",
  "atualizado_em": "2025-02-21T15:00:00"
}

Exemplo de PUT:

{
 "nome": "Fornecedor AAAAAAAAAAAA",
  "cnpj": "12.345.678/0001-99",
  "telefone": "(11) 1234-5678",
  "endereco": "Rua Exemplo, 123, São Paulo, SP",
  "criado_em": "2025-02-21T15:00:00",
  "atualizado_em": "2025-02-22T21:49:12.371Z"
}

2. Remédio

from odmantic import Model, Field
from datetime import datetime
from bson import ObjectId

class Remedio(Model):
    nome: str
    descricao: str
    preco: float = Field(gt=0)
    validade: datetime
    fornecedor_id: ObjectId
    criado_em: datetime = Field(default_factory=datetime.utcnow)
    atualizado_em: datetime = Field(default_factory=datetime.utcnow)

Exemplo de POST:

{
  "nome": "Mangaa 750mg",
  "descricao": "Analgésico e antitérmico",
  "preco": 12.5,
  "validade": "2025-12-31T00:00:00Z",
  "fornecedor_id": "67ba15648b5583d2b4a8b95e",
  "criado_em": "2025-02-22T23:24:54.848Z",
  "atualizado_em": "2025-02-22T23:24:54.848Z"
}

Exemplo de PUT:

 {
      "nome": "Regis Pires Magalhães 750mg",
      "descricao": "Analgésico e antitérmico",
      "preco": 12.5,
      "validade": "2025-12-31T00:00:00",
      "fornecedor_id": "67ba15648b5583d2b4a8b95e",
      "criado_em": "2025-02-22T23:24:54.848000",
      "atualizado_em": "2025-02-22T23:24:54.848000"
    
    }

3. Estoque

from odmantic import Model, Field
from datetime import datetime
from bson import ObjectId

class Estoque(Model):
    remedio_id: ObjectId
    quantidade: int
    data_entrada: datetime
    validade: datetime
    criado_em: datetime = Field(default_factory=datetime.utcnow)
    atualizado_em: datetime = Field(default_factory=datetime.utcnow)

Exemplo de POST:

{
  "remedio": {
    "nome": "Paracetamol 750mg",
    "descricao": "Analgésico e antitérmico",
    "preco": 12.5,
    "validade": "2025-12-31T00:00:00",
    "fornecedor_id": "67ba15648b5583d2b4a8b95e",
    "criado_em": "2025-02-21T15:00:00",
    "atualizado_em": "2025-02-21T15:00:00",
    "id": "67ba17e7e178545bca028c99"
  },
  "quantidade": 100,
  "data_entrada": "2025-02-21T15:00:00",
  "validade": "2025-12-31T00:00:00",
  "criado_em": "2025-02-21T15:00:00",
  "atualizado_em": "2025-02-21T15:00:00",
  "id": "67ba17e7e178545bca028c99"
}

Exemplo de PUT:

{
  "remedio": {
    "nome": "Paracetamol 500mg",
    "descricao": "Analgésico e antitérmico, com nova dosagem",
    "preco": 15.0,
    "validade": "2025-12-31T00:00:00",
    "fornecedor_id": "67ba15648b5583d2b4a8b95e",
    "criado_em": "2025-02-21T15:00:00",
    "atualizado_em": "2025-02-21T15:00:00"
  },
  "quantidade": 100,
  "data_entrada": "2025-02-25T10:00:00",
  "validade": "2025-12-31T00:00:00",
  "criado_em": "2025-02-25T10:00:00",
  "atualizado_em": "2025-02-25T10:00:00"
}

Diagrama de Classes

Endpoints da API

Fornecedor

  • POST /fornecedores/ → Cria um novo fornecedor.
  • GET /fornecedores/{id} → Recupera informações de um fornecedor.
  • PUT /fornecedores/{id} → Atualiza as informações de um fornecedor.
  • DELETE /fornecedores/{id} → Deleta um fornecedor.

Remédio

  • POST /remedios/ → Cria um novo remédio.
  • GET /remedios/{id} → Recupera informações sobre um remédio.
  • PUT /remedios/{id} → Atualiza informações sobre um remédio.
  • DELETE /remedios/{id} → Deleta um remédio.

Estoque

  • POST /estoques/ → Cria um novo registro de estoque.
  • GET /estoques/{id} → Recupera informações sobre o estoque de um remédio.
  • PUT /estoques/{id} → Atualiza informações sobre o estoque de um remédio.
  • DELETE /estoques/{id} → Deleta um registro de estoque.

Considerações Finais

Este projeto foi desenvolvido para fins educacionais, com potencial para expansão. FastAPI e Odmantic garantem performance assíncrona e escalabilidade. O sistema facilita a gestão do estoque de medicamentos, permitindo o cadastro e controle de fornecedores, remédios e seus respectivos estoques.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages