@jant/core 0.3.26 → 0.3.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/client.css +1 -0
- package/dist/client/client.js +31561 -0
- package/dist/index.js +15209 -15
- package/package.json +21 -15
- package/src/__tests__/helpers/app.ts +19 -3
- package/src/__tests__/helpers/db.ts +44 -0
- package/src/__tests__/helpers/lingui-core-macro-mock.ts +33 -0
- package/src/app.tsx +112 -173
- package/src/auth.ts +4 -1
- package/src/client.ts +13 -0
- package/src/db/migrations/0007_post_collections_m2m.sql +94 -0
- package/src/db/migrations/0008_add_collection_dividers.sql +8 -0
- package/src/db/migrations/0009_drop_collection_show_divider.sql +2 -0
- package/src/db/migrations/0010_add_performance_indexes.sql +16 -0
- package/src/db/schema.ts +24 -4
- package/src/i18n/locales/en.po +810 -385
- package/src/i18n/locales/en.ts +1 -1
- package/src/i18n/locales/zh-Hans.po +733 -522
- package/src/i18n/locales/zh-Hans.ts +1 -1
- package/src/i18n/locales/zh-Hant.po +733 -522
- package/src/i18n/locales/zh-Hant.ts +1 -1
- package/src/i18n/middleware.ts +7 -11
- package/src/index.ts +1 -1
- package/src/lib/__tests__/icons.test.ts +178 -0
- package/src/lib/__tests__/resolve-config.test.ts +184 -0
- package/src/lib/__tests__/schemas.test.ts +12 -6
- package/src/lib/__tests__/theme.test.ts +62 -0
- package/src/lib/__tests__/timezones.test.ts +1 -1
- package/src/lib/__tests__/url.test.ts +12 -0
- package/src/lib/__tests__/view.test.ts +1 -5
- package/src/lib/avatar-upload.ts +18 -10
- package/src/lib/collection-form-bridge.ts +52 -0
- package/src/lib/collections-reorder.ts +28 -0
- package/src/lib/compose-bridge.ts +251 -0
- package/src/lib/errors.ts +116 -0
- package/src/lib/excerpt.ts +1 -1
- package/src/lib/favicon.ts +3 -5
- package/src/lib/html.ts +22 -0
- package/src/lib/icon-catalog.ts +181 -0
- package/src/lib/icons.ts +202 -0
- package/src/lib/navigation.ts +18 -33
- package/src/lib/pagination.ts +3 -2
- package/src/lib/post-form-bridge.ts +136 -0
- package/src/lib/render.tsx +11 -4
- package/src/lib/resolve-config.ts +157 -0
- package/src/lib/schemas.ts +76 -12
- package/src/lib/settings-bridge.ts +139 -0
- package/src/lib/storage.ts +37 -16
- package/src/lib/theme.ts +5 -7
- package/src/lib/timeline.ts +4 -8
- package/src/lib/toast.ts +134 -0
- package/src/lib/upload.ts +71 -0
- package/src/lib/url.ts +9 -1
- package/src/lib/version.ts +16 -0
- package/src/lib/view.ts +9 -10
- package/src/middleware/__tests__/auth.test.ts +6 -28
- package/src/middleware/__tests__/onboarding.test.ts +1 -1
- package/src/middleware/auth.ts +6 -12
- package/src/middleware/config.ts +51 -0
- package/src/middleware/error-handler.ts +56 -0
- package/src/middleware/onboarding.ts +1 -1
- package/src/preset.css +6 -0
- package/src/routes/__tests__/compose.test.ts +104 -17
- package/src/routes/api/__tests__/collections.test.ts +93 -2
- package/src/routes/api/__tests__/posts.test.ts +2 -1
- package/src/routes/api/__tests__/settings.test.ts +1 -1
- package/src/routes/api/collections.ts +64 -68
- package/src/routes/api/nav-items.ts +21 -59
- package/src/routes/api/pages.ts +18 -46
- package/src/routes/api/posts.ts +64 -86
- package/src/routes/api/search.ts +6 -4
- package/src/routes/api/settings.ts +8 -24
- package/src/routes/api/upload.ts +55 -53
- package/src/routes/auth/__tests__/setup.test.ts +118 -0
- package/src/routes/auth/reset.tsx +17 -66
- package/src/routes/auth/setup.tsx +67 -11
- package/src/routes/auth/signin.tsx +44 -8
- package/src/routes/compose.tsx +194 -0
- package/src/routes/dash/__tests__/font-theme.test.ts +110 -0
- package/src/routes/dash/__tests__/pages.test.ts +2 -2
- package/src/routes/dash/__tests__/settings-avatar.test.ts +23 -12
- package/src/routes/dash/appearance.tsx +173 -0
- package/src/routes/dash/collections.tsx +80 -14
- package/src/routes/dash/index.tsx +12 -14
- package/src/routes/dash/media.tsx +46 -49
- package/src/routes/dash/pages.tsx +85 -37
- package/src/routes/dash/posts.tsx +60 -23
- package/src/routes/dash/redirects.tsx +43 -33
- package/src/routes/dash/settings.tsx +234 -214
- package/src/routes/feed/__tests__/rss.test.ts +7 -3
- package/src/routes/feed/rss.ts +11 -16
- package/src/routes/feed/sitemap.ts +15 -9
- package/src/routes/pages/__tests__/collections.test.ts +9 -8
- package/src/routes/pages/archive.tsx +2 -2
- package/src/routes/pages/collection.tsx +76 -9
- package/src/routes/pages/collections.tsx +3 -1
- package/src/routes/pages/featured.tsx +2 -2
- package/src/routes/pages/home.tsx +3 -3
- package/src/routes/pages/latest.tsx +2 -2
- package/src/routes/pages/page.tsx +2 -2
- package/src/routes/pages/post.tsx +2 -2
- package/src/routes/pages/search.tsx +2 -2
- package/src/services/__tests__/collection.test.ts +324 -34
- package/src/services/__tests__/media.test.ts +1 -1
- package/src/services/__tests__/page.test.ts +116 -1
- package/src/services/auth.ts +88 -0
- package/src/services/collection.ts +169 -30
- package/src/services/index.ts +8 -3
- package/src/services/media.ts +39 -12
- package/src/services/navigation.ts +17 -5
- package/src/services/page.ts +24 -4
- package/src/services/post.ts +87 -19
- package/src/services/search.ts +0 -1
- package/src/services/settings.ts +21 -13
- package/src/style.css +3 -0
- package/src/styles/components.css +42 -1
- package/src/styles/tokens.css +4 -0
- package/src/styles/ui.css +902 -73
- package/src/types/app-context.ts +25 -0
- package/src/types/bindings.ts +1 -0
- package/src/types/config.ts +60 -23
- package/src/types/entities.ts +12 -2
- package/src/types/lingui-react-macro.d.ts +3 -3
- package/src/types/operations.ts +2 -4
- package/src/types/views.ts +1 -3
- package/src/ui/__tests__/font-themes.test.ts +27 -8
- package/src/ui/color-themes.ts +1 -1
- package/src/ui/components/__tests__/jant-collection-form.test.ts +153 -0
- package/src/ui/components/__tests__/jant-compose-dialog.test.ts +512 -0
- package/src/ui/components/__tests__/jant-compose-editor.test.ts +272 -0
- package/src/ui/components/__tests__/jant-post-form.test.ts +172 -0
- package/src/ui/components/__tests__/jant-settings-avatar.test.ts +235 -0
- package/src/ui/components/__tests__/jant-settings-general.test.ts +319 -0
- package/src/ui/components/collection-types.ts +45 -0
- package/src/ui/components/compose-types.ts +75 -0
- package/src/ui/components/jant-collection-form.ts +512 -0
- package/src/ui/components/jant-compose-dialog.ts +494 -0
- package/src/ui/components/jant-compose-editor.ts +799 -0
- package/src/ui/components/jant-post-form.ts +290 -0
- package/src/ui/components/jant-settings-avatar.ts +231 -0
- package/src/ui/components/jant-settings-general.ts +436 -0
- package/src/ui/components/post-form-template.ts +260 -0
- package/src/ui/components/post-form-types.ts +87 -0
- package/src/ui/components/settings-types.ts +62 -0
- package/src/ui/compose/ComposeDialog.tsx +141 -385
- package/src/ui/compose/ComposePrompt.tsx +3 -3
- package/src/ui/dash/PostList.tsx +55 -61
- package/src/ui/dash/appearance/AdvancedContent.tsx +80 -0
- package/src/ui/dash/appearance/AppearanceNav.tsx +56 -0
- package/src/ui/dash/appearance/ColorThemeContent.tsx +129 -0
- package/src/ui/dash/appearance/FontThemeContent.tsx +98 -0
- package/src/ui/dash/collections/CollectionForm.tsx +130 -117
- package/src/ui/dash/collections/CollectionsListContent.tsx +102 -41
- package/src/ui/dash/collections/IconPickerGrid.tsx +50 -0
- package/src/ui/dash/collections/ViewCollectionContent.tsx +14 -3
- package/src/ui/dash/index.ts +1 -1
- package/src/ui/dash/posts/PostForm.tsx +248 -0
- package/src/ui/dash/settings/AccountContent.tsx +69 -80
- package/src/ui/dash/settings/GeneralContent.tsx +159 -478
- package/src/ui/dash/settings/SettingsNav.tsx +4 -4
- package/src/ui/font-themes.ts +115 -32
- package/src/ui/layouts/BaseLayout.tsx +49 -19
- package/src/ui/layouts/DashLayout.tsx +14 -9
- package/src/ui/layouts/SiteLayout.tsx +38 -23
- package/src/ui/pages/CollectionPage.tsx +12 -2
- package/src/ui/pages/CollectionsPage.tsx +27 -27
- package/src/ui/pages/HomePage.tsx +15 -6
- package/src/ui/pages/SearchPage.tsx +1 -2
- package/src/ui/shared/CollectionsSidebar.tsx +59 -0
- package/src/ui/shared/Pagination.tsx +2 -2
- package/dist/app.js +0 -265
- package/dist/auth.js +0 -36
- package/dist/client.js +0 -13
- package/dist/db/index.js +0 -10
- package/dist/db/schema.js +0 -224
- package/dist/i18n/Trans.js +0 -24
- package/dist/i18n/context.js +0 -58
- package/dist/i18n/detect.js +0 -26
- package/dist/i18n/i18n.js +0 -49
- package/dist/i18n/index.js +0 -44
- package/dist/i18n/locales/en.js +0 -1
- package/dist/i18n/locales/zh-Hans.js +0 -1
- package/dist/i18n/locales/zh-Hant.js +0 -1
- package/dist/i18n/locales.js +0 -13
- package/dist/i18n/middleware.js +0 -30
- package/dist/lib/avatar-upload.js +0 -134
- package/dist/lib/config.js +0 -143
- package/dist/lib/constants.js +0 -50
- package/dist/lib/excerpt.js +0 -76
- package/dist/lib/favicon.js +0 -102
- package/dist/lib/feed.js +0 -123
- package/dist/lib/image-processor.js +0 -187
- package/dist/lib/image.js +0 -97
- package/dist/lib/index.js +0 -7
- package/dist/lib/markdown.js +0 -83
- package/dist/lib/media-helpers.js +0 -49
- package/dist/lib/media-upload.js +0 -104
- package/dist/lib/nav-reorder.js +0 -27
- package/dist/lib/navigation.js +0 -79
- package/dist/lib/pagination.js +0 -44
- package/dist/lib/render.js +0 -53
- package/dist/lib/schemas.js +0 -174
- package/dist/lib/sqid.js +0 -72
- package/dist/lib/sse.js +0 -218
- package/dist/lib/storage.js +0 -164
- package/dist/lib/theme.js +0 -65
- package/dist/lib/time.js +0 -159
- package/dist/lib/timeline.js +0 -95
- package/dist/lib/timezones.js +0 -388
- package/dist/lib/url.js +0 -89
- package/dist/lib/view.js +0 -217
- package/dist/middleware/auth.js +0 -52
- package/dist/middleware/onboarding.js +0 -41
- package/dist/routes/api/collections.js +0 -124
- package/dist/routes/api/nav-items.js +0 -104
- package/dist/routes/api/pages.js +0 -91
- package/dist/routes/api/posts.js +0 -218
- package/dist/routes/api/search.js +0 -48
- package/dist/routes/api/settings.js +0 -68
- package/dist/routes/api/upload.js +0 -246
- package/dist/routes/auth/reset.js +0 -221
- package/dist/routes/auth/setup.js +0 -194
- package/dist/routes/auth/signin.js +0 -176
- package/dist/routes/compose.js +0 -48
- package/dist/routes/dash/collections.js +0 -115
- package/dist/routes/dash/index.js +0 -118
- package/dist/routes/dash/media.js +0 -106
- package/dist/routes/dash/pages.js +0 -294
- package/dist/routes/dash/posts.js +0 -244
- package/dist/routes/dash/redirects.js +0 -257
- package/dist/routes/dash/settings.js +0 -379
- package/dist/routes/feed/rss.js +0 -62
- package/dist/routes/feed/sitemap.js +0 -49
- package/dist/routes/pages/archive.js +0 -62
- package/dist/routes/pages/collection.js +0 -34
- package/dist/routes/pages/collections.js +0 -28
- package/dist/routes/pages/featured.js +0 -36
- package/dist/routes/pages/home.js +0 -64
- package/dist/routes/pages/latest.js +0 -45
- package/dist/routes/pages/page.js +0 -68
- package/dist/routes/pages/post.js +0 -44
- package/dist/routes/pages/search.js +0 -54
- package/dist/services/collection.js +0 -109
- package/dist/services/index.js +0 -24
- package/dist/services/media.js +0 -117
- package/dist/services/navigation.js +0 -91
- package/dist/services/page.js +0 -84
- package/dist/services/post.js +0 -229
- package/dist/services/redirect.js +0 -48
- package/dist/services/search.js +0 -67
- package/dist/services/settings.js +0 -68
- package/dist/types/bindings.js +0 -3
- package/dist/types/config.js +0 -147
- package/dist/types/constants.js +0 -27
- package/dist/types/entities.js +0 -3
- package/dist/types/lingui-react-macro.d.js +0 -9
- package/dist/types/operations.js +0 -3
- package/dist/types/props.js +0 -3
- package/dist/types/sortablejs.d.js +0 -5
- package/dist/types/views.js +0 -5
- package/dist/types.js +0 -11
- package/dist/ui/color-themes.js +0 -268
- package/dist/ui/compose/ComposeDialog.js +0 -467
- package/dist/ui/compose/ComposePrompt.js +0 -55
- package/dist/ui/dash/ActionButtons.js +0 -46
- package/dist/ui/dash/CrudPageHeader.js +0 -22
- package/dist/ui/dash/DangerZone.js +0 -36
- package/dist/ui/dash/FormatBadge.js +0 -27
- package/dist/ui/dash/ListItemRow.js +0 -21
- package/dist/ui/dash/PageForm.js +0 -195
- package/dist/ui/dash/PostForm.js +0 -395
- package/dist/ui/dash/PostList.js +0 -83
- package/dist/ui/dash/StatusBadge.js +0 -46
- package/dist/ui/dash/collections/CollectionForm.js +0 -152
- package/dist/ui/dash/collections/CollectionsListContent.js +0 -68
- package/dist/ui/dash/collections/ViewCollectionContent.js +0 -96
- package/dist/ui/dash/index.js +0 -10
- package/dist/ui/dash/media/MediaListContent.js +0 -166
- package/dist/ui/dash/media/ViewMediaContent.js +0 -212
- package/dist/ui/dash/pages/LinkFormContent.js +0 -130
- package/dist/ui/dash/pages/UnifiedPagesContent.js +0 -193
- package/dist/ui/dash/settings/AccountContent.js +0 -209
- package/dist/ui/dash/settings/AppearanceContent.js +0 -259
- package/dist/ui/dash/settings/GeneralContent.js +0 -536
- package/dist/ui/dash/settings/SettingsNav.js +0 -41
- package/dist/ui/feed/LinkCard.js +0 -72
- package/dist/ui/feed/NoteCard.js +0 -58
- package/dist/ui/feed/QuoteCard.js +0 -63
- package/dist/ui/feed/ThreadPreview.js +0 -48
- package/dist/ui/feed/TimelineFeed.js +0 -41
- package/dist/ui/feed/TimelineItem.js +0 -27
- package/dist/ui/font-themes.js +0 -36
- package/dist/ui/layouts/BaseLayout.js +0 -153
- package/dist/ui/layouts/DashLayout.js +0 -141
- package/dist/ui/layouts/SiteLayout.js +0 -169
- package/dist/ui/pages/ArchivePage.js +0 -143
- package/dist/ui/pages/CollectionPage.js +0 -70
- package/dist/ui/pages/CollectionsPage.js +0 -76
- package/dist/ui/pages/FeaturedPage.js +0 -24
- package/dist/ui/pages/HomePage.js +0 -24
- package/dist/ui/pages/PostPage.js +0 -55
- package/dist/ui/pages/SearchPage.js +0 -122
- package/dist/ui/pages/SinglePage.js +0 -23
- package/dist/ui/shared/EmptyState.js +0 -27
- package/dist/ui/shared/MediaGallery.js +0 -35
- package/dist/ui/shared/Pagination.js +0 -195
- package/dist/ui/shared/ThreadView.js +0 -108
- package/dist/ui/shared/index.js +0 -5
- package/dist/vendor/datastar.js +0 -1606
- package/src/lib/__tests__/config.test.ts +0 -192
- package/src/lib/config.ts +0 -167
- package/src/routes/compose.ts +0 -63
- package/src/ui/dash/PostForm.tsx +0 -360
- package/src/ui/dash/settings/AppearanceContent.tsx +0 -254
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
-- Post-Collections M:N migration
|
|
2
|
+
-- Restore many-to-many relationship between posts and collections
|
|
3
|
+
|
|
4
|
+
PRAGMA foreign_keys = OFF;
|
|
5
|
+
--> statement-breakpoint
|
|
6
|
+
|
|
7
|
+
-- 1. Create junction table
|
|
8
|
+
CREATE TABLE `post_collections` (
|
|
9
|
+
`post_id` integer NOT NULL,
|
|
10
|
+
`collection_id` integer NOT NULL,
|
|
11
|
+
PRIMARY KEY (`post_id`, `collection_id`),
|
|
12
|
+
FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON DELETE CASCADE,
|
|
13
|
+
FOREIGN KEY (`collection_id`) REFERENCES `collections`(`id`) ON DELETE CASCADE
|
|
14
|
+
);
|
|
15
|
+
--> statement-breakpoint
|
|
16
|
+
|
|
17
|
+
-- 2. Migrate existing data from posts.collection_id
|
|
18
|
+
INSERT INTO `post_collections` (`post_id`, `collection_id`)
|
|
19
|
+
SELECT `id`, `collection_id` FROM `posts`
|
|
20
|
+
WHERE `collection_id` IS NOT NULL;
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
|
|
23
|
+
-- 3. Recreate posts table without collection_id
|
|
24
|
+
CREATE TABLE `posts_new` (
|
|
25
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
26
|
+
`format` text NOT NULL,
|
|
27
|
+
`status` text DEFAULT 'published' NOT NULL,
|
|
28
|
+
`featured` integer DEFAULT 0 NOT NULL,
|
|
29
|
+
`pinned` integer DEFAULT 0 NOT NULL,
|
|
30
|
+
`path` text,
|
|
31
|
+
`title` text,
|
|
32
|
+
`url` text,
|
|
33
|
+
`body` text,
|
|
34
|
+
`body_html` text,
|
|
35
|
+
`quote_text` text,
|
|
36
|
+
`rating` integer,
|
|
37
|
+
`reply_to_id` integer,
|
|
38
|
+
`thread_id` integer,
|
|
39
|
+
`deleted_at` integer,
|
|
40
|
+
`published_at` integer NOT NULL,
|
|
41
|
+
`created_at` integer NOT NULL,
|
|
42
|
+
`updated_at` integer NOT NULL
|
|
43
|
+
);
|
|
44
|
+
--> statement-breakpoint
|
|
45
|
+
|
|
46
|
+
INSERT INTO `posts_new` (
|
|
47
|
+
`id`, `format`, `status`, `featured`, `pinned`,
|
|
48
|
+
`path`, `title`, `url`, `body`, `body_html`, `quote_text`, `rating`,
|
|
49
|
+
`reply_to_id`, `thread_id`, `deleted_at`, `published_at`, `created_at`, `updated_at`
|
|
50
|
+
)
|
|
51
|
+
SELECT
|
|
52
|
+
`id`, `format`, `status`, `featured`, `pinned`,
|
|
53
|
+
`path`, `title`, `url`, `body`, `body_html`, `quote_text`, `rating`,
|
|
54
|
+
`reply_to_id`, `thread_id`, `deleted_at`, `published_at`, `created_at`, `updated_at`
|
|
55
|
+
FROM `posts`;
|
|
56
|
+
--> statement-breakpoint
|
|
57
|
+
|
|
58
|
+
DROP TABLE `posts`;
|
|
59
|
+
--> statement-breakpoint
|
|
60
|
+
ALTER TABLE `posts_new` RENAME TO `posts`;
|
|
61
|
+
--> statement-breakpoint
|
|
62
|
+
CREATE UNIQUE INDEX `posts_path_unique` ON `posts` (`path`);
|
|
63
|
+
--> statement-breakpoint
|
|
64
|
+
|
|
65
|
+
-- 4. Rebuild FTS triggers (column references changed due to table recreation)
|
|
66
|
+
DROP TRIGGER IF EXISTS posts_fts_insert;
|
|
67
|
+
--> statement-breakpoint
|
|
68
|
+
DROP TRIGGER IF EXISTS posts_fts_update;
|
|
69
|
+
--> statement-breakpoint
|
|
70
|
+
DROP TRIGGER IF EXISTS posts_fts_delete;
|
|
71
|
+
--> statement-breakpoint
|
|
72
|
+
|
|
73
|
+
CREATE TRIGGER posts_fts_insert AFTER INSERT ON posts
|
|
74
|
+
WHEN NEW.deleted_at IS NULL
|
|
75
|
+
BEGIN
|
|
76
|
+
INSERT INTO posts_fts(rowid, title, body, quote_text)
|
|
77
|
+
VALUES (NEW.id, COALESCE(NEW.title, ''), COALESCE(NEW.body, ''), COALESCE(NEW.quote_text, ''));
|
|
78
|
+
END;
|
|
79
|
+
--> statement-breakpoint
|
|
80
|
+
|
|
81
|
+
CREATE TRIGGER posts_fts_update AFTER UPDATE ON posts BEGIN
|
|
82
|
+
DELETE FROM posts_fts WHERE rowid = OLD.id;
|
|
83
|
+
INSERT INTO posts_fts(rowid, title, body, quote_text)
|
|
84
|
+
SELECT NEW.id, COALESCE(NEW.title, ''), COALESCE(NEW.body, ''), COALESCE(NEW.quote_text, '')
|
|
85
|
+
WHERE NEW.deleted_at IS NULL;
|
|
86
|
+
END;
|
|
87
|
+
--> statement-breakpoint
|
|
88
|
+
|
|
89
|
+
CREATE TRIGGER posts_fts_delete AFTER DELETE ON posts BEGIN
|
|
90
|
+
DELETE FROM posts_fts WHERE rowid = OLD.id;
|
|
91
|
+
END;
|
|
92
|
+
--> statement-breakpoint
|
|
93
|
+
|
|
94
|
+
PRAGMA foreign_keys = ON;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-- Add collection_dividers table for standalone sortable divider lines
|
|
2
|
+
|
|
3
|
+
CREATE TABLE `collection_dividers` (
|
|
4
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
5
|
+
`position` integer DEFAULT 0 NOT NULL,
|
|
6
|
+
`created_at` integer NOT NULL,
|
|
7
|
+
`updated_at` integer NOT NULL
|
|
8
|
+
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Performance indexes for frequently queried columns
|
|
2
|
+
-- Posts: almost every query filters by deleted_at IS NULL AND status = 'published'
|
|
3
|
+
CREATE INDEX IF NOT EXISTS idx_posts_status_deleted ON posts (status, deleted_at);--> statement-breakpoint
|
|
4
|
+
|
|
5
|
+
-- Posts: thread lookups and reply counts
|
|
6
|
+
CREATE INDEX IF NOT EXISTS idx_posts_thread_id ON posts (thread_id);--> statement-breakpoint
|
|
7
|
+
|
|
8
|
+
-- Posts: ordering by publication date
|
|
9
|
+
CREATE INDEX IF NOT EXISTS idx_posts_published_at ON posts (published_at);--> statement-breakpoint
|
|
10
|
+
|
|
11
|
+
-- Media: lookup by post
|
|
12
|
+
CREATE INDEX IF NOT EXISTS idx_media_post_id ON media (post_id);--> statement-breakpoint
|
|
13
|
+
|
|
14
|
+
-- Post-Collections: junction table queries in both directions
|
|
15
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_post_collections_pk ON post_collections (post_id, collection_id);--> statement-breakpoint
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_post_collections_collection ON post_collections (collection_id);
|
package/src/db/schema.ts
CHANGED
|
@@ -29,9 +29,6 @@ export const posts = sqliteTable("posts", {
|
|
|
29
29
|
bodyHtml: text("body_html"),
|
|
30
30
|
quoteText: text("quote_text"),
|
|
31
31
|
rating: integer("rating"),
|
|
32
|
-
collectionId: integer("collection_id").references(() => collections.id, {
|
|
33
|
-
onDelete: "set null",
|
|
34
|
-
}),
|
|
35
32
|
replyToId: integer("reply_to_id"),
|
|
36
33
|
threadId: integer("thread_id"),
|
|
37
34
|
deletedAt: integer("deleted_at"),
|
|
@@ -96,11 +93,34 @@ export const collections = sqliteTable("collections", {
|
|
|
96
93
|
.notNull()
|
|
97
94
|
.default("newest"),
|
|
98
95
|
position: integer("position").notNull().default(0),
|
|
99
|
-
showDivider: integer("show_divider").notNull().default(0),
|
|
100
96
|
createdAt: integer("created_at").notNull(),
|
|
101
97
|
updatedAt: integer("updated_at").notNull(),
|
|
102
98
|
});
|
|
103
99
|
|
|
100
|
+
// =============================================================================
|
|
101
|
+
// Collection Dividers (standalone sortable separators)
|
|
102
|
+
// =============================================================================
|
|
103
|
+
|
|
104
|
+
export const collectionDividers = sqliteTable("collection_dividers", {
|
|
105
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
106
|
+
position: integer("position").notNull().default(0),
|
|
107
|
+
createdAt: integer("created_at").notNull(),
|
|
108
|
+
updatedAt: integer("updated_at").notNull(),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// =============================================================================
|
|
112
|
+
// Post-Collection Junction Table (M:N)
|
|
113
|
+
// =============================================================================
|
|
114
|
+
|
|
115
|
+
export const postCollections = sqliteTable("post_collections", {
|
|
116
|
+
postId: integer("post_id")
|
|
117
|
+
.notNull()
|
|
118
|
+
.references(() => posts.id, { onDelete: "cascade" }),
|
|
119
|
+
collectionId: integer("collection_id")
|
|
120
|
+
.notNull()
|
|
121
|
+
.references(() => collections.id, { onDelete: "cascade" }),
|
|
122
|
+
});
|
|
123
|
+
|
|
104
124
|
// =============================================================================
|
|
105
125
|
// Navigation Items
|
|
106
126
|
// =============================================================================
|