1
0
mirror of https://github.com/ZeroCatDev/ClassworksKV.git synced 2025-07-01 20:09:23 +00:00
ClassworksKV/classworks.js

100 lines
2.7 KiB
JavaScript

#!/usr/bin/env node
import { execSync } from "child_process";
import fs from "fs";
import path from "path";
import dotenv from "dotenv";
dotenv.config();
const PRISMA_DIR = path.join(process.cwd(), "prisma");
const DATABASE_TYPE = process.env.DATABASE_TYPE || "postgres";
const DATABASE_URL =
DATABASE_TYPE === "sqlite"
? "file:/data/db.sqlite"
: process.env.DATABASE_URL;
function setupDatabase() {
try {
// Create data directory for SQLite if needed
if (DATABASE_TYPE === "sqlite") {
if (!fs.existsSync("/data")) {
fs.mkdirSync("/data", { recursive: true });
}
} else if (!DATABASE_URL) {
console.error("❌ DATABASE_URL is required for non-SQLite databases");
process.exit(1);
}
// Copy files from database type directory
const sourceDir = path.join(PRISMA_DIR, "database", DATABASE_TYPE);
if (!fs.existsSync(sourceDir)) {
console.error(`❌ Database configuration not found at ${sourceDir}`);
process.exit(1);
}
// Read all files from source directory
const files = fs.readdirSync(sourceDir);
for (const file of files) {
const sourcePath = path.join(sourceDir, file);
const targetPath = path.join(PRISMA_DIR, file);
fs.copyFileSync(sourcePath, targetPath);
}
console.log(`✅ Copied ${DATABASE_TYPE} database configuration files`);
// Set DATABASE_URL for Prisma
process.env.DATABASE_URL = DATABASE_URL;
} catch (error) {
console.error("❌ Database setup failed:", error.message);
process.exit(1);
}
}
function buildLocal() {
try {
execSync("npm install", { stdio: "inherit" });
execSync("npx prisma generate", { stdio: "inherit" });
console.log("✅ Build completed");
} catch (error) {
console.error("❌ Build failed:", error.message);
process.exit(1);
}
}
function startServer() {
try {
console.log(`🚀 Starting server with ${DATABASE_TYPE} database...`);
execSync("npm run start", { stdio: "inherit" });
} catch (error) {
console.error("❌ Server start failed:", error.message);
process.exit(1);
}
}
function runPrismaCommand(args) {
try {
const command = `npx prisma ${args.join(" ")}`;
execSync(command, { stdio: "inherit" });
} catch (error) {
console.error("❌ Prisma command failed:", error.message);
process.exit(1);
}
}
async function main() {
const args = process.argv.slice(2);
if (args[0] === "prisma") {
// Run Prisma command
runPrismaCommand(args.slice(1));
} else {
// Setup environment and database
setupDatabase();
buildLocal();
startServer();
}
}
main().catch((error) => {
console.error("❌ Script failed:", error);
process.exit(1);
});