feat(hunt): track walking distance via GPS, show live locations on map
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

Add foreground-only GPS distance tracking for hunts
This commit is contained in:
2026-09-27 20:55:58 +02:00
parent a0fc836c05
commit 61cc516f47
43 changed files with 2313 additions and 24 deletions
+16 -1
View File
@@ -25,6 +25,8 @@ export default defineEventHandler(async (event) => {
description_en: true,
revealAnswers: true,
revealQuests: true,
virtual: true,
trackDistance: true,
picture: {
select: {
url: true
@@ -79,6 +81,14 @@ export default defineEventHandler(async (event) => {
]
}
},
userTracks: {
select: {
distanceMeters: true
},
where: {
userId
}
},
quests: {
select: {
id: true,
@@ -182,10 +192,14 @@ export default defineEventHandler(async (event) => {
if (!_hunt) {
throw createError({ status: 404, statusText: 'Not found!' });
}
const { teams, members, quests, ...hunt } = _hunt;
const { teams, members, quests, userTracks, ...hunt } = _hunt;
const isMember = hunt.creator.id === userId || members.length > 0;
const ownTeam = teams.length > 0 ? teams[0] : null;
const ownDistance =
hunt.trackDistance && isMember
? (userTracks[0]?.distanceMeters ?? 0)
: undefined;
const mappedQuests = quests.map(({ answers, _count, ...q }) => ({
...q,
@@ -203,6 +217,7 @@ export default defineEventHandler(async (event) => {
ownTeam,
loggedIn: !!user.user,
totalScore: ownTeam !== null ? totalScore : undefined,
ownDistance,
quests: hunt.revealQuests || isMember ? mappedQuests : null,
...hunt
};