feat(hunt): track walking distance via GPS, show live locations on map
Add foreground-only GPS distance tracking for hunts
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user