mirror of
https://github.com/ZeroCatDev/ClassworksKV.git
synced 2025-07-01 20:09:23 +00:00
100 lines
2.7 KiB
JavaScript
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);
|
|
});
|