01. DADOS GERAIS
| Produto: | |
|---|
| Linha de Produto: | |
|---|
| Segmento: | |
|---|
| Módulo: | PDVSync.Core.Controle - Hangfire |
|---|
| Função: |
|
|---|
| País: | Brasil |
|---|
| Ticket: |
|
|---|
| Requisito/Story/Issue (informe o requisito relacionado) : | DVARINT1-14507 |
|---|
02. SITUAÇÃO/REQUISITO
Eliminar a duplicidade de armazenamento do conteúdo dos dados processados no CommerceHub, liberando espaço no banco da fila após o processamento e garantindo a preservação do histórico no bucket de forma segura, eficiente e com melhor custo-benefício.
03. SOLUÇÃO
- Foi criado um Job recorrente no projeto de Hangfire chamado: FazerBackupDadosFilaAsync que buscar os dados no banco, faz o upload dos mesmo para o GCS e deleta os arquivos. As regras de secução são as seguitnes:
- Roda todo dia de 1 à 5:59 da manhã, dessa forma evita a concorrência com os demais serviços que rodam durante o dia;
- Primeiro é obitodo a lista de Inquilinos que possuem dados com status "Enviado para MS Responsável" (5); Depois:
- Obtem todos os dados com status igual ou superior a "Enviado para MS Responsável" (5);
- Os dados são obtidos de forma páginada, sendo 800 registro por vez e aplicando os filtros de status, inquilino e data de cadastro;
- O job trabalha com um range de datas;
- A data de início é a data de cadastro do dado mais antigo com o status citado, e a data de fim é a data anterior a data de execução do job;
- Além de paginar os dados ao consultar o banco, o job calcula uma média de tamanho dos dados, e caso estes sejam superior a 1GB, esses dados são dividos em bloco menores;
- O Upload é feito em stream, e primeiro salva os dados em um arquivo temporário, e realiza o stream para o GCS. Com esta abordagem, o consumo de memória é drasticamente reduzido;
AppSettings
- O tempo de execução do Job é definido através da variável "Hangfire:SchedulerFazerBackupDadosFilaAsync";
- O nome do bucket no qual os dados serão salvos é definido através da variável: "JobBackupFila:Bucketname". O nome utilizado é "dev-backup-dados-fila" no ambiente de DEV.
- Deve-se solicitar a criação do bucket para os demais ambientes (QA, STG e PRD), de preferência com uma data para expurgo automático dos dados.
Estrutura dos Arquivos
No bucket, os dados são salvos seguindo a seguinte hierarquia: ano/mês/dia/arquivo.json

Já os arquivos seguem o seguinte padrão: idInquilino_{X}_yyyyMMddHHmmss_{Guid}_{PartNumber}.json
Exemplo de valor completo: 2025/12/11/idInquilino_15_20251208091220215_596031ae7eb24d029bd7ab0b1ab3033c_001.json
Obs.: O PartNumber representa o indice do dado dentro do lote de dados. Como dito antes, arquivos maiores que 1GB são didividos em blocos menores, cada bloco de dado recebe um número que se inicia em 1,
este valor é o PartNumber.
4.54GB processado em 12min
