import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Json, Tables } from '@kit/supabase/database'; import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client'; import type { IMaterialGroup, IUuringElement } from './medipost.types'; export type AnalysisElement = Tables<{ schema: 'medreport' }, 'analysis_elements'> & { analysis_groups: Tables<{ schema: 'medreport' }, 'analysis_groups'>; }; export async function getAnalysisElements({ originalIds }: { originalIds?: string[] } = {}) { const query = getSupabaseServerClient() .schema('medreport') .from('analysis_elements') .select(`*, analysis_groups(*)`) .order('order', { ascending: true }); if (Array.isArray(originalIds)) { query.in('analysis_id_original', [...new Set(originalIds)]); } const { data: analysisElements } = await query; return analysisElements ?? []; } export async function createAnalysisElement({ analysisElement, analysisGroupId, materialGroups, }: { analysisElement: IUuringElement; analysisGroupId: number; materialGroups: IMaterialGroup[]; }) { const { data: insertedAnalysisElement, error } = await getSupabaseServerAdminClient() .schema('medreport') .from('analysis_elements') .upsert( { analysis_id_oid: analysisElement.UuringIdOID, analysis_id_original: analysisElement.UuringId, tehik_short_loinc: analysisElement.TLyhend, tehik_loinc_name: analysisElement.KNimetus, analysis_name_lab: analysisElement.UuringNimi, order: analysisElement.Jarjekord, parent_analysis_group_id: analysisGroupId, material_groups: materialGroups as unknown as Json[], }, { onConflict: 'analysis_id_original', ignoreDuplicates: false }, ) .select('id'); const id = insertedAnalysisElement?.[0]?.id; if (error || !id) { throw new Error( `Failed to insert analysis element (id: ${analysisElement.UuringId}), error: ${error?.message}`, ); } return id; }