82 lines
1.7 KiB
TypeScript
82 lines
1.7 KiB
TypeScript
import prisma from '~~/lib/prisma';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = await requireUserSession(event);
|
|
|
|
const profile = await prisma.user.findUnique({
|
|
where: { id: user.user.id },
|
|
select: {
|
|
name: true,
|
|
email: true,
|
|
uploadedFiles: {
|
|
select: {
|
|
url: true,
|
|
createdAt: true,
|
|
answer: {
|
|
select: {
|
|
id: true,
|
|
quest: {
|
|
select: {
|
|
id: true,
|
|
title_de: true,
|
|
title_en: true,
|
|
hunt: {
|
|
select: {
|
|
id: true,
|
|
name_de: true,
|
|
name_en: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
where: {
|
|
NOT: {
|
|
answerId: null
|
|
}
|
|
}
|
|
},
|
|
userTracks: {
|
|
select: {
|
|
distanceMeters: true,
|
|
hunt: {
|
|
select: {
|
|
id: true,
|
|
name_de: true,
|
|
name_en: true
|
|
}
|
|
}
|
|
},
|
|
where: {
|
|
hunt: {
|
|
deletedAt: null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!profile) {
|
|
throw createError({ status: 404, statusText: 'Not found!' });
|
|
}
|
|
|
|
const { userTracks, ...rest } = profile;
|
|
|
|
const distances = userTracks.map((track) => ({
|
|
huntId: track.hunt.id,
|
|
huntName_de: track.hunt.name_de,
|
|
huntName_en: track.hunt.name_en,
|
|
distanceMeters: track.distanceMeters
|
|
}));
|
|
|
|
const totalDistance = distances.reduce(
|
|
(sum, entry) => sum + entry.distanceMeters,
|
|
0
|
|
);
|
|
|
|
return { ...rest, distances, totalDistance };
|
|
});
|