Start admin pages

This commit is contained in:
2025-08-09 14:58:38 +02:00
parent eac877752f
commit 4189c95d38
20 changed files with 935 additions and 22 deletions
@@ -0,0 +1,4 @@
-- AlterTable
ALTER TABLE "public"."QuestAnswer" ADD COLUMN "internalNote" TEXT,
ADD COLUMN "rankingValue" INTEGER,
ADD COLUMN "showcase" BOOLEAN NOT NULL DEFAULT false;
@@ -0,0 +1,5 @@
-- DropIndex
DROP INDEX "public"."File_url_key";
-- DropIndex
DROP INDEX "public"."File_uuid_key";
+16 -8
View File
@@ -30,7 +30,7 @@ model User {
answers QuestAnswer[] @relation("AnswerMember")
reviews QuestAnswer[] @relation("AnswerReview")
uploaded_files File[]
uploadedFiles File[]
}
enum UserRole {
@@ -41,8 +41,8 @@ enum UserRole {
model File {
id Int @id @default(autoincrement())
uuid String @unique
url String @unique
uuid String
url String
creator User @relation(fields: [creatorId], references: [id], onUpdate: Cascade, onDelete: Cascade)
creatorId Int
@@ -90,7 +90,7 @@ model Hunt {
quests HuntQuest[]
old_files File[] @relation("OldHuntFiles")
oldFiles File[] @relation("OldHuntFiles")
@@index([creatorId])
}
@@ -181,7 +181,7 @@ model HuntQuest {
answers QuestAnswer[]
old_files File[] @relation("OldQuestFiles")
oldFiles File[] @relation("OldQuestFiles")
@@index([huntId])
}
@@ -211,10 +211,18 @@ model QuestAnswer {
reviewer User? @relation("AnswerReview", fields: [reviewerId], references: [id], onUpdate: Cascade, onDelete: Cascade)
reviewerId Int?
score Int? @db.SmallInt
review String?
/// Final score for this answer including bonus
score Int? @db.SmallInt
/// Will be shown public once "revealAnswers" is true, otherwise its only visible for the team members
review String?
/// Will only be shown to hunt members
internalNote String?
/// Can be used for sorting answers based on a custom metric (e.g. distance, time)
rankingValue Int?
/// If true, this answer will be featured in the end showcase
showcase Boolean @default(false)
old_files File[] @relation("OldAnswerFiles")
oldFiles File[] @relation("OldAnswerFiles")
@@index([teamId])
@@index([memberId])
+127 -3
View File
@@ -53,6 +53,51 @@ async function main() {
emailConfirmedAt: new Date()
}
});
const user2 = await tx.user.upsert({
where: { email: 'user2@mail.com' },
update: {},
create: {
email: 'user2@mail.com',
name: 'User2',
role: 'USER',
password,
emailConfirmedAt: new Date()
}
});
const teamMember2 = await tx.user.upsert({
where: { email: 'member2@mail.com' },
update: {},
create: {
email: 'member2@mail.com',
name: 'Team Member2',
role: 'USER',
password,
emailConfirmedAt: new Date()
}
});
const user3 = await tx.user.upsert({
where: { email: 'user3@mail.com' },
update: {},
create: {
email: 'user3@mail.com',
name: 'User3',
role: 'USER',
password,
emailConfirmedAt: new Date()
}
});
const teamMember3 = await tx.user.upsert({
where: { email: 'member3@mail.com' },
update: {},
create: {
email: 'member3@mail.com',
name: 'Team Member3',
role: 'USER',
password,
emailConfirmedAt: new Date()
}
});
// endregion
const hunt = await tx.hunt.create({
@@ -116,6 +161,19 @@ async function main() {
question: 'In welchem Gebäude und Stockwerk wart ihr?',
textType: 'TEXT',
order: 2
},
{
title: 'Einfach mal abhauen',
description:
'Fahrt so weit ihr wollt und macht ein Foto vom Haltestellenschild!',
question: 'An welcher Haltestelle wart ihr?',
order: 3,
pictureRequired: true,
textRequired: true,
textType: 'TEXT',
points: 3,
extraPoints: 30,
extraText: 'Je weiter weg'
}
]
},
@@ -141,6 +199,32 @@ async function main() {
}
]
}
},
{
ownerId: user2.id,
name: 'Team 2',
description: 'Das schlechteste Informatik Team!',
password: 'top secret',
members: {
create: [
{
memberId: teamMember2.id
}
]
}
},
{
ownerId: user3.id,
name: 'Team 3',
description: 'Das Informatik Team!',
password: 'top secret',
members: {
create: [
{
memberId: teamMember3.id
}
]
}
}
]
}
@@ -148,11 +232,16 @@ async function main() {
});
const team = hunt.teams[0];
const team2 = hunt.teams[1];
const team3 = hunt.teams[2];
const images = [
'/img/dummy/moin1.jpeg',
'/img/dummy/musikanten1.jpg',
'/img/dummy/aussicht1.jpeg'
'/img/dummy/aussicht1.jpeg',
'https://pichunt.s3.swarm.syma.dev/0197ff6a-ce49-7000-a5b0-f32f1ee1b4ee',
'https://pichunt.s3.swarm.syma.dev/0197ff1a-3c8e-7000-8ba6-fa9c06548f82',
'https://pichunt.s3.swarm.syma.dev/0197ff5b-f74d-7000-864c-20f531481fcc'
];
const answers = await tx.questAnswer.createManyAndReturn({
data: [
@@ -166,7 +255,8 @@ async function main() {
lon: 8.809734,
reviewerId: admin.id,
score: 10,
review: 'Schönes Bild!'
review: 'Schönes Bild!',
internalNote: 'Wow!'
},
{
teamId: team.id,
@@ -183,7 +273,41 @@ async function main() {
text: 'Neustadtswall AB-Gebäude Etage 10',
score: 17,
reviewerId: huntMember.id,
review: 'Höchstes Team, aber leider gabs andere im AB!'
review: 'Höchstes Team, aber leider gabs andere im AB!',
rankingValue: 10
},
{
teamId: team.id,
memberId: teamMember.id,
questId: hunt.quests[3].id,
text: 'Theater am Leibnizplatz',
score: 13,
reviewerId: admin.id,
review: 'Ihr wart 612m weit weg!',
rankingValue: 612,
internalNote: '612m'
},
{
teamId: team2.id,
memberId: teamMember2.id,
questId: hunt.quests[3].id,
text: 'Bürgerpark',
score: 21,
reviewerId: admin.id,
review: 'Ihr wart 2110m weit weg!',
rankingValue: 2110,
internalNote: 'Bisher am weitesten'
},
{
teamId: team3.id,
memberId: teamMember3.id,
questId: hunt.quests[3].id,
text: 'Am Brill',
score: 18,
reviewerId: huntMember.id,
review: 'Ihr wart 945m weit weg!',
rankingValue: 945,
showcase: true
}
]
});