UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 20.7 kB
{"version":3,"file":"00000006-media.mjs","names":[],"sources":["../../../../src/libs/db/migrations/00000006-media.ts"],"sourcesContent":["import { type Kysely, sql } from \"kysely\";\nimport type DatabaseAdapter from \"../adapter-base.js\";\nimport type { MigrationFn } from \"../types.js\";\n\nconst Migration00000006: MigrationFn = (adapter: DatabaseAdapter) => {\n\treturn {\n\t\tasync up(db: Kysely<unknown>) {\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_media_folders\")\n\t\t\t\t.addColumn(\"id\", adapter.getDataType(\"primary\"), (col) =>\n\t\t\t\t\tadapter.primaryKeyColumnBuilder(col),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"title\", adapter.getDataType(\"text\"), (col) => col.notNull())\n\t\t\t\t.addColumn(\"tenant_key\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"parent_folder_id\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_media_folders.id\").onDelete(\"cascade\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"created_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"updated_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"created_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.defaultTo(\n\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\"timestamp\",\n\t\t\t\t\t\t\tadapter.getDefault(\"timestamp\", \"now\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"updated_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.defaultTo(\n\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\"timestamp\",\n\t\t\t\t\t\t\tadapter.getDefault(\"timestamp\", \"now\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_lucid_media_folders_tenant_key\")\n\t\t\t\t.on(\"lucid_media_folders\")\n\t\t\t\t.column(\"tenant_key\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_media\")\n\t\t\t\t.addColumn(\"id\", adapter.getDataType(\"primary\"), (col) =>\n\t\t\t\t\tadapter.primaryKeyColumnBuilder(col),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"key\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.unique().notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"tenant_key\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"folder_id\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_media_folders.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"parent_media_id\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_media.id\").onDelete(\"restrict\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"relation_type\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"e_tag\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"origin\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"public\", adapter.getDataType(\"boolean\"), (col) =>\n\t\t\t\t\tcol\n\t\t\t\t\t\t.notNull()\n\t\t\t\t\t\t.defaultTo(\n\t\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\t\t\tadapter.getDefault(\"boolean\", \"true\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"type\", adapter.getDataType(\"text\"), (col) => col.notNull())\n\t\t\t\t.addColumn(\"mime_type\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"file_extension\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"file_name\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"file_size\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"width\", adapter.getDataType(\"integer\"))\n\t\t\t\t.addColumn(\"height\", adapter.getDataType(\"integer\"))\n\t\t\t\t.addColumn(\"focal_x\", adapter.getDataType(\"integer\"))\n\t\t\t\t.addColumn(\"focal_y\", adapter.getDataType(\"integer\"))\n\t\t\t\t.addColumn(\"crop_x\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_y\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_width\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_height\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_rotation\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_skew_x\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"crop_skew_y\", adapter.getDataType(\"real\"))\n\t\t\t\t.addColumn(\"blur_hash\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"average_color\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"base64\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"is_dark\", adapter.getDataType(\"boolean\"))\n\t\t\t\t.addColumn(\"is_light\", adapter.getDataType(\"boolean\"))\n\t\t\t\t.addColumn(\"custom_meta\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"is_hidden\", adapter.getDataType(\"boolean\"), (col) =>\n\t\t\t\t\tcol\n\t\t\t\t\t\t.notNull()\n\t\t\t\t\t\t.defaultTo(\n\t\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\t\t\tadapter.getDefault(\"boolean\", \"false\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"is_deleted\", adapter.getDataType(\"boolean\"), (col) =>\n\t\t\t\t\tcol.defaultTo(\n\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\"boolean\",\n\t\t\t\t\t\t\tadapter.getDefault(\"boolean\", \"false\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"is_deleted_at\", adapter.getDataType(\"timestamp\"))\n\t\t\t\t.addColumn(\"deleted_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"created_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.defaultTo(\n\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\"timestamp\",\n\t\t\t\t\t\t\tadapter.getDefault(\"timestamp\", \"now\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"updated_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.defaultTo(\n\t\t\t\t\t\tadapter.formatDefaultValue(\n\t\t\t\t\t\t\t\"timestamp\",\n\t\t\t\t\t\t\tadapter.getDefault(\"timestamp\", \"now\"),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"updated_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"created_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addUniqueConstraint(\n\t\t\t\t\t\"lucid_media_parent_media_id_relation_type_unique\",\n\t\t\t\t\t[\"parent_media_id\", \"relation_type\"],\n\t\t\t\t)\n\t\t\t\t.addCheckConstraint(\n\t\t\t\t\t\"lucid_media_owned_relation_complete\",\n\t\t\t\t\tsql`(\n\t\t\t\t\t\t(parent_media_id IS NULL AND relation_type IS NULL) OR\n\t\t\t\t\t\t(parent_media_id IS NOT NULL AND relation_type IN ('crop', 'poster'))\n\t\t\t\t\t)`,\n\t\t\t\t)\n\t\t\t\t.addCheckConstraint(\n\t\t\t\t\t\"lucid_media_owned_relation_not_self\",\n\t\t\t\t\tsql`parent_media_id IS NULL OR parent_media_id <> id`,\n\t\t\t\t)\n\t\t\t\t.addCheckConstraint(\n\t\t\t\t\t\"lucid_media_owned_relation_no_folder\",\n\t\t\t\t\tsql`parent_media_id IS NULL OR folder_id IS NULL`,\n\t\t\t\t)\n\t\t\t\t.addCheckConstraint(\n\t\t\t\t\t\"lucid_media_owned_relation_image_only\",\n\t\t\t\t\tsql`relation_type IS NULL OR type = 'image'`,\n\t\t\t\t)\n\t\t\t\t.addCheckConstraint(\n\t\t\t\t\t\"lucid_media_crop_state_valid\",\n\t\t\t\t\tsql`(\n\t\t\t\t\t\trelation_type = 'crop' AND\n\t\t\t\t\t\tcrop_x IS NOT NULL AND crop_x >= 0 AND crop_x <= 1 AND\n\t\t\t\t\t\tcrop_y IS NOT NULL AND crop_y >= 0 AND crop_y <= 1 AND\n\t\t\t\t\t\tcrop_width IS NOT NULL AND crop_width > 0 AND crop_width <= 1 AND\n\t\t\t\t\t\tcrop_height IS NOT NULL AND crop_height > 0 AND crop_height <= 1 AND\n\t\t\t\t\t\tcrop_x + crop_width <= 1.000001 AND\n\t\t\t\t\t\tcrop_y + crop_height <= 1.000001 AND\n\t\t\t\t\t\tcrop_rotation IS NOT NULL AND crop_rotation >= -180 AND crop_rotation <= 180 AND\n\t\t\t\t\t\tcrop_skew_x IS NOT NULL AND crop_skew_x >= -45 AND crop_skew_x <= 45 AND\n\t\t\t\t\t\tcrop_skew_y IS NOT NULL AND crop_skew_y >= -45 AND crop_skew_y <= 45\n\t\t\t\t\t) OR (\n\t\t\t\t\t\t(relation_type IS NULL OR relation_type <> 'crop') AND\n\t\t\t\t\t\tcrop_x IS NULL AND crop_y IS NULL AND\n\t\t\t\t\t\tcrop_width IS NULL AND crop_height IS NULL AND\n\t\t\t\t\t\tcrop_rotation IS NULL AND crop_skew_x IS NULL AND crop_skew_y IS NULL\n\t\t\t\t\t)`,\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_lucid_media_key\")\n\t\t\t\t.on(\"lucid_media\")\n\t\t\t\t.column(\"key\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_lucid_media_tenant_key\")\n\t\t\t\t.on(\"lucid_media\")\n\t\t\t\t.column(\"tenant_key\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_lucid_media_parent_media_id\")\n\t\t\t\t.on(\"lucid_media\")\n\t\t\t\t.column(\"parent_media_id\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.alterTable(\"lucid_users\")\n\t\t\t\t.addColumn(\n\t\t\t\t\t\"profile_picture_media_id\",\n\t\t\t\t\tadapter.getDataType(\"integer\"),\n\t\t\t\t\t(col) => col.references(\"lucid_media.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_lucid_users_profile_picture_media_id\")\n\t\t\t\t.on(\"lucid_users\")\n\t\t\t\t.column(\"profile_picture_media_id\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_media_translations\")\n\t\t\t\t.addColumn(\"id\", adapter.getDataType(\"primary\"), (col) =>\n\t\t\t\t\tadapter.primaryKeyColumnBuilder(col),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"media_id\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_media.id\").onDelete(\"cascade\").notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"locale_code\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol\n\t\t\t\t\t\t.references(\"lucid_locales.code\")\n\t\t\t\t\t\t.notNull()\n\t\t\t\t\t\t.onDelete(\"cascade\")\n\t\t\t\t\t\t.onUpdate(\"cascade\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"title\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"alt\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"description\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"summary\", adapter.getDataType(\"text\"))\n\t\t\t\t.addUniqueConstraint(\n\t\t\t\t\t\"lucid_media_translations_media_id_locale_code_unique\",\n\t\t\t\t\t[\"media_id\", \"locale_code\"],\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_media_translations_media_id\")\n\t\t\t\t.on(\"lucid_media_translations\")\n\t\t\t\t.column(\"media_id\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_media_translations_locale\")\n\t\t\t\t.on(\"lucid_media_translations\")\n\t\t\t\t.columns([\"media_id\", \"locale_code\"])\n\t\t\t\t.unique()\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_media_awaiting_sync\")\n\t\t\t\t.addColumn(\"key\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.primaryKey(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"timestamp\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_media_upload_sessions\")\n\t\t\t\t.addColumn(\"session_id\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.primaryKey(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"key\", adapter.getDataType(\"text\"), (col) => col.notNull())\n\t\t\t\t.addColumn(\"adapter_key\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"adapter_upload_id\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"mode\", adapter.getDataType(\"text\"), (col) => col.notNull())\n\t\t\t\t.addColumn(\"status\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"file_name\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"mime_type\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"file_extension\", adapter.getDataType(\"text\"))\n\t\t\t\t.addColumn(\"file_size\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"part_size\", adapter.getDataType(\"integer\"))\n\t\t\t\t.addColumn(\"created_by\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.references(\"lucid_users.id\").onDelete(\"set null\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"created_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"updated_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"expires_at\", adapter.getDataType(\"timestamp\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_media_upload_sessions_key\")\n\t\t\t\t.on(\"lucid_media_upload_sessions\")\n\t\t\t\t.column(\"key\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_media_upload_sessions_expires_at\")\n\t\t\t\t.on(\"lucid_media_upload_sessions\")\n\t\t\t\t.column(\"expires_at\")\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createTable(\"lucid_processed_images\")\n\t\t\t\t.addColumn(\"key\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol.primaryKey(),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"media_key\", adapter.getDataType(\"text\"), (col) =>\n\t\t\t\t\tcol\n\t\t\t\t\t\t.references(\"lucid_media.key\")\n\t\t\t\t\t\t.onDelete(\"cascade\")\n\t\t\t\t\t\t.onUpdate(\"cascade\"),\n\t\t\t\t)\n\t\t\t\t.addColumn(\"file_size\", adapter.getDataType(\"integer\"), (col) =>\n\t\t\t\t\tcol.notNull(),\n\t\t\t\t)\n\t\t\t\t.execute();\n\n\t\t\tawait db.schema\n\t\t\t\t.createIndex(\"idx_processed_images_media_key\")\n\t\t\t\t.on(\"lucid_processed_images\")\n\t\t\t\t.column(\"media_key\")\n\t\t\t\t.execute();\n\t\t},\n\t\tasync down(_db: Kysely<unknown>) {},\n\t};\n};\nexport default Migration00000006;\n"],"mappings":"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"}