add new chat logic and message service

This commit is contained in:
JCEEE
2026-08-05 11:20:27 +01:00
parent 3378e1dce7
commit fed2f32258
11 changed files with 1013 additions and 14 deletions
+73
View File
@@ -1383,5 +1383,78 @@ export async function migrate(): Promise<void> {
);
}
// ── 9. Create chat collections (messages + chat_typing) ──
const famsColChat = await getCollection("fams");
if (famsColChat) {
// 9a. messages
const msgsCol = await getCollection("messages");
if (!msgsCol) {
console.log("[migrate] Creating messages collection...");
await createCollection({
name: "messages",
type: "base",
listRule: "",
viewRule: "",
createRule: null,
updateRule: null,
deleteRule: null,
fields: [
{
name: "famId",
type: "relation",
required: true,
collectionId: famsColChat.id,
maxSelect: 1,
cascadeDelete: true,
},
{ name: "authorType", type: "select", required: true, values: ["admin", "member"], maxSelect: 1 },
{ name: "authorId", type: "text", required: true },
{ name: "authorName", type: "text", required: true },
{ name: "authorColor", type: "text", required: false },
{ name: "content", type: "text", required: true },
{ name: "createdAt", type: "date", required: false },
],
});
} else {
console.log(` ↳ messages already exists`);
await updateCollection("messages", { listRule: "", viewRule: "" });
}
// 9b. chat_typing (transient presence rows, one per actor)
const typingCol = await getCollection("chat_typing");
if (!typingCol) {
console.log("[migrate] Creating chat_typing collection...");
await createCollection({
name: "chat_typing",
type: "base",
listRule: "",
viewRule: "",
createRule: null,
updateRule: null,
deleteRule: null,
fields: [
{
name: "famId",
type: "relation",
required: true,
collectionId: famsColChat.id,
maxSelect: 1,
cascadeDelete: true,
},
{ name: "actorId", type: "text", required: true },
{ name: "actorType", type: "select", required: true, values: ["admin", "member"], maxSelect: 1 },
{ name: "authorName", type: "text", required: true },
{ name: "authorColor", type: "text", required: false },
{ name: "typing", type: "bool", required: false },
],
});
} else {
console.log(` ↳ chat_typing already exists`);
await updateCollection("chat_typing", { listRule: "", viewRule: "" });
}
} else {
console.log(` ↳ fams collection not found — chat collections deferred`);
}
console.log("[migrate] Done");
}