From 1811aed9e40fb61bb5f309d433d6c11e57ce4e7a Mon Sep 17 00:00:00 2001 From: nsylke Date: Tue, 29 Apr 2025 18:13:47 -0500 Subject: [PATCH 1/3] refactor: move game typings to game directory --- apps/idlebiz/src/{lib => game}/types/building.ts | 0 apps/idlebiz/src/{lib => game}/types/index.ts | 0 apps/idlebiz/src/{lib => game}/types/material.ts | 0 apps/idlebiz/src/setup.ts | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) rename apps/idlebiz/src/{lib => game}/types/building.ts (100%) rename apps/idlebiz/src/{lib => game}/types/index.ts (100%) rename apps/idlebiz/src/{lib => game}/types/material.ts (100%) diff --git a/apps/idlebiz/src/lib/types/building.ts b/apps/idlebiz/src/game/types/building.ts similarity index 100% rename from apps/idlebiz/src/lib/types/building.ts rename to apps/idlebiz/src/game/types/building.ts diff --git a/apps/idlebiz/src/lib/types/index.ts b/apps/idlebiz/src/game/types/index.ts similarity index 100% rename from apps/idlebiz/src/lib/types/index.ts rename to apps/idlebiz/src/game/types/index.ts diff --git a/apps/idlebiz/src/lib/types/material.ts b/apps/idlebiz/src/game/types/material.ts similarity index 100% rename from apps/idlebiz/src/lib/types/material.ts rename to apps/idlebiz/src/game/types/material.ts diff --git a/apps/idlebiz/src/setup.ts b/apps/idlebiz/src/setup.ts index 7747933..d32a648 100644 --- a/apps/idlebiz/src/setup.ts +++ b/apps/idlebiz/src/setup.ts @@ -1,6 +1,6 @@ +import type { Building } from "@/game/types/building"; +import type { Material } from "@/game/types/material"; import { mongo } from "@/lib/mongo"; -import type { Building } from "@/lib/types/building"; -import type { Material } from "@/lib/types/material"; import ms from "ms"; (async () => { From 8f72c9777674378ef0c44d64b00eb02c571a1d1b Mon Sep 17 00:00:00 2001 From: nsylke Date: Tue, 29 Apr 2025 18:25:25 -0500 Subject: [PATCH 2/3] feat: create typings for multiplers, referrals, profiles --- apps/idlebiz/src/game/types/index.ts | 3 +++ apps/idlebiz/src/game/types/multiplier.ts | 15 +++++++++++++++ apps/idlebiz/src/game/types/profile.ts | 4 ++++ apps/idlebiz/src/game/types/referral.ts | 6 ++++++ 4 files changed, 28 insertions(+) create mode 100644 apps/idlebiz/src/game/types/multiplier.ts create mode 100644 apps/idlebiz/src/game/types/profile.ts create mode 100644 apps/idlebiz/src/game/types/referral.ts diff --git a/apps/idlebiz/src/game/types/index.ts b/apps/idlebiz/src/game/types/index.ts index 03f121a..7bd18d1 100644 --- a/apps/idlebiz/src/game/types/index.ts +++ b/apps/idlebiz/src/game/types/index.ts @@ -1,2 +1,5 @@ export * from "./material"; export * from "./building"; +export * from "./referral"; +export * from "./multiplier"; +export * from "./profile"; diff --git a/apps/idlebiz/src/game/types/multiplier.ts b/apps/idlebiz/src/game/types/multiplier.ts new file mode 100644 index 0000000..ab79d6c --- /dev/null +++ b/apps/idlebiz/src/game/types/multiplier.ts @@ -0,0 +1,15 @@ +export enum MultiplierSource { + DailyReward = "dailyReward", +} + +type Multiplier = { + value: number; + source: MultiplierSource; + activatedAt: Date; +}; + +export type PermanentMultiplier = Multiplier; + +export type TemporaryMultiplier = Multiplier & { + expiredAt: Date; +}; diff --git a/apps/idlebiz/src/game/types/profile.ts b/apps/idlebiz/src/game/types/profile.ts new file mode 100644 index 0000000..bc4ab3e --- /dev/null +++ b/apps/idlebiz/src/game/types/profile.ts @@ -0,0 +1,4 @@ +// TODO +export type Profile = { + discordId: string; +}; diff --git a/apps/idlebiz/src/game/types/referral.ts b/apps/idlebiz/src/game/types/referral.ts new file mode 100644 index 0000000..2e99973 --- /dev/null +++ b/apps/idlebiz/src/game/types/referral.ts @@ -0,0 +1,6 @@ +export type Referral = { + userId: string; + ownerId: string; + code: string; + createdAt: Date; +}; From 13bdd8c717b60fb162d8acf9e7dc92ee50af86c7 Mon Sep 17 00:00:00 2001 From: nsylke Date: Tue, 29 Apr 2025 22:25:00 -0500 Subject: [PATCH 3/3] feat(idlebiz): add multiplier functions --- apps/idlebiz/src/game/multiplier.ts | 69 +++++++++++++++++++++++ apps/idlebiz/src/game/types/multiplier.ts | 7 +++ apps/idlebiz/src/game/types/profile.ts | 8 +++ 3 files changed, 84 insertions(+) create mode 100644 apps/idlebiz/src/game/multiplier.ts diff --git a/apps/idlebiz/src/game/multiplier.ts b/apps/idlebiz/src/game/multiplier.ts new file mode 100644 index 0000000..cefedb9 --- /dev/null +++ b/apps/idlebiz/src/game/multiplier.ts @@ -0,0 +1,69 @@ +import { + MultiplierSource, + type MultiplierType, + type PermanentMultiplier, + type Profile, + type TemporaryMultiplier, +} from "@/game/types"; +import { mongo } from "@/lib/mongo"; + +export async function addTemporaryMultiplier( + discordId: string, + value: number, + duration: number, + source: MultiplierSource, + type: MultiplierType +) { + const now = new Date(); + const expiredAt = new Date(now.getTime() + duration); + + const multiplier: TemporaryMultiplier = { + value, + source, + type, + activatedAt: now, + expiredAt, + }; + + const client = await mongo(); + const db = client.db(); + + return await db + .collection("profiles") + .updateOne({ discordId: discordId }, { $push: { "multipliers.temporary": multiplier } }); +} + +export async function addPermanentMultiplier( + discordId: string, + value: number, + source: MultiplierSource, + type: MultiplierType +) { + const now = new Date(); + + const multiplier: PermanentMultiplier = { + value, + source, + type, + activatedAt: now, + }; + + const client = await mongo(); + const db = client.db(); + + return await db + .collection("profiles") + .updateOne({ discordId: discordId }, { $push: { "multipliers.permanent": multiplier } }); +} + +export async function updateReferralBonusMultiplier(discordId: string, value: number) { + const client = await mongo(); + const db = client.db(); + + return await db + .collection("profiles") + .updateOne( + { discordId: discordId, "multipliers.permanent.source": MultiplierSource.ReferralBonus }, + { $set: { "multipliers.permanent.$.value": value } } + ); +} diff --git a/apps/idlebiz/src/game/types/multiplier.ts b/apps/idlebiz/src/game/types/multiplier.ts index ab79d6c..3dfeea1 100644 --- a/apps/idlebiz/src/game/types/multiplier.ts +++ b/apps/idlebiz/src/game/types/multiplier.ts @@ -1,10 +1,17 @@ export enum MultiplierSource { DailyReward = "dailyReward", + ReferralBonus = "referralBonus", + ReferralClaim = "referralClaim", +} + +export enum MultiplierType { + MaterialProduction = "materialProduction", } type Multiplier = { value: number; source: MultiplierSource; + type: MultiplierType; activatedAt: Date; }; diff --git a/apps/idlebiz/src/game/types/profile.ts b/apps/idlebiz/src/game/types/profile.ts index bc4ab3e..58d348c 100644 --- a/apps/idlebiz/src/game/types/profile.ts +++ b/apps/idlebiz/src/game/types/profile.ts @@ -1,4 +1,12 @@ // TODO +import type { PermanentMultiplier, TemporaryMultiplier } from "@/game/types/multiplier"; + export type Profile = { discordId: string; + multipliers: ProfileMultipliers; +}; + +export type ProfileMultipliers = { + permanent: PermanentMultiplier[]; + temporary: TemporaryMultiplier[]; };