diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-10-04 13:40:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-04 13:40:24 +0100 |
| commit | 4a580d713621f99abb8baabc9b847ce039d44842 (patch) | |
| tree | a2aa6f3ae8045ad50a9316624e2a7028dd098c6b /packages/db/schema.ts | |
| parent | 5e331a7d5b8d9666812170547574804d8b6da741 (diff) | |
| download | karakeep-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.ts | 70 |
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], + }), + }), +); |
