Add announcement editing and reliable per-recipient mail delivery

This commit is contained in:
t.indorf
2026-10-13 08:53:22 +02:00
parent 661776e609
commit 1472779781
22 changed files with 1655 additions and 190 deletions
+33
View File
@@ -155,6 +155,7 @@ model Kita {
dutyAssignments DutyAssignment[]
absences Absence[]
announcements Announcement[]
announcementEmails AnnouncementEmail[]
invitations Invitation[]
termine Termin[]
mitbringselItems MitbringselItem[]
@@ -280,6 +281,7 @@ model User {
alarmNotifications NotdienstAlarmNotification[]
alarmEmails NotdienstAlarmEmail[]
notdienstEmails NotdienstEmail[]
announcementEmails AnnouncementEmail[]
@@index([kitaId])
@@index([familyId])
@@ -697,6 +699,10 @@ model Announcement {
title String
content String
audience AnnouncementAudience @default(ALLE)
revision Int @default(1)
editedAt DateTime?
updatedAt DateTime @default(now())
emailReady Boolean @default(true)
authorId String
author User @relation("AnnouncementAuthor", fields: [authorId], references: [id], onDelete: Cascade)
@@ -705,13 +711,40 @@ model Announcement {
attachments Attachment[]
reads AnnouncementRead[]
emails AnnouncementEmail[]
@@index([kitaId, createdAt])
@@index([kitaId, updatedAt])
@@index([authorId])
@@unique([id, kitaId])
@@map("announcements")
}
model AnnouncementEmail {
id String @id @default(cuid())
kitaId String
kita Kita @relation(fields: [kitaId], references: [id], onDelete: Cascade)
announcementId String
announcement Announcement @relation(fields: [announcementId], references: [id], onDelete: Cascade)
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
revision Int
createdAt DateTime @default(now())
nextAttemptAt DateTime @default(now())
attempts Int @default(0)
leaseUntil DateTime?
claimToken String?
sentAt DateTime?
skippedAt DateTime?
failed Boolean @default(false)
lastError String?
@@unique([announcementId, revision, userId])
@@index([kitaId, announcementId, revision])
@@index([sentAt, skippedAt, nextAttemptAt])
@@map("announcement_emails")
}
model Attachment {
id String @id @default(cuid())
announcementId String