feat: admin-editable success + waiting list messages for MC and Open Day

This commit is contained in:
2026-03-24 23:52:07 +03:00
parent 0c39bdba5e
commit 259b31a722
7 changed files with 65 additions and 4 deletions

View File

@@ -275,6 +275,19 @@ const migrations: Migration[] = [
}
},
},
{
version: 16,
name: "add_messages_to_open_day_events",
up: (db) => {
const cols = db.prepare("PRAGMA table_info(open_day_events)").all() as { name: string }[];
if (!cols.some((c) => c.name === "success_message")) {
db.exec("ALTER TABLE open_day_events ADD COLUMN success_message TEXT");
}
if (!cols.some((c) => c.name === "waiting_list_text")) {
db.exec("ALTER TABLE open_day_events ADD COLUMN waiting_list_text TEXT");
}
},
},
];
function runMigrations(db: Database.Database) {
@@ -969,6 +982,8 @@ interface OpenDayEventRow {
discount_threshold: number;
min_bookings: number;
max_participants: number;
success_message: string | null;
waiting_list_text: string | null;
active: number;
created_at: string;
updated_at: string;
@@ -984,6 +999,8 @@ export interface OpenDayEvent {
discountThreshold: number;
minBookings: number;
maxParticipants: number;
successMessage?: string;
waitingListText?: string;
active: boolean;
}
@@ -1064,6 +1081,8 @@ function mapEventRow(r: OpenDayEventRow): OpenDayEvent {
discountThreshold: r.discount_threshold,
minBookings: r.min_bookings,
maxParticipants: r.max_participants ?? 0,
successMessage: r.success_message ?? undefined,
waitingListText: r.waiting_list_text ?? undefined,
active: !!r.active,
};
}
@@ -1174,6 +1193,8 @@ export function updateOpenDayEvent(
discountThreshold: number;
minBookings: number;
maxParticipants: number;
successMessage: string;
waitingListText: string;
active: boolean;
}>
): void {
@@ -1188,6 +1209,8 @@ export function updateOpenDayEvent(
if (data.discountThreshold !== undefined) { sets.push("discount_threshold = ?"); vals.push(data.discountThreshold); }
if (data.minBookings !== undefined) { sets.push("min_bookings = ?"); vals.push(data.minBookings); }
if (data.maxParticipants !== undefined) { sets.push("max_participants = ?"); vals.push(data.maxParticipants); }
if (data.successMessage !== undefined) { sets.push("success_message = ?"); vals.push(data.successMessage || null); }
if (data.waitingListText !== undefined) { sets.push("waiting_list_text = ?"); vals.push(data.waitingListText || null); }
if (data.active !== undefined) { sets.push("active = ?"); vals.push(data.active ? 1 : 0); }
if (sets.length === 0) return;
sets.push("updated_at = datetime('now')");