import { MediaParadigms, MediaTypes } from "@/src/dict/media-dict"; import { UserTypes } from "@/src/dict/user-types-dict"; import { Variables } from "@/src/dict/variables-dict"; import type { BUN_SQLITE_DatabaseSchemaType } from "@moduletrace/bun-sqlite/dist/types"; const schema: BUN_SQLITE_DatabaseSchemaType = { tables: [ { tableName: "users", fields: [ { fieldName: "first_name", dataType: "TEXT", }, { fieldName: "last_name", dataType: "TEXT", }, { fieldName: "email", dataType: "TEXT", unique: true, }, { fieldName: "username", dataType: "TEXT", unique: true, }, { fieldName: "password", dataType: "TEXT", }, { fieldName: "bio", dataType: "TEXT", html: true, }, { fieldName: "archived", dataType: "INTEGER", options: [0, 1], defaultValue: 0, }, ], }, { tableName: "user_types", fields: [ { fieldName: "user_id", dataType: "INTEGER", }, { fieldName: "user_type", dataType: "TEXT", options: UserTypes.map((ut) => ut.value), }, ], }, { tableName: "media", fields: [ { fieldName: "user_id", dataType: "INTEGER", }, { fieldName: "title", dataType: "TEXT", }, { fieldName: "description", dataType: "TEXT", }, { fieldName: "summary", dataType: "TEXT", }, { fieldName: "media_type", dataType: "TEXT", options: MediaTypes.map((it) => it.value), }, { fieldName: "media_write_path", dataType: "TEXT", }, { fieldName: "media_thumbnail_write_path", dataType: "TEXT", }, { fieldName: "mime_type", dataType: "TEXT", }, { fieldName: "text_content", dataType: "TEXT", }, { fieldName: "is_primary", dataType: "INTEGER", options: [0, 1], }, { fieldName: "is_rag_ingested", dataType: "INTEGER", options: [0, 1], }, { fieldName: "is_private", dataType: "INTEGER", options: [0, 1], }, { fieldName: "archived", dataType: "INTEGER", options: [0, 1], }, ], uniqueConstraints: [ { alias: "one_user_per_primary_profile_image", constraintName: "One User per primary profile image", constraintTableFields: [ { value: "user_id" }, { value: "is_primary" }, ], }, ], }, { tableName: "media_paradigms", fields: [ { fieldName: "media_id", dataType: "INTEGER", foreignKey: { cascadeDelete: true, destinationTableName: "media", destinationTableColumnName: "id", destinationTableColumnType: "INTEGER", foreignKeyName: "media_paradigm_media_fk", }, }, { fieldName: "media_paradigm", dataType: "TEXT", options: MediaParadigms.map((mp) => mp.value), }, ], }, { tableName: "clients", fields: [ { fieldName: "user_id", dataType: "INTEGER", }, { fieldName: "host_id", dataType: "INTEGER", defaultValue: 0, }, { fieldName: "name", dataType: "TEXT", }, { fieldName: "wg_ip_address", dataType: "TEXT", }, { fieldName: "public_ip_address", dataType: "TEXT", }, { fieldName: "private_key", dataType: "TEXT", }, { fieldName: "public_key", dataType: "TEXT", }, { fieldName: "allowed_ips", dataType: "TEXT", }, ], }, { tableName: "hosts", fields: [ { fieldName: "user_id", dataType: "INTEGER", }, { fieldName: "wg_ip_address", dataType: "TEXT", }, { fieldName: "private_key", dataType: "TEXT", }, { fieldName: "public_key", dataType: "TEXT", }, ], }, { tableName: "variables", fields: [ { fieldName: "key", dataType: "TEXT", options: Variables.map((v) => v.value), }, { fieldName: "value", dataType: "TEXT", }, ], }, ], }; export default schema;