@gv-sh/specgen-server
Version:
SpecGen Server - API for Speculative Fiction Generator
200 lines (188 loc) • 5.56 kB
JavaScript
const fs = require('fs-extra');
const path = require('path');
// eslint-disable-next-line no-undef
const DATABASE_PATH = path.join(__dirname, '../data/database.json');
// Convert name to a slug suitable for use as an ID
function nameToId(name) {
return name.replace(/\s+/g, '-').toLowerCase();
}
// Category IDs based on their names
const CATEGORIES = {
sciFi: nameToId("Science Fiction"),
fantasy: nameToId("Fantasy"),
dystopian: nameToId("Dystopian Future")
};
// Parameter IDs based on category ID + name
const PARAMETERS = {
// Sci-Fi parameters
techLevel: `${CATEGORIES.sciFi}-${nameToId("Technology Level")}`,
alienLife: `${CATEGORIES.sciFi}-${nameToId("Alien Life")}`,
spaceExploration: `${CATEGORIES.sciFi}-${nameToId("Space Exploration Focus")}`,
// Fantasy parameters
magicSystem: `${CATEGORIES.fantasy}-${nameToId("Magic System")}`,
creatures: `${CATEGORIES.fantasy}-${nameToId("Mythical Creatures")}`,
setting: `${CATEGORIES.fantasy}-${nameToId("Setting")}`,
// Dystopian parameters
societyType: `${CATEGORIES.dystopian}-${nameToId("Society Type")}`,
survivalDifficulty: `${CATEGORIES.dystopian}-${nameToId("Survival Difficulty")}`,
hopeLevel: `${CATEGORIES.dystopian}-${nameToId("Hope Level")}`
};
// Create sample database content
const databaseContent = {
categories: [
{
id: CATEGORIES.sciFi,
name: "Science Fiction",
visibility: "Show"
},
{
id: CATEGORIES.fantasy,
name: "Fantasy",
visibility: "Show"
},
{
id: CATEGORIES.dystopian,
name: "Dystopian Future",
visibility: "Show"
}
],
parameters: [
// Sci-Fi Parameters
{
id: PARAMETERS.techLevel,
name: "Technology Level",
type: "Dropdown",
visibility: "Basic",
categoryId: CATEGORIES.sciFi,
values: [
{ id: nameToId("Near Future"), label: "Near Future" },
{ id: nameToId("Advanced"), label: "Advanced" },
{ id: nameToId("Post-Singularity"), label: "Post-Singularity" },
{ id: nameToId("Ancient Advanced Tech"), label: "Ancient Advanced Tech" }
],
config: {}
},
{
id: PARAMETERS.alienLife,
name: "Alien Life",
type: "Toggle Switch",
visibility: "Basic",
categoryId: CATEGORIES.sciFi,
values: {
on: "Yes",
off: "No"
},
config: {}
},
{
id: PARAMETERS.spaceExploration,
name: "Space Exploration Focus",
type: "Slider",
visibility: "Basic",
categoryId: CATEGORIES.sciFi,
values: [],
config: {
min: 1,
max: 10,
step: 1
}
},
// Fantasy Parameters
{
id: PARAMETERS.magicSystem,
name: "Magic System",
type: "Radio Buttons",
visibility: "Basic",
categoryId: CATEGORIES.fantasy,
values: [
{ id: nameToId("Elemental"), label: "Elemental" },
{ id: nameToId("Divine"), label: "Divine" },
{ id: nameToId("Wild"), label: "Wild" },
{ id: nameToId("Forbidden"), label: "Forbidden" }
],
config: {}
},
{
id: PARAMETERS.creatures,
name: "Mythical Creatures",
type: "Checkbox",
visibility: "Basic",
categoryId: CATEGORIES.fantasy,
values: [
{ id: nameToId("Dragons"), label: "Dragons" },
{ id: nameToId("Elves"), label: "Elves" },
{ id: nameToId("Dwarves"), label: "Dwarves" },
{ id: nameToId("Unicorns"), label: "Unicorns" },
{ id: nameToId("Merfolk"), label: "Merfolk" }
],
config: {}
},
{
id: PARAMETERS.setting,
name: "Setting",
type: "Dropdown",
visibility: "Basic",
categoryId: CATEGORIES.fantasy,
values: [
{ id: nameToId("Medieval Europe"), label: "Medieval Europe" },
{ id: nameToId("Ancient Orient"), label: "Ancient Orient" },
{ id: nameToId("Island Realm"), label: "Island Realm" },
{ id: nameToId("Desert Kingdom"), label: "Desert Kingdom" }
],
config: {}
},
// Dystopian Parameters
{
id: PARAMETERS.societyType,
name: "Society Type",
type: "Dropdown",
visibility: "Basic",
categoryId: CATEGORIES.dystopian,
values: [
{ id: nameToId("Totalitarian Regime"), label: "Totalitarian Regime" },
{ id: nameToId("Post-Apocalyptic"), label: "Post-Apocalyptic" },
{ id: nameToId("Corporate Controlled"), label: "Corporate Controlled" },
{ id: nameToId("Technological Surveillance"), label: "Technological Surveillance" }
],
config: {}
},
{
id: PARAMETERS.survivalDifficulty,
name: "Survival Difficulty",
type: "Slider",
visibility: "Basic",
categoryId: CATEGORIES.dystopian,
values: [],
config: {
min: 1,
max: 10,
step: 1
}
},
{
id: PARAMETERS.hopeLevel,
name: "Hope Level",
type: "Slider",
visibility: "Basic",
categoryId: CATEGORIES.dystopian,
values: [],
config: {
min: 1,
max: 10,
step: 1
}
}
]
};
async function initializeDatabase() {
try {
await fs.ensureDir(path.dirname(DATABASE_PATH));
// Write the data
await fs.writeJson(DATABASE_PATH, databaseContent, { spaces: 2 });
Object.entries(CATEGORIES).forEach(() => {});
Object.entries(PARAMETERS).forEach(() => {});
} catch (error) {
console.error('Error initializing database:', error);
}
}
initializeDatabase();