Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .env.example

This file was deleted.

36 changes: 36 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
FROM python:3.11-slim

# Set working directory
WORKDIR /app

# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

# Install dependencies manually
RUN pip install --no-cache-dir \
pandas==2.2.3 \
flask==3.0.3 \
graphene<3.0 \
flasgger==0.9.7.1 \
flask-graphql==2.0.1 \
openpyxl==3.1.5 \
diagrams==0.23.4 \
pymongo==4.10.1 \
python-dotenv==1.0.1

# Copy project files
COPY . .

# Create directory for new collections if it doesn't exist
RUN mkdir -p processamento_planilha/jsonfiles


# Command to run when container starts
# You can override this with docker run command
CMD ["python", "-c", "import os; print('Available scripts:'); print('\\n'.join([f for f in os.listdir('.') if f.endswith('.py')]))"]

# Usage examples (add as comments for reference):
# To run load_sheet_to_mongodb.py: docker run --env-file ../.env -v /path/to/sheet.xlsx:/app/sheet.xlsx your-image-name python load_sheet_to_mongodb.py
# To run extract_collections.py: docker run -v /path/to/sheet.xlsx:/app/sheet.xlsx your-image-name python extract_collections.py
# To run upload_collections.py: docker run --env-file ../.env your-image-name python upload_collections.py
93 changes: 93 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
## **Overview**

O objetivo desse projeto é atualizar a database por meio de uma planilha disponibilizada e
registrar e comparar mudanças entre o que ja existia na database
e o que foi adicionado via planilha.

## **Estrutura do Projeto**

Esse projeto é dividido em varias etapas que são então executadas em sequencia pelo
arquivo main.py, sendo elas:

- **1 - A extração dos dados disponibilizados pela planiha no diretório "jsonfiles" em formato .json**
- **2 - A extração dos dados já existentes na database no diretório "oldjsonfiles" em formato .json**
- **3 - O processamento e comparação dos dados presentes nos arquivos .json dos 2 diretórios citados acima, onde os resultados desse processamento é salvo no diretório "comparedjsonfiles" também em formato .json**
- **4 - O envio dos dados processados (dados presentes no diretório "comparedjsonfiles") para a database mongodb**

## **Execução do Projeto**

Para executar o projeto primeiramente é necessário utilizar certas ferramentas, sendo elas:

- **1) MongoDB no Docker**:

Para rodar este projeto a melhor prática seria executá-lo com uma database local replicada
da database presente no servidor. Para isso é utilizado uma database mongodb local presente dentro do docker.

- Instalação do Docker:

Para instalar o Docker, o recomendado seria realizar o download do "Docker Desktop", que pode ser feita atraves do site oficial: https://www.docker.com/get-started

- Executando o Docker Compose:

Para executar o docker compose, basta executar o seguinte comando no terminal:

```docker compose up -d```


OBS) Certifique-se de estar dentro e somente dentro da pasta "scripts" (a pasta raiz do projeto)

- Verificando a execução da database dentro do MongoDB Compass:

É utilizado a ferramenta MongoDB Compass para analizar os dados da database local. Para instalar o MongoDB Compass, basta baixar por meio do site oficial: https://www.mongodb.com/try/download/compass

Assim que o MongoDB Compass estiver aberto, clique no "+" na parte superior esquerda e verifique se a URI é:

```mongodb://localhost:27017```

Caso a URI estiver correta, clique em "Connect" e aguarde a mensagem de sucesso. Deverá aparecer uma nova conexão local com somente
3 databases presentes: "admin", "config" e "local".

**OBS) Em alguns casos (principalmente no windows) pode ocorrer a criação de uma outra database local "fantasma" que não está relacionada com a database configurada no docker.**

- Para verificar se isso está acontecendo, basta parar o container criado previamente, utilizando o Docker Desktop e executar um "refresh" dentro da conexão local no MongoDB Compass.

- Caso o "refresh" seja realizado com sucesso, isso indica que existe uma database local "fantasma" e deve ser excluida.

- **Removendo a conexão com a database local "fantasma"**:
Primeiramente, execute o powershell como administrador e execute o seguinte comando:
```netstat -ano | findstr :27017```

Caso seja retornado algum resultado com "LISTENING", execute o seguinte comando:
- ``` taskkill /PID {PID DO PROCESSO LISTADO COMO LISTENING} /F```

Após isso, execute o container no Docker Desktop e realize a conexão via MongoDB Compass normalmente.

- **2) Replicando a database do servidor para a database local**:

Após a configuração do docker e da database, é necessário replicar os dados da database do servidor para a database local. Para isso é utilizado os seguintes comandos:

- Extraindo os dados da database do servidor para uma pasta no computador:

```mongodump --uri="mongodb+srv://labtech:L4bT&ch4R@dwcorp.y5ugild.mongodb.net/{NOME DA DATABASE}" --out={NOME DA DATABASE}```

Quando executado, este comando criará uma pasta com o mesmo nome da database replicada localizada no diretorio onde o codigo foi executado, que conterá os dados da database em formato .json

- Replicando os dados da pasta no computador para a database local:

```mongorestore --uri="mongodb+srv://labtech:L4bT&ch4R@cluster1prod.2ajqoe5.mongodb.net/rooms-reservation-app" {NOME DA DATABASE}/{NOME DA DATABASE}```

OBS) Execute este comando no local onde a pasta com os dados da database foi criada.

- **3) Baixando as dependencias**:

Para baixar as dependencias, basta executar o seguinte comando dentro do diretorio do projeto:

```poetry install```

OBS) Caso não funcionar, baixe as dependencias necessarias utilizando o comando:

```pip install {NOME DA DEPENDENCIA}```

## **Executando o Projeto**:

Para executar o projeto, basta rodar o arquivo main.py
8 changes: 8 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

services:
mongodb:
image: mongo:8.0.8
container_name: mongodb
restart: unless-stopped
ports:
- "27017:27017"
107 changes: 0 additions & 107 deletions extract_collections.py

This file was deleted.

4 changes: 2 additions & 2 deletions new_collection/CAMPUS.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[
{
"_id": "044ed56c-69e2-4d86-b72b-d1019337c82c",
"_id": "20e3ac5c-9371-437d-a668-3f803bc92e9f",
"CAMPUS": "EDIFÍCIO SEDE"
},
{
"_id": "66233517-e814-4f5a-836d-07cdea09c5ff",
"_id": "b5cca751-de8f-4f1c-9dfc-ed270a5b5b31",
"CAMPUS": "EDIFÍCIO REZENDE R. DE REZENDE"
}
]
Loading