All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s
El endpoint ahora puede cargar datos de ejemplo en dos escenarios: 1. Cuando se eliminó la estructura completa (DROP): - Detecta que las tablas no existen - Ejecuta el schema completo (01_schema.sql) - Luego carga los datos de ejemplo (02_seed.sql) 2. Cuando solo se eliminaron los datos (TRUNCATE): - Detecta que las tablas existen - Limpia los datos con TRUNCATE CASCADE - Luego carga los datos de ejemplo Esto hace que el botón "CARGAR DATOS DE EJEMPLO" sea más robusto y funcione en cualquier estado de la base de datos.
88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
/**
|
|
* ⚠️ ⚠️ ⚠️ ENDPOINT DE DEBUG - TEMPORAL ⚠️ ⚠️ ⚠️
|
|
*
|
|
* POST /api/debug/seed-database
|
|
*
|
|
* CARGA LOS DATOS DE EJEMPLO EN LA BASE DE DATOS
|
|
*
|
|
* ⚠️ NO ELIMINAR SIN CONSULTAR A DARIO/DRAGANEL/NUCLEO000 ⚠️
|
|
*
|
|
* Este endpoint fue creado para desarrollo y debugging.
|
|
* Antes de eliminarlo, preguntar si todavía es necesario.
|
|
*/
|
|
|
|
import { getClient } from '../../utils/db'
|
|
import { readFile } from 'fs/promises'
|
|
import { join } from 'path'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
console.log('🌱 SEED DATABASE - Cargando datos de ejemplo...')
|
|
|
|
const client = await getClient()
|
|
|
|
try {
|
|
// Leer los archivos SQL
|
|
const schemaPath = join(process.cwd(), 'server', 'database', '01_schema.sql')
|
|
const seedPath = join(process.cwd(), 'server', 'database', '02_seed.sql')
|
|
|
|
const schemaSQL = await readFile(schemaPath, 'utf-8')
|
|
const seedSQL = await readFile(seedPath, 'utf-8')
|
|
|
|
await client.query('BEGIN')
|
|
|
|
// Verificar si las tablas existen
|
|
const tablesExist = await client.query(`
|
|
SELECT EXISTS (
|
|
SELECT FROM information_schema.tables
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'lotes'
|
|
) as exists
|
|
`)
|
|
|
|
const needsSchema = !tablesExist.rows[0].exists
|
|
|
|
if (needsSchema) {
|
|
// Si no existen las tablas, ejecutar schema completo
|
|
console.log('📋 Las tablas no existen. Creando schema...')
|
|
await client.query(schemaSQL)
|
|
} else {
|
|
console.log('📋 Las tablas ya existen. Limpiando datos existentes...')
|
|
// Si las tablas existen, limpiar datos antes de cargar seed
|
|
await client.query('TRUNCATE TABLE operacion_lotes CASCADE')
|
|
await client.query('TRUNCATE TABLE operaciones CASCADE')
|
|
await client.query('TRUNCATE TABLE lotes CASCADE')
|
|
}
|
|
|
|
// Ejecutar seed (inserta datos de ejemplo)
|
|
console.log('📋 Cargando datos de ejemplo...')
|
|
await client.query(seedSQL)
|
|
|
|
await client.query('COMMIT')
|
|
|
|
console.log('✅ Datos de ejemplo cargados exitosamente')
|
|
|
|
const message = needsSchema
|
|
? 'Schema creado y datos de ejemplo cargados exitosamente'
|
|
: 'Datos existentes limpiados y datos de ejemplo cargados exitosamente'
|
|
|
|
return {
|
|
success: true,
|
|
message,
|
|
}
|
|
} catch (error) {
|
|
await client.query('ROLLBACK')
|
|
throw error
|
|
} finally {
|
|
client.release()
|
|
}
|
|
} catch (error: any) {
|
|
console.error('❌ Error cargando datos de ejemplo:', error)
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: 'Error cargando datos de ejemplo',
|
|
data: { message: error.message },
|
|
})
|
|
}
|
|
})
|