77 lines
1.7 KiB
TypeScript
77 lines
1.7 KiB
TypeScript
import { relations } from 'drizzle-orm';
|
|
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
|
import type { AnySQLiteColumn } from 'drizzle-orm/sqlite-core';
|
|
|
|
// MODEL
|
|
export const modelTable = sqliteTable(
|
|
'model',
|
|
{
|
|
id: integer().primaryKey(),
|
|
name: text().notNull(),
|
|
defaultImageId: integer().references(() => modelImageTable.id),
|
|
},
|
|
);
|
|
|
|
export const modelRelations = relations(modelTable, ({ one, many }) => ({
|
|
images: many(modelImageTable),
|
|
defaultImage: one(modelImageTable, {
|
|
fields: [modelTable.defaultImageId],
|
|
references: [modelImageTable.id],
|
|
}),
|
|
}));
|
|
|
|
// MODEL IMAGE
|
|
export const modelImageTable = sqliteTable(
|
|
'model_image',
|
|
{
|
|
id: integer().primaryKey(),
|
|
url: text().notNull(),
|
|
caption: text(),
|
|
modelId: integer()
|
|
.notNull()
|
|
.references((): AnySQLiteColumn => modelTable.id),
|
|
},
|
|
);
|
|
|
|
export const modelImageRelations = relations(modelImageTable, ({ one }) => ({
|
|
model: one(modelTable, {
|
|
fields: [modelImageTable.modelId],
|
|
references: [modelTable.id],
|
|
}),
|
|
}));
|
|
|
|
// 3 tables case
|
|
export const modelTable1 = sqliteTable(
|
|
'model1',
|
|
{
|
|
id: integer().primaryKey(),
|
|
name: text().notNull(),
|
|
userId: integer()
|
|
.references(() => user.id),
|
|
defaultImageId: integer().references(() => modelImageTable1.id),
|
|
},
|
|
);
|
|
|
|
export const modelImageTable1 = sqliteTable(
|
|
'model_image1',
|
|
{
|
|
id: integer().primaryKey(),
|
|
url: text().notNull(),
|
|
caption: text(),
|
|
modelId: integer().notNull()
|
|
.references((): AnySQLiteColumn => modelTable1.id),
|
|
},
|
|
);
|
|
|
|
export const user = sqliteTable(
|
|
'user',
|
|
{
|
|
id: integer().primaryKey(),
|
|
name: text(),
|
|
invitedBy: integer().references((): AnySQLiteColumn => user.id),
|
|
imageId: integer()
|
|
.notNull()
|
|
.references((): AnySQLiteColumn => modelImageTable1.id),
|
|
},
|
|
);
|