add new chat logic and message service
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user