diff --git a/apps/idlebiz/.env.example b/apps/idlebiz/.env.example index 0fa351f..d5112c8 100644 --- a/apps/idlebiz/.env.example +++ b/apps/idlebiz/.env.example @@ -3,5 +3,4 @@ DISCORD_TOKEN= DISCORD_APPLICATION_ID= # MongoDB -MONGODB_URI=mongodb://localhost:27017/?replicaSet=rs0 -MONGODB_DB=idlebiz \ No newline at end of file +MONGODB_URI=mongodb://localhost:27017/idlebiz?replicaSet=rs0 diff --git a/apps/idlebiz/package.json b/apps/idlebiz/package.json index f9279f3..257a0ac 100644 --- a/apps/idlebiz/package.json +++ b/apps/idlebiz/package.json @@ -7,16 +7,19 @@ "cmd:register": "node --env-file=.env dist/register.js", "cmd:unregister": "node --env-file=.env dist/unregister.js", "dev": "pnpm build && pnpm start", + "setup": "node --env-file=.env dist/setup.js", "start": "node --env-file=.env dist/index.js" }, "dependencies": { "discord.js": "^14.19.1", "fast-glob": "^3.3.3", "mongodb": "^6.16.0", + "ms": "^2.1.3", "tslib": "^2.8.1", "zod": "^3.24.3" }, "devDependencies": { + "@types/ms": "^2.1.0", "@types/node": "^22.15.2", "tsc-alias": "^1.8.15", "typescript": "^5.8.3" diff --git a/apps/idlebiz/src/env.ts b/apps/idlebiz/src/env.ts index 5aff6bc..424758a 100644 --- a/apps/idlebiz/src/env.ts +++ b/apps/idlebiz/src/env.ts @@ -9,7 +9,6 @@ const envSchema = z.object({ // MongoDB MONGODB_URI: z.string(), - MONGODB_DB: z.string(), }); const parsed = envSchema.safeParse(process.env); @@ -22,7 +21,7 @@ ${parsed.error.errors.map((error) => ` ${error.path}: ${error.message}`).join(" process.exit(1); } -const secretEnvs: Array = ["DISCORD_TOKEN"]; +const secretEnvs: Array = ["DISCORD_TOKEN", "MONGODB_URI"]; for (const secretEnv of secretEnvs) { delete process.env[secretEnv]; diff --git a/apps/idlebiz/src/setup.ts b/apps/idlebiz/src/setup.ts new file mode 100644 index 0000000..7747933 --- /dev/null +++ b/apps/idlebiz/src/setup.ts @@ -0,0 +1,56 @@ +import { mongo } from "@/lib/mongo"; +import type { Building } from "@/lib/types/building"; +import type { Material } from "@/lib/types/material"; +import ms from "ms"; + +(async () => { + console.log("Setting up initial data..."); + + try { + const client = await mongo(); + const db = client.db(); + + const materialsCount = await db.collection("materials").countDocuments(); + + if (materialsCount === 0) { + const wood: Material = { + name: "Wood", + canonicalName: "wood", + description: "Basic building material produced from the lumber mill.", + baseValue: 0.15, + productionInterval: ms("5s"), + }; + + await db.collection("materials").insertOne(wood); + } else { + console.log("Materials collection already has data. Skipping insertion."); + } + + const buildingsCount = await db.collection("buildings").countDocuments(); + + if (buildingsCount === 0) { + const lumberMill: Building = { + name: "Lumber Mill", + canonicalName: "lumber_mill", + description: "Produces wood.", + cost: { + cash: 100, + }, + output: [ + { + material: "wood", + amount: 2, + }, + ], + }; + + await db.collection("buildings").insertOne(lumberMill); + } else { + console.log("Buildings collection already has data. Skipping insertion."); + } + + console.log("Setup completed successfully!"); + } catch (e) { + console.error("Error during setup:", e); + } +})(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b76ecef..0b7d501 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: mongodb: specifier: ^6.16.0 version: 6.16.0 + ms: + specifier: ^2.1.3 + version: 2.1.3 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -45,6 +48,9 @@ importers: specifier: ^3.24.3 version: 3.24.3 devDependencies: + '@types/ms': + specifier: ^2.1.0 + version: 2.1.0 '@types/node': specifier: ^22.15.2 version: 22.15.2 @@ -249,6 +255,9 @@ packages: '@types/conventional-commits-parser@5.0.1': resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@22.15.2': resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} @@ -1329,6 +1338,8 @@ snapshots: dependencies: '@types/node': 22.15.2 + '@types/ms@2.1.0': {} + '@types/node@22.15.2': dependencies: undici-types: 6.21.0