Files
pichunt/server/api/auth/profile.get.ts
T
Pascal 61cc516f47
Docker Image CI / test (push) Failing after 41s
Docker Image CI / deploy (push) Skipped
Tests / unit (push) Failing after 36s
Tests / integration (push) Successful in 1m34s
feat(hunt): track walking distance via GPS, show live locations on map
Add foreground-only GPS distance tracking for hunts
2026-09-27 20:55:58 +02:00

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 };
});