Browse Source

feat(db): media_assets and post_media_refs for post media

Made-with: Cursor
main
npmrun 8 hours ago
parent
commit
52210bac70
  1. 2
      package.json
  2. 40
      packages/drizzle-pkg/database/sqlite/schema/content.ts
  3. BIN
      packages/drizzle-pkg/db.sqlite
  4. 2
      packages/drizzle-pkg/lib/schema/content.ts
  5. 26
      packages/drizzle-pkg/migrations/0003_media-assets.sql
  6. 1135
      packages/drizzle-pkg/migrations/meta/0003_snapshot.json
  7. 7
      packages/drizzle-pkg/migrations/meta/_journal.json

2
package.json

@ -12,7 +12,7 @@
"cp:db": "cp build-files/run.sh .output/run.sh && cp .env.example .output/.env && cp -r build-files/migrate/* .output/server/ && cp build-files/seed.js .output/server/seed.js", "cp:db": "cp build-files/run.sh .output/run.sh && cp .env.example .output/.env && cp -r build-files/migrate/* .output/server/ && cp build-files/seed.js .output/server/seed.js",
"migrate:test": "sh scripts/migrate-test.sh", "migrate:test": "sh scripts/migrate-test.sh",
"db:migrate": "bun --elide-lines=0 --filter drizzle-pkg migrate", "db:migrate": "bun --elide-lines=0 --filter drizzle-pkg migrate",
"db:generate": "bun --elide-lines=0 --filter drizzle-pkg generate --name", "db:generate": "bun --elide-lines=0 --filter drizzle-pkg generate",
"db:seed": "bun --elide-lines=0 --filter drizzle-pkg seed", "db:seed": "bun --elide-lines=0 --filter drizzle-pkg seed",
"generate": "nuxt generate", "generate": "nuxt generate",
"preview": "nuxt preview", "preview": "nuxt preview",

40
packages/drizzle-pkg/database/sqlite/schema/content.ts

@ -1,6 +1,7 @@
import { import {
index, index,
integer, integer,
primaryKey,
sqliteTable, sqliteTable,
text, text,
uniqueIndex, uniqueIndex,
@ -34,6 +35,45 @@ export const posts = sqliteTable(
(table) => [uniqueIndex("posts_user_id_slug_unique").on(table.userId, table.slug)], (table) => [uniqueIndex("posts_user_id_slug_unique").on(table.userId, table.slug)],
); );
export const mediaAssets = sqliteTable(
"media_assets",
{
id: integer().primaryKey(),
userId: integer("user_id")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
storageKey: text("storage_key").notNull(),
mime: text().notNull(),
sizeBytes: integer("size_bytes").notNull(),
sha256: text("sha256"),
variantsJson: text("variants_json"),
status: text().notNull().default("ready"),
firstReferencedAt: integer("first_referenced_at", { mode: "timestamp_ms" }),
dereferencedAt: integer("dereferenced_at", { mode: "timestamp_ms" }),
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
},
(table) => [
uniqueIndex("media_assets_storage_key_unique").on(table.storageKey),
index("media_assets_user_id_idx").on(table.userId),
],
);
export const postMediaRefs = sqliteTable(
"post_media_refs",
{
postId: integer("post_id")
.notNull()
.references(() => posts.id, { onDelete: "cascade" }),
assetId: integer("asset_id")
.notNull()
.references(() => mediaAssets.id, { onDelete: "cascade" }),
},
(table) => [
primaryKey({ columns: [table.postId, table.assetId] }),
index("post_media_refs_asset_id_idx").on(table.assetId),
],
);
export const timelineEvents = sqliteTable("timeline_events", { export const timelineEvents = sqliteTable("timeline_events", {
id: integer().primaryKey(), id: integer().primaryKey(),
userId: integer("user_id") userId: integer("user_id")

BIN
packages/drizzle-pkg/db.sqlite

Binary file not shown.

2
packages/drizzle-pkg/lib/schema/content.ts

@ -1 +1 @@
export { postComments, posts, timelineEvents } from "../../database/sqlite/schema/content"; export { mediaAssets, postComments, postMediaRefs, posts, timelineEvents } from "../../database/sqlite/schema/content";

26
packages/drizzle-pkg/migrations/0003_media-assets.sql

@ -0,0 +1,26 @@
CREATE TABLE `media_assets` (
`id` integer PRIMARY KEY NOT NULL,
`user_id` integer NOT NULL,
`storage_key` text NOT NULL,
`mime` text NOT NULL,
`size_bytes` integer NOT NULL,
`sha256` text,
`variants_json` text,
`status` text DEFAULT 'ready' NOT NULL,
`first_referenced_at` integer,
`dereferenced_at` integer,
`created_at` integer DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer)) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `media_assets_storage_key_unique` ON `media_assets` (`storage_key`);--> statement-breakpoint
CREATE INDEX `media_assets_user_id_idx` ON `media_assets` (`user_id`);--> statement-breakpoint
CREATE TABLE `post_media_refs` (
`post_id` integer NOT NULL,
`asset_id` integer NOT NULL,
PRIMARY KEY(`post_id`, `asset_id`),
FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`asset_id`) REFERENCES `media_assets`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE INDEX `post_media_refs_asset_id_idx` ON `post_media_refs` (`asset_id`);

1135
packages/drizzle-pkg/migrations/meta/0003_snapshot.json

File diff suppressed because it is too large

7
packages/drizzle-pkg/migrations/meta/_journal.json

@ -22,6 +22,13 @@
"when": 1776498812973, "when": 1776498812973,
"tag": "0002_post-comments", "tag": "0002_post-comments",
"breakpoints": true "breakpoints": true
},
{
"idx": 3,
"version": "6",
"when": 1776516043018,
"tag": "0003_media-assets",
"breakpoints": true
} }
] ]
} }
Loading…
Cancel
Save