+page.server.js 3 KB
import { supabase } from '$lib/supabase';
import { error } from '@sveltejs/kit';

export async function load({ params }) {
  const { codigo } = params;

  const { data, error: dbError } = await supabase
    .schema('ppto')
    .from('clas_objetos')
    .select('*')
    .eq('objeto', codigo);

  if (dbError || !data || data.length === 0) {
    throw error(404, 'Objeto no encontrado');
  }

  // Tomar el primer resultado (puede haber duplicados)
  const objeto = data[0];

  // Obtener jerarquía (padres e hijos)
  let padres = [];
  let hijos = [];

  // Buscar padre según nivel
  if (objeto.nivel === 'subpartida') {
    // Padre es partida
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'partida')
      .eq('grupo', objeto.grupo)
      .eq('subgrupo', objeto.subgrupo)
      .eq('partida', objeto.partida);
    if (padreData?.length) padres.push(padreData[0]);
  }

  if (objeto.nivel === 'partida' || objeto.nivel === 'subpartida') {
    // Padre es subgrupo
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'subgrupo')
      .eq('grupo', objeto.grupo)
      .eq('subgrupo', objeto.subgrupo);
    if (padreData?.length) padres.unshift(padreData[0]);
  }

  if (objeto.nivel !== 'grupo') {
    // Padre es grupo
    const grupoCodigo = objeto.grupo + '0000';
    const { data: padreData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'grupo')
      .eq('objeto', grupoCodigo);
    if (padreData?.length) padres.unshift(padreData[0]);
  }

  // Buscar hijos según nivel
  if (objeto.nivel === 'grupo') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'subgrupo')
      .eq('grupo', objeto.grupo)
      .order('objeto');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.objeto === item.objeto)) acc.push(item);
      return acc;
    }, []) || [];
  } else if (objeto.nivel === 'subgrupo') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'partida')
      .eq('grupo', objeto.grupo)
      .eq('subgrupo', objeto.subgrupo)
      .order('objeto');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.objeto === item.objeto)) acc.push(item);
      return acc;
    }, []) || [];
  } else if (objeto.nivel === 'partida') {
    const { data: hijosData } = await supabase
      .schema('ppto')
      .from('clas_objetos')
      .select('*')
      .eq('nivel', 'subpartida')
      .eq('grupo', objeto.grupo)
      .eq('subgrupo', objeto.subgrupo)
      .eq('partida', objeto.partida)
      .order('objeto');
    hijos = hijosData?.reduce((acc, item) => {
      if (!acc.find(h => h.objeto === item.objeto)) acc.push(item);
      return acc;
    }, []) || [];
  }

  return {
    objeto,
    padres,
    hijos
  };
}