From 0b5bc42587a19806c2ebcfe4efbeeba812ad6539 Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Tue, 15 Oct 2024 02:10:49 -0600 Subject: [PATCH] Setup the DB properly --- package.json | 1 + pnpm-lock.yaml | 3 +++ server/dbSetup.ts | 65 ++++++++++++++++++++++++++++++++++------------- server/server.ts | 13 ++++++---- 4 files changed, 60 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index bd65a77..5528d4a 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "libcurl.js-new": "npm:libcurl.js@^0.6.16", "multer": "1.4.5-lts.1", "nanostores": "^0.10.3", + "ora": "^8.1.0", "pg": "^8.13.0", "pg-hstore": "^2.3.4", "sequelize": "^6.37.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aecad22..6eee800 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -95,6 +95,9 @@ importers: nanostores: specifier: ^0.10.3 version: 0.10.3 + ora: + specifier: ^8.1.0 + version: 8.1.0 pg: specifier: ^8.13.0 version: 8.13.0 diff --git a/server/dbSetup.ts b/server/dbSetup.ts index 51cba93..5633285 100644 --- a/server/dbSetup.ts +++ b/server/dbSetup.ts @@ -1,23 +1,54 @@ import chalk from "chalk"; -import { CatalogModel } from "./server.js"; -import { ModelCtor } from "sequelize"; +import { CatalogModel, Catalog } from "./server.js"; +import { ModelStatic } from "sequelize"; +import { fileURLToPath } from "node:url"; +import ora from 'ora'; -function setupDB(db: ModelCtor) { +interface Items extends Omit { + background_video?: string + background_image?: string +} + +async function installItems(db: ModelStatic, items: Items[]) { + items.forEach(async (item) => { + await db.create({ + package_name: item.package_name, + title: item.title, + image: item.image, + author: item.author, + version: item.author, + description: item.description, + tags: item.tags, + payload: item.payload, + background_video: item.background_video, + background_image: item.background_image, + type: item.type + }); + }); +} + +async function setupDB(db: ModelStatic) { //We have some packages that need to be installed if they aren't. - //TODO: set this up - console.log(chalk.hex('#7967dd')('Performing DB setup...')); - //db.create({ - // package_name: 'com.nebula.cybermonay', - // title: 'Cyber Monay', - // image: 'cyber_monay.jpg', - // author: 'Nebula Services', - // version: '1.0.0', - // description: 'A parody of the famous "Cyber Monay" hack!', - // tags: ["Hacking", "Animated", "Funny"], - // payload: "com.nebula.cybermonay.css", - // background_video: "cyber_monay_test.mp4", - // type: 'theme' - //}); + const items: Items[] = [ + { + package_name: 'com.nebula.cybermonay', + title: 'Cyber Monay', + image: 'cyber_monay.jpg', + author: 'Nebula Services', + version: '1.0.0', + description: 'A parody of the famous "Cyber Monay" hack!', + tags: ["Hacking", "Animated", "Funny"], + payload: "com.nebula.cybermonay.css", + background_video: "cyber_monay_test.mp4", + type: 'theme' + } + ] + const dbItems = await db.findAll(); + if (dbItems.length === 0) { + const spinner = ora(chalk.hex('#7967dd')('Performing DB setup...')).start(); + await installItems(db, items); + spinner.succeed(chalk.hex('#eb6f92')('DB setup complete!')); + } } export { setupDB } diff --git a/server/server.ts b/server/server.ts index ee9031f..d77a0ce 100644 --- a/server/server.ts +++ b/server/server.ts @@ -24,7 +24,7 @@ const db = new Sequelize(parsedDoc.db.name, parsedDoc.db.username, parsedDoc.db. storage: 'database.sqlite' //this is sqlite only }); -interface CatalogModel extends Model, InferCreationAttributes> { +interface Catalog { package_name: string title: string description: string @@ -37,6 +37,9 @@ interface CatalogModel extends Model, InferCreatio payload: string type: string } + +interface CatalogModel extends Catalog, Model, InferCreationAttributes> {}; + const catalogAssets = db.define("catalog_assets", { package_name: { type: DataTypes.TEXT, unique: true }, title: { type: DataTypes.TEXT }, @@ -254,11 +257,11 @@ const titleColors = { console.log(gradient(Object.values(titleColors)).multiline(titleText as string)); -app.listen({ port: port, host: '0.0.0.0' }).then(() => { +app.listen({ port: port, host: '0.0.0.0' }).then(async () => { console.log(chalk.hex('#7967dd')(`Server listening on ${chalk.hex('#eb6f92').bold('http://localhost:' + port + '/')}`)); console.log(chalk.hex('#7967dd')(`Server also listening on ${chalk.hex('#eb6f92').bold('http://0.0.0.0:' + port + '/')}`)); - catalogAssets.sync(); - setupDB(catalogAssets); + await catalogAssets.sync() + await setupDB(catalogAssets); }); -export { CatalogModel } +export { CatalogModel, Catalog }