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", }), }), },});
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",
}),
}),
},
});