Remember uploaded images

This commit is contained in:
2025-08-04 19:34:50 +02:00
parent 464791d9f5
commit 8aa8be7e9f
21 changed files with 573 additions and 241 deletions
+66 -21
View File
@@ -115,9 +115,9 @@ export default defineEventHandler(async (event) => {
// TODO: prevent updating reviewed answers
// TODO: respect end of hunt
// TODO: keep old images
let picture: string | undefined = undefined;
let picture: { creatorId: number; url: string; uuid: string } | undefined =
undefined;
if (data.image) {
const uuid = randomUUID();
@@ -131,30 +131,75 @@ export default defineEventHandler(async (event) => {
'Content-Type': data.image.type
}
);
picture = `https://${s3Bucket}.${s3Host}/${uuid}`;
picture = {
creatorId: userId,
url: `https://${s3Bucket}.${s3Host}/${uuid}`,
uuid
};
}
if (prevAnswer.id) {
await prisma.questAnswer.update({
where: {
id: prevAnswer.id
},
data: {
memberId: userId,
text: data.answer,
picture
if (picture) {
await prisma.$transaction(async (tx) => {
if (prevAnswer.id) {
const file = await tx.file.create({
data: {
...picture,
answerId: prevAnswer.id
},
select: { id: true }
});
await tx.questAnswer.update({
where: {
id: prevAnswer.id
},
data: {
memberId: userId,
text: data.answer,
pictureId: file.id
}
});
} else {
const answer = await tx.questAnswer.create({
data: {
teamId: team.id,
memberId: userId,
questId: quest.id,
text: data.answer
},
select: { id: true }
});
await tx.file.create({
data: {
...picture,
answerId: answer.id,
answers: {
connect: answer
}
}
});
}
});
} else {
await prisma.questAnswer.create({
data: {
teamId: team.id,
memberId: userId,
questId: quest.id,
text: data.answer,
picture
}
});
if (prevAnswer.id) {
await prisma.questAnswer.update({
where: {
id: prevAnswer.id
},
data: {
memberId: userId,
text: data.answer
}
});
} else {
await prisma.questAnswer.create({
data: {
teamId: team.id,
memberId: userId,
questId: quest.id,
text: data.answer
}
});
}
}
return { ok: true };