import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { // region Users const admin = await prisma.user.upsert({ where: { email: 'admin@mail.com' }, update: {}, create: { email: 'admin@mail.com', name: 'Admin user', role: 'ADMIN', emailConfirmedAt: new Date() } }); const huntMember = await prisma.user.upsert({ where: { email: 'team@mail.com' }, update: {}, create: { email: 'team@mail.com', name: 'Hunt member', role: 'ADMIN', emailConfirmedAt: new Date() } }); const user = await prisma.user.upsert({ where: { email: 'user@mail.com' }, update: {}, create: { email: 'user@mail.com', name: 'User', role: 'USER', emailConfirmedAt: new Date() } }); const teamMember = await prisma.user.upsert({ where: { email: 'member@mail.com' }, update: {}, create: { email: 'member@mail.com', name: 'Team Member', role: 'USER', emailConfirmedAt: new Date() } }); // endregion const hunt = await prisma.hunt.create({ include: { teams: true, quests: { orderBy: { order: 'asc' } } }, data: { name: 'Bremer Stadtrallye!', description: 'DIE Rallye durch Bremen!', start: new Date('2025-08-23T10:00:00.000Z'), end: new Date('2025-08-30T10:00:00.000Z'), quests: { create: [ { title: 'MOIN!', description: 'Finde das größte MOIN', question: 'Wo steht es?', order: 0, optional: false, pictureRequired: true, textRequired: false, textType: 'TEXT', textSolution: 'Am Herdentor', points: 10 }, { title: 'Die Musikanten', description: 'Dort wo die vier Bremer Tiere musizieren, müsst ihr ihre Beine anfassen!', question: 'Wie viele Beine haben die Musikanten zusammen?', extraText: 'Mehr Punkte, je mehr unterschiedliche Beine ihre berührt!', points: 10, extraPoints: 5, pictureRequired: true, optional: false, textRequired: true, textType: 'INTEGER', textSolution: '14', order: 1 }, { title: 'Tolle Aussicht', description: 'Mache ein Bild aus einem Gebäude der Hochschule, von so weit oben wie möglich!', points: 10, extraPoints: 10, extraText: 'Wenn ihr das einzige Team in diesem Gebäude/Standort oder die Höchsten wart!', optional: false, pictureRequired: true, textRequired: false, question: 'In welchem Gebäude und Stockwerk wart ihr?', textType: 'TEXT', order: 2 } ] }, creatorId: admin.id, members: { create: [ { memberId: huntMember.id } ] }, teams: { create: [ { ownerId: user.id, name: 'Team 1', description: 'Das beste Informatik Team!', password: 'top secret', members: { create: [ { memberId: teamMember.id } ] } } ] } } }); const team = hunt.teams[0]; const answers = await prisma.questAnswer.createManyAndReturn({ data: [ { teamId: team.id, memberId: user.id, questId: hunt.quests[0].id, text: 'Am Herdentor', picture: '/img/dummy/moin1.jpeg', location: 'An der Haltestelle Herdentor', lat: 53.079138, lon: 8.809734, reviewerId: admin.id, score: 10, review: 'Schönes Bild!' }, { teamId: team.id, memberId: teamMember.id, questId: hunt.quests[1].id, text: '14', picture: '/img/dummy/musikanten1.jpg', location: 'Marktplatz', score: 10 }, { teamId: team.id, memberId: teamMember.id, questId: hunt.quests[2].id, picture: '/img/dummy/aussicht1.jpeg', text: 'Neustadtswall AB-Gebäude Etage 10', score: 17, reviewerId: huntMember.id, review: 'Höchstes Team, aber leider gabs andere im AB!' } ] }); console.log(JSON.stringify(hunt, null, 2)); } main() .then(async () => { await prisma.$disconnect(); }) .catch(async (e) => { console.error(e); await prisma.$disconnect(); process.exit(1); });