63 lines · 1.9 KB · TypeScript
RawDownload
import { column, idColumn, schema, table } from "../../src/schema"; const users = table("users", {  id: idColumn("id", "varchar(255)").defaultTo$("auto"),  name: column("name", "string"),}); const posts = table("posts", {  id: idColumn("id", "varchar(255)").defaultTo$("auto"),  authorId: column("author_id", "varchar(255)"),  content: column("content", "string").defaultTo("default content."),  relyTo: column("rely_to", "varchar(255)").nullable(),  attachmentUrl: column("attachment_url", "varchar(255)").nullable().unique(),}); const attachments = table("attachments", {  id: idColumn("id", "varchar(255)").defaultTo$("auto"),  url: column("url", "varchar(255)").unique(),  data: column("data", "binary").nullable(),}); const likes = table("likes", {  id: idColumn("id", "varchar(255)").defaultTo$("auto"),  userId: column("user_id", "varchar(255)"),  postId: column("post_id", "varchar(255)"),}).unique("user_post_uk", ["userId", "postId"]); export const v1 = schema({  version: "1.0.0",  tables: {    users,    posts,    attachments,    likes,  },  relations: {    users: ({ many }) => ({      posts: many("posts"),      likes: many("likes"),    }),    posts: ({ one, many }) => ({      author: one("users", ["authorId", "id"]).foreignKey({        // if you set it on primary keys, id columns cannot be updated, it should be always `RESTRICT`.        onUpdate: "RESTRICT",        onDelete: "CASCADE",      }),      relies: many("posts"),      relying: one("posts", ["relyTo", "id"]).foreignKey(),      attachment: one("attachments"),      likes: many("likes"),    }),    likes: ({ one }) => ({      user: one("users", ["userId", "id"]).foreignKey(),      post: one("posts", ["postId", "id"]).foreignKey(),    }),    attachments: ({ one }) => ({      post: one("posts", ["url", "attachmentUrl"]).foreignKey({        onUpdate: "CASCADE",        onDelete: "CASCADE",      }),    }),  },});