🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
164
scripts/package-lock.json
generated
Normal file
164
scripts/package-lock.json
generated
Normal file
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"name": "database-scripts",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "database-scripts",
|
||||
"version": "1.0.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@supabase/supabase-js": "^2.39.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/auth-js": {
|
||||
"version": "2.71.1",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.71.1.tgz",
|
||||
"integrity": "sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/node-fetch": "^2.6.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/functions-js": {
|
||||
"version": "2.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.5.tgz",
|
||||
"integrity": "sha512-v5GSqb9zbosquTo6gBwIiq7W9eQ7rE5QazsK/ezNiQXdCbY+bH8D9qEaBIkhVvX4ZRW5rP03gEfw5yw9tiq4EQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/node-fetch": "^2.6.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/node-fetch": {
|
||||
"version": "2.6.15",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz",
|
||||
"integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/postgrest-js": {
|
||||
"version": "1.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.21.3.tgz",
|
||||
"integrity": "sha512-rg3DmmZQKEVCreXq6Am29hMVe1CzemXyIWVYyyua69y6XubfP+DzGfLxME/1uvdgwqdoaPbtjBDpEBhqxq1ZwA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/node-fetch": "^2.6.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/realtime-js": {
|
||||
"version": "2.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.15.5.tgz",
|
||||
"integrity": "sha512-/Rs5Vqu9jejRD8ZeuaWXebdkH+J7V6VySbCZ/zQM93Ta5y3mAmocjioa/nzlB6qvFmyylUgKVS1KpE212t30OA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/node-fetch": "^2.6.13",
|
||||
"@types/phoenix": "^1.6.6",
|
||||
"@types/ws": "^8.18.1",
|
||||
"ws": "^8.18.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/storage-js": {
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.12.0.tgz",
|
||||
"integrity": "sha512-HdKq8jAARnZ/OokE0wml/KzLwJ1X/iX7GtfLvve1HHxxsB3Y0juk0+3dMKr0mKRpjiGzzgvHhF2hxt9ui17OUQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/node-fetch": "^2.6.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@supabase/supabase-js": {
|
||||
"version": "2.57.3",
|
||||
"resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.57.3.tgz",
|
||||
"integrity": "sha512-gROsjAJ9ckeBpsLyMwK9plaZjw1uhlGgKp2EEQRJryPmI0jpKoGc07rvZ7KF8nk7H8UCwvUeYl68Fiw6M13tNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@supabase/auth-js": "2.71.1",
|
||||
"@supabase/functions-js": "2.4.5",
|
||||
"@supabase/node-fetch": "2.6.15",
|
||||
"@supabase/postgrest-js": "1.21.3",
|
||||
"@supabase/realtime-js": "2.15.5",
|
||||
"@supabase/storage-js": "^2.10.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz",
|
||||
"integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~7.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/phoenix": {
|
||||
"version": "1.6.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz",
|
||||
"integrity": "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/ws": {
|
||||
"version": "8.18.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
||||
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "7.10.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
|
||||
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.18.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
||||
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": ">=5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
21
scripts/package.json
Normal file
21
scripts/package.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "database-scripts",
|
||||
"version": "1.0.0",
|
||||
"description": "Scripts administrativos para operações no banco de dados",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"update-b101-fase9": "node update_apontamentos_b101_fase9.js",
|
||||
"install": "npm install"
|
||||
},
|
||||
"dependencies": {
|
||||
"@supabase/supabase-js": "^2.39.0"
|
||||
},
|
||||
"keywords": [
|
||||
"supabase",
|
||||
"database",
|
||||
"scripts",
|
||||
"admin"
|
||||
],
|
||||
"author": "Sistema de Produção",
|
||||
"license": "ISC"
|
||||
}
|
||||
209
scripts/update_apontamentos_b101_fase9.js
Normal file
209
scripts/update_apontamentos_b101_fase9.js
Normal file
@@ -0,0 +1,209 @@
|
||||
const { createClient } = require('@supabase/supabase-js');
|
||||
const readline = require('readline');
|
||||
|
||||
// Configuração do Supabase
|
||||
const supabaseUrl = 'https://lwjppiicofojfcdfjsto.supabase.co';
|
||||
const supabaseServiceKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx3anBwaWljb2ZvamZjZGZqc3RvIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc1MDQ2MzA1MywiZXhwIjoyMDY2MDM5MDUzfQ.t9vlXHQH4ou2S-CKSeDYSnAeMDYpmkklqlwyGDvpocI';
|
||||
|
||||
// Inicializar cliente Supabase com service role para operações administrativas
|
||||
const supabase = createClient(supabaseUrl, supabaseServiceKey);
|
||||
|
||||
// Interface para entrada do usuário
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
});
|
||||
|
||||
// Função para solicitar confirmação do usuário
|
||||
function askConfirmation(question) {
|
||||
return new Promise((resolve) => {
|
||||
rl.question(question, (answer) => {
|
||||
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes' || answer.toLowerCase() === 's' || answer.toLowerCase() === 'sim');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Função principal
|
||||
async function updateApontamentosB101Fase9() {
|
||||
console.log('🔧 Script de Atualização de Apontamentos - OF B101 Fase 9');
|
||||
console.log('=' .repeat(60));
|
||||
console.log('Objetivo: Alterar data de 08/09/2025 para 10/09/2025');
|
||||
console.log('Filtro: Apenas peças com marca entre 10 e 70');
|
||||
console.log('');
|
||||
|
||||
try {
|
||||
// Passo 1: Buscar registros que serão afetados
|
||||
console.log('📋 Passo 1: Identificando registros a serem atualizados...');
|
||||
|
||||
const { data: registrosParaAtualizar, error: selectError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.select(`
|
||||
id,
|
||||
of_number,
|
||||
data_apontamento,
|
||||
quantidade_produzida,
|
||||
observacoes,
|
||||
pecas!inner(
|
||||
id,
|
||||
of_number,
|
||||
etapa_fase,
|
||||
marca,
|
||||
descricao
|
||||
)
|
||||
`)
|
||||
.eq('pecas.of_number', 'B101')
|
||||
.eq('pecas.etapa_fase', '9')
|
||||
.gte('pecas.marca', '10')
|
||||
.lte('pecas.marca', '70')
|
||||
.eq('data_apontamento', '2025-09-08');
|
||||
|
||||
if (selectError) {
|
||||
console.error('❌ Erro ao buscar registros:', selectError.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!registrosParaAtualizar || registrosParaAtualizar.length === 0) {
|
||||
console.log('ℹ️ Nenhum registro encontrado com os critérios especificados.');
|
||||
console.log(' - OF: B101');
|
||||
console.log(' - Fase: 9');
|
||||
console.log(' - Marca: entre 10 e 70');
|
||||
console.log(' - Data atual: 08/09/2025');
|
||||
return;
|
||||
}
|
||||
|
||||
// Mostrar registros encontrados
|
||||
console.log(`✅ Encontrados ${registrosParaAtualizar.length} registro(s) para atualização:`);
|
||||
console.log('');
|
||||
|
||||
registrosParaAtualizar.forEach((registro, index) => {
|
||||
console.log(`📦 Registro ${index + 1}:`);
|
||||
console.log(` ID: ${registro.id}`);
|
||||
console.log(` OF: ${registro.of_number}`);
|
||||
console.log(` Peça: ${registro.pecas.marca} - ${registro.pecas.descricao}`);
|
||||
console.log(` Fase: ${registro.pecas.etapa_fase}`);
|
||||
console.log(` Data atual: ${registro.data_apontamento}`);
|
||||
console.log(` Quantidade: ${registro.quantidade_produzida}`);
|
||||
if (registro.observacoes) {
|
||||
console.log(` Observações: ${registro.observacoes}`);
|
||||
}
|
||||
console.log('');
|
||||
});
|
||||
|
||||
// Passo 2: Solicitar confirmação
|
||||
console.log('⚠️ ATENÇÃO: Esta operação irá alterar a data dos registros acima.');
|
||||
console.log(' Data atual: 08/09/2025');
|
||||
console.log(' Nova data: 10/09/2025');
|
||||
console.log('');
|
||||
|
||||
const confirmacao = await askConfirmation('Deseja continuar com a atualização? (s/n): ');
|
||||
|
||||
if (!confirmacao) {
|
||||
console.log('❌ Operação cancelada pelo usuário.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Passo 3: Executar a atualização
|
||||
console.log('');
|
||||
console.log('🔄 Passo 2: Executando atualização...');
|
||||
|
||||
// Extrair IDs dos registros para atualização
|
||||
const idsParaAtualizar = registrosParaAtualizar.map(r => r.id);
|
||||
|
||||
const { data: registrosAtualizados, error: updateError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.update({
|
||||
data_apontamento: '2025-09-10',
|
||||
updated_at: new Date().toISOString()
|
||||
})
|
||||
.in('id', idsParaAtualizar)
|
||||
.select(`
|
||||
id,
|
||||
of_number,
|
||||
data_apontamento,
|
||||
quantidade_produzida,
|
||||
updated_at,
|
||||
pecas!inner(
|
||||
of_number,
|
||||
etapa_fase,
|
||||
marca
|
||||
)
|
||||
`);
|
||||
|
||||
if (updateError) {
|
||||
console.error('❌ Erro ao atualizar registros:', updateError.message);
|
||||
return;
|
||||
}
|
||||
|
||||
// Passo 4: Confirmar atualização
|
||||
console.log(`✅ Atualização concluída com sucesso!`);
|
||||
console.log(`📊 ${registrosAtualizados?.length || 0} registro(s) atualizado(s).`);
|
||||
console.log('');
|
||||
|
||||
if (registrosAtualizados && registrosAtualizados.length > 0) {
|
||||
console.log('📋 Registros atualizados:');
|
||||
registrosAtualizados.forEach((registro, index) => {
|
||||
console.log(` ${index + 1}. ID: ${registro.id} | Nova data: ${registro.data_apontamento} | Atualizado em: ${new Date(registro.updated_at).toLocaleString('pt-BR')}`);
|
||||
});
|
||||
}
|
||||
|
||||
// Passo 5: Verificação final
|
||||
console.log('');
|
||||
console.log('🔍 Passo 3: Verificação final...');
|
||||
|
||||
const { data: verificacao, error: verifyError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.select(`
|
||||
id,
|
||||
of_number,
|
||||
data_apontamento,
|
||||
pecas!inner(
|
||||
of_number,
|
||||
etapa_fase,
|
||||
marca
|
||||
)
|
||||
`)
|
||||
.eq('pecas.of_number', 'B101')
|
||||
.eq('pecas.etapa_fase', '9')
|
||||
.gte('pecas.marca', '10')
|
||||
.lte('pecas.marca', '70')
|
||||
.eq('data_apontamento', '2025-09-10');
|
||||
|
||||
if (verifyError) {
|
||||
console.error('❌ Erro na verificação final:', verifyError.message);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`✅ Verificação concluída: ${verificacao?.length || 0} registro(s) com a nova data (10/09/2025).`);
|
||||
|
||||
// Verificar se ainda existem registros com a data antiga
|
||||
const { data: registrosAntigos, error: oldRecordsError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.select('id, pecas!inner(of_number, etapa_fase, marca)')
|
||||
.eq('pecas.of_number', 'B101')
|
||||
.eq('pecas.etapa_fase', '9')
|
||||
.gte('pecas.marca', '10')
|
||||
.lte('pecas.marca', '70')
|
||||
.eq('data_apontamento', '2025-09-08');
|
||||
|
||||
if (!oldRecordsError && registrosAntigos && registrosAntigos.length > 0) {
|
||||
console.log(`⚠️ Atenção: Ainda existem ${registrosAntigos.length} registro(s) com a data antiga (08/09/2025).`);
|
||||
} else {
|
||||
console.log('✅ Nenhum registro restante com a data antiga.');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Erro inesperado:', error.message);
|
||||
console.error('Stack trace:', error.stack);
|
||||
} finally {
|
||||
rl.close();
|
||||
console.log('');
|
||||
console.log('🏁 Script finalizado.');
|
||||
}
|
||||
}
|
||||
|
||||
// Executar o script
|
||||
if (require.main === module) {
|
||||
updateApontamentosB101Fase9();
|
||||
}
|
||||
|
||||
module.exports = { updateApontamentosB101Fase9 };
|
||||
71
scripts/update_apontamentos_b101_fase9_auto.js
Normal file
71
scripts/update_apontamentos_b101_fase9_auto.js
Normal file
@@ -0,0 +1,71 @@
|
||||
const { createClient } = require('@supabase/supabase-js');
|
||||
|
||||
// Configuração do Supabase
|
||||
const supabaseUrl = 'https://lwjppiicofojfcdfjsto.supabase.co';
|
||||
const supabaseServiceKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx3anBwaWljb2ZvamZjZGZqc3RvIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc1MDQ2MzA1MywiZXhwIjoyMDY2MDM5MDUzfQ.t9vlXHQH4ou2S-CKSeDYSnAeMDYpmkklqlwyGDvpocI';
|
||||
|
||||
// Inicializar cliente Supabase com service role para operações administrativas
|
||||
const supabase = createClient(supabaseUrl, supabaseServiceKey);
|
||||
|
||||
// Função principal
|
||||
async function updateApontamentosB101Fase9Auto() {
|
||||
console.log('🔧 Script de Atualização Automática - OF B101 Fase 9');
|
||||
console.log('=' .repeat(60));
|
||||
console.log('Objetivo: Alterar data de 08/09/2025 para 10/09/2025');
|
||||
console.log('Filtro: Apenas peças com marca entre 10 e 70');
|
||||
console.log('');
|
||||
|
||||
try {
|
||||
// Passo 1: Buscar registros que serão afetados
|
||||
console.log('📋 Passo 1: Identificando registros a serem atualizados...');
|
||||
|
||||
const { data: registrosParaAtualizar, error: selectError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.select(`
|
||||
id,
|
||||
of_number,
|
||||
data_apontamento,
|
||||
quantidade_produzida,
|
||||
observacoes,
|
||||
pecas!inner(
|
||||
id,
|
||||
of_number,
|
||||
etapa_fase,
|
||||
marca,
|
||||
descricao
|
||||
)
|
||||
`)
|
||||
.eq('pecas.of_number', 'B101')
|
||||
.eq('pecas.etapa_fase', '9')
|
||||
.gte('pecas.marca', '10')
|
||||
.lte('pecas.marca', '70')
|
||||
.eq('data_apontamento', '2025-09-08');
|
||||
|
||||
if (selectError) {
|
||||
console.error('❌ Erro ao buscar registros:', selectError.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!registrosParaAtualizar || registrosParaAtualizar.length === 0) {
|
||||
console.log('ℹ️ Nenhum registro encontrado com os critérios especificados.');
|
||||
console.log(' - OF: B101');
|
||||
console.log(' - Fase: 9');
|
||||
console.log(' - Marca: entre 10 e 70');
|
||||
console.log(' - Data atual: 08/09/2025');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`✅ Encontrados ${registrosParaAtualizar.length} registro(s) para atualização.`);
|
||||
console.log('');
|
||||
|
||||
// Passo 2: Executar a atualização automaticamente
|
||||
console.log('🔄 Passo 2: Executando atualização automaticamente...');
|
||||
|
||||
// Extrair IDs dos registros para atualização
|
||||
const idsParaAtualizar = registrosParaAtualizar.map(r => r.id);
|
||||
|
||||
const { data: registrosAtualizados, error: updateError } = await supabase
|
||||
.from('apontamentos_producao')
|
||||
.update({
|
||||
data_apontamento: '2025-09-10',
|
||||
updated_at: new Date().toISOString(
|
||||
Reference in New Issue
Block a user