fetch family tree

This commit is contained in:
2025-04-28 20:29:45 +02:00
parent 37bc34651a
commit a71ca26b2a
3 changed files with 93 additions and 61 deletions

View File

@@ -1,22 +1,41 @@
import type {Layout} from '$lib/graph/model';
import type { components } from '$lib/api/api.gen';
import type { Layout } from '$lib/graph/model';
import type { Edge, Node } from '@xyflow/svelte';
export function parseFamilyTree(data: components['schemas']['FamilyTree']): Layout {
if (
data === null ||
data?.people === null ||
data?.people === undefined ||
data?.people.length === 0
) {
throw new Error('Family tree is empty');
}
export async function fetchFamilyTree(with_out_spouse: boolean): Promise<Layout> {
const url = with_out_spouse
? '/api/family_tree?with_out_spouse=true'
: '/api/family_tree?with_out_spouse=false';
const response = await fetch(url, {
method: 'GET'
})
const nodes: Node[] = data.people.map((person) => {
let newNode = { data: { ...person } } as Node;
if (person.id !== null && person.id !== undefined) {
newNode.id = person.id.toString();
}
if (response.status !== 200){
throw new Error(await response.text());
}
return newNode;
});
let layout: Layout = {
Nodes: [],
Edges: []
}
let relationships: Edge[] = [];
if (data.relationships) {
relationships = data.relationships.map((relationship) => {
let newEdge = { data: { ...relationship.properties } } as Edge;
if (relationship.start !== null && relationship.start !== undefined) {
newEdge.source = relationship.start.toString();
}
if (relationship.end !== null && relationship.end !== undefined) {
newEdge.target = relationship.end.toString();
}
return layout;
}
return newEdge;
});
}
return { Nodes: nodes, Edges: relationships };
}

View File

@@ -1,44 +0,0 @@
import { error, redirect } from '@sveltejs/kit';
import { client } from '$lib/api/client';
import type { RequestEvent } from './$types';
import type { components } from '$lib/api/api.gen';
async function GET(event: RequestEvent): Promise<Response> {
if (event.locals.session === null /*|| event.locals.familytree === nul*/) {
return redirect(302, '/login');
}
const response = await client.GET(event.url.searchParams.get('with_out_spouse') === 'true' ? '/family-tree-with-spouses':'/family-tree', {
params: {
header: { 'X-User-ID': event.locals.session.userId }
}
});
if (response.response.status !== 200) {
return error(500, {
message: response.error?.msg || 'Failed to fetch family tree'
});
}
if (response.data === null || response.data?.people === null || response.data?.people === undefined || response.data?.people.length === 0) {
return error(500, {
message: 'Family tree is empty'
});
}
var peopleToReturn : Array<components['schemas']['OptimizedPersonNode']> = [];
for (const person of response.data.people) {
let newPerson = person
if (newPerson.profile_picture!== null && newPerson.profile_picture !== undefined) {
}
peopleToReturn.push(newPerson);
}
return new Response(JSON.stringify(peopleToReturn), {
status: 200,
});
}

View File

@@ -0,0 +1,57 @@
import { error, redirect } from '@sveltejs/kit';
import { client } from '$lib/api/client';
import type { RequestEvent } from './$types';
import type { components } from '$lib/api/api.gen';
export async function GET(event: RequestEvent): Promise<Response> {
if (event.locals.session === null) {
return redirect(302, '/login');
}
const response = await client.GET(
event.url.searchParams.get('with_out_spouse') === 'true'
? '/family-tree-with-spouses'
: '/family-tree',
{
params: {
header: { 'X-User-ID': event.locals.session.userId }
}
}
);
if (response.response.status !== 200) {
return error(500, {
message: response.error?.msg || 'Failed to fetch family tree'
});
}
if (
response.data === null ||
response.data?.people === null ||
response.data?.people === undefined ||
response.data?.people.length === 0
) {
return error(500, {
message: 'Family tree is empty'
});
}
var graphToReturn: components['schemas']['FamilyTree'] = {
people: [],
relationships: response.data.relationships
};
for (const person of response.data.people) {
let newPerson = person;
if (newPerson.profile_picture !== null && newPerson.profile_picture !== undefined) {
}
if (graphToReturn.people !== undefined) {
graphToReturn.people.push(newPerson);
}
}
return new Response(JSON.stringify(graphToReturn), {
status: 200
});
}