64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
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;
|
|
}
|