remove old messaging system

This commit is contained in:
JCEEE
2026-08-05 09:17:18 +01:00
parent d162ea762e
commit 3378e1dce7
5 changed files with 98 additions and 332 deletions
+89 -113
View File
@@ -302,7 +302,9 @@ export async function migrate(): Promise<void> {
missing.push({ name: "settleDate", type: "text", required: false });
}
if (missing.length) {
console.log("[migrate] Adding rewards.claimable/settleDate (payday gating)...");
console.log(
"[migrate] Adding rewards.claimable/settleDate (payday gating)...",
);
rewardsCol2.fields.push(...missing);
await updateCollection(rewardsCol2.id, {
name: "rewards",
@@ -370,47 +372,6 @@ export async function migrate(): Promise<void> {
}
}
// ── 4. Create notifications collection if missing ──
const notifCol = await getCollection("notifications");
if (!notifCol) {
const famsCol = await getCollection("fams");
if (!famsCol) throw new Error("fams collection not found");
const membersCol = await getCollection("members");
if (!membersCol) throw new Error("members collection not found");
console.log("[migrate] Creating notifications collection...");
await createCollection({
name: "notifications",
type: "base",
listRule: "",
viewRule: "",
createRule: null,
updateRule: null,
deleteRule: null,
fields: [
{
name: "famId",
type: "relation",
required: true,
collectionId: famsCol.id,
maxSelect: 1,
cascadeDelete: false,
},
{
name: "memberId",
type: "relation",
required: true,
collectionId: membersCol.id,
maxSelect: 1,
cascadeDelete: false,
},
{ name: "message", type: "text", required: true },
{ name: "read", type: "bool", required: false },
],
});
} else {
console.log(` ↳ notifications already exists`);
}
// ── 5. Add payday field to fams if missing ──
const famsCol = await getCollection("fams");
if (famsCol) {
@@ -547,10 +508,15 @@ export async function migrate(): Promise<void> {
});
}
if (fams.length) {
console.log(` ✓ Backfilled timezone="auto" for ${fams.length} fam${fams.length > 1 ? "s" : ""}`);
console.log(
` ✓ Backfilled timezone="auto" for ${fams.length} fam${fams.length > 1 ? "s" : ""}`,
);
}
} catch (err) {
console.log(" ↳ timezone backfill skipped:", err instanceof Error ? err.message : err);
console.log(
" ↳ timezone backfill skipped:",
err instanceof Error ? err.message : err,
);
}
// ── 6. Backfill completions.date — strip timestamps to YYYY-MM-DD ──
@@ -1334,78 +1300,88 @@ export async function migrate(): Promise<void> {
}
}
// ── 7. Add todo fields to assigned_chores if missing ──
const assignedCol = await getCollection("assigned_chores");
if (assignedCol) {
let needsUpdate = false;
// ── 7. Add todo fields to assigned_chores if missing ──
const assignedCol = await getCollection("assigned_chores");
if (assignedCol) {
let needsUpdate = false;
// 7a. Make templateId non-required (todos don't use templates)
const tplField = assignedCol.fields.find((f: any) => f.name === "templateId");
if (tplField && tplField.required) {
console.log("[migrate] Making assigned_chores.templateId non-required...");
tplField.required = false;
needsUpdate = true;
}
// 7a. Make templateId non-required (todos don't use templates)
const tplField = assignedCol.fields.find(
(f: any) => f.name === "templateId",
);
if (tplField && tplField.required) {
console.log(
"[migrate] Making assigned_chores.templateId non-required...",
);
tplField.required = false;
needsUpdate = true;
}
// 7b. Add isTodo, startDate, completeBy fields
const hasIsTodo = assignedCol.fields.some((f: any) => f.name === "isTodo");
if (!hasIsTodo) {
console.log("[migrate] Adding todo fields to assigned_chores...");
assignedCol.fields.push(
{ name: "isTodo", type: "bool" },
{ name: "startDate", type: "text" },
{ name: "completeBy", type: "text" }
);
needsUpdate = true;
} else {
console.log(` ↳ assigned_chores.isTodo already exists`);
}
// 7b. Add isTodo, startDate, completeBy fields
const hasIsTodo = assignedCol.fields.some((f: any) => f.name === "isTodo");
if (!hasIsTodo) {
console.log("[migrate] Adding todo fields to assigned_chores...");
assignedCol.fields.push(
{ name: "isTodo", type: "bool" },
{ name: "startDate", type: "text" },
{ name: "completeBy", type: "text" },
);
needsUpdate = true;
} else {
console.log(` ↳ assigned_chores.isTodo already exists`);
}
if (needsUpdate) {
await updateCollection(assignedCol.id, {
name: "assigned_chores",
type: "base",
listRule: assignedCol.listRule,
viewRule: assignedCol.viewRule,
createRule: assignedCol.createRule,
updateRule: assignedCol.updateRule,
deleteRule: assignedCol.deleteRule,
fields: assignedCol.fields,
});
}
} else {
console.log(` ↳ assigned_chores collection not found (will be created by seed)`);
}
if (needsUpdate) {
await updateCollection(assignedCol.id, {
name: "assigned_chores",
type: "base",
listRule: assignedCol.listRule,
viewRule: assignedCol.viewRule,
createRule: assignedCol.createRule,
updateRule: assignedCol.updateRule,
deleteRule: assignedCol.deleteRule,
fields: assignedCol.fields,
});
}
} else {
console.log(
` ↳ assigned_chores collection not found (will be created by seed)`,
);
}
// ── 8. Add completedAt timestamp to completions ──
const complCol = await getCollection("completions");
if (complCol) {
const hasCompletedAt = complCol.fields.some((f: any) => f.name === "completedAt");
if (!hasCompletedAt) {
console.log("[migrate] Adding completions.completedAt...");
complCol.fields.push({
name: "completedAt",
type: "date",
required: false,
hidden: false,
});
await updateCollection(complCol.id, {
name: "completions",
type: "base",
listRule: complCol.listRule,
viewRule: complCol.viewRule,
createRule: complCol.createRule,
updateRule: complCol.updateRule,
deleteRule: complCol.deleteRule,
fields: complCol.fields,
});
console.log(" ✓ completions.completedAt added");
} else {
console.log(` completions.completedAt already exists`);
}
} else {
console.log(` ↳ completions collection not found (will be created by seed)`);
}
// ── 8. Add completedAt timestamp to completions ──
const complCol = await getCollection("completions");
if (complCol) {
const hasCompletedAt = complCol.fields.some(
(f: any) => f.name === "completedAt",
);
if (!hasCompletedAt) {
console.log("[migrate] Adding completions.completedAt...");
complCol.fields.push({
name: "completedAt",
type: "date",
required: false,
hidden: false,
});
await updateCollection(complCol.id, {
name: "completions",
type: "base",
listRule: complCol.listRule,
viewRule: complCol.viewRule,
createRule: complCol.createRule,
updateRule: complCol.updateRule,
deleteRule: complCol.deleteRule,
fields: complCol.fields,
});
console.log(" completions.completedAt added");
} else {
console.log(` ↳ completions.completedAt already exists`);
}
} else {
console.log(
` ↳ completions collection not found (will be created by seed)`,
);
}
console.log("[migrate] Done");
console.log("[migrate] Done");
}