Files
pichunt/server/api/admin/hunt/index.post.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

49 lines
1.3 KiB
TypeScript

import { useValidatedBody, z } from 'h3-zod';
import prisma from '~~/lib/prisma';
export default defineEventHandler(async (event) => {
const user = await requireUserSession(event);
if (user.user.role !== 'CREATOR' && user.user.role !== 'ADMIN') {
throw createError({
statusCode: 403,
statusMessage: 'Not allowed!'
});
}
const body = await useValidatedBody(
event,
z.object({
name_de: z.string().min(1).max(256).trim(),
name_en: z.string().min(1).max(256).trim(),
description_de: z.string().max(1000).trim().default(''),
description_en: z.string().max(1000).trim().default(''),
virtual: z.boolean().default(false),
start: z.iso.datetime().nullish(),
end: z.iso.datetime().nullish(),
allowJoin: z.boolean().default(false),
revealQuests: z.boolean().default(false),
revealAnswers: z.boolean().default(false),
public: z.boolean().default(true),
trackDistance: z.boolean().default(false)
})
);
return await prisma.hunt.create({
data: {
...body,
creatorId: user.user.id,
members: {
create: {
memberId: user.user.id
}
}
},
select: {
id: true,
name_de: true,
name_en: true
}
});
});