aboutsummaryrefslogtreecommitdiffstats
path: root/packages/db/schema.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-10-04 13:40:24 +0100
committerGitHub <noreply@github.com>2025-10-04 13:40:24 +0100
commit4a580d713621f99abb8baabc9b847ce039d44842 (patch)
treea2aa6f3ae8045ad50a9316624e2a7028dd098c6b /packages/db/schema.ts
parent5e331a7d5b8d9666812170547574804d8b6da741 (diff)
downloadkarakeep-4a580d713621f99abb8baabc9b847ce039d44842.tar.zst
feat: Revamp import experience (#2001)
* WIP: import v2 * remove new session button * don't redirect after import * store and lint to root list * models + tests * redesign the progress * simplify the import session for ow * drop status from session schema * split the import session page * i18n * fix test * remove pagination * fix some colors in darkmode * one last fix * add privacy filter * privacy check * fix interactivity of import progress * fix test
Diffstat (limited to 'packages/db/schema.ts')
-rw-r--r--packages/db/schema.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/packages/db/schema.ts b/packages/db/schema.ts
index d94d3963..c112b075 100644
--- a/packages/db/schema.ts
+++ b/packages/db/schema.ts
@@ -628,6 +628,49 @@ export const subscriptions = sqliteTable(
],
);
+export const importSessions = sqliteTable(
+ "importSessions",
+ {
+ id: text("id")
+ .notNull()
+ .primaryKey()
+ .$defaultFn(() => createId()),
+ name: text("name").notNull(),
+ userId: text("userId")
+ .notNull()
+ .references(() => users.id, { onDelete: "cascade" }),
+ message: text("message"),
+ rootListId: text("rootListId").references(() => bookmarkLists.id, {
+ onDelete: "set null",
+ }),
+ createdAt: createdAtField(),
+ modifiedAt: modifiedAtField(),
+ },
+ (is) => [index("importSessions_userId_idx").on(is.userId)],
+);
+
+export const importSessionBookmarks = sqliteTable(
+ "importSessionBookmarks",
+ {
+ id: text("id")
+ .notNull()
+ .primaryKey()
+ .$defaultFn(() => createId()),
+ importSessionId: text("importSessionId")
+ .notNull()
+ .references(() => importSessions.id, { onDelete: "cascade" }),
+ bookmarkId: text("bookmarkId")
+ .notNull()
+ .references(() => bookmarks.id, { onDelete: "cascade" }),
+ createdAt: createdAtField(),
+ },
+ (isb) => [
+ index("importSessionBookmarks_sessionId_idx").on(isb.importSessionId),
+ index("importSessionBookmarks_bookmarkId_idx").on(isb.bookmarkId),
+ unique().on(isb.importSessionId, isb.bookmarkId),
+ ],
+);
+
// Relations
export const userRelations = relations(users, ({ many, one }) => ({
@@ -637,6 +680,7 @@ export const userRelations = relations(users, ({ many, one }) => ({
rules: many(ruleEngineRulesTable),
invites: many(invites),
subscription: one(subscriptions),
+ importSessions: many(importSessions),
}));
export const bookmarkRelations = relations(bookmarks, ({ many, one }) => ({
@@ -660,6 +704,7 @@ export const bookmarkRelations = relations(bookmarks, ({ many, one }) => ({
bookmarksInLists: many(bookmarksInLists),
assets: many(assets),
rssFeeds: many(rssFeedImportsTable),
+ importSessionBookmarks: many(importSessionBookmarks),
}));
export const assetRelations = relations(assets, ({ one }) => ({
@@ -795,3 +840,28 @@ export const passwordResetTokensRelations = relations(
}),
}),
);
+
+export const importSessionsRelations = relations(
+ importSessions,
+ ({ one, many }) => ({
+ user: one(users, {
+ fields: [importSessions.userId],
+ references: [users.id],
+ }),
+ bookmarks: many(importSessionBookmarks),
+ }),
+);
+
+export const importSessionBookmarksRelations = relations(
+ importSessionBookmarks,
+ ({ one }) => ({
+ importSession: one(importSessions, {
+ fields: [importSessionBookmarks.importSessionId],
+ references: [importSessions.id],
+ }),
+ bookmark: one(bookmarks, {
+ fields: [importSessionBookmarks.bookmarkId],
+ references: [bookmarks.id],
+ }),
+ }),
+);