diff --git a/src/lib/data/buildings.json b/src/lib/data/buildings.json index 14afbb6..ec0895a 100644 --- a/src/lib/data/buildings.json +++ b/src/lib/data/buildings.json @@ -4,21 +4,39 @@ "buildings": [ { "id": "iron-mine", - "cost": { - "iron": 1, - "gold": 1, - "coal": 1 - }, + "cost": [ + { + "name": "iron", + "amount": 1 + }, + { + "name": "gold", + "amount": 1 + }, + { + "name": "coal", + "amount": 1 + } + ], "energy": 11, "multiplier": 2 }, { "id": "gold-mine", - "cost": { - "iron": 2, - "gold": 2, - "coal": 2 - }, + "cost": [ + { + "name": "iron", + "amount": 1 + }, + { + "name": "gold", + "amount": 1 + }, + { + "name": "coal", + "amount": 1 + } + ], "energy": 11, "multiplier": 2.5 } @@ -28,11 +46,20 @@ "buildings": [ { "id": "research-lab", - "cost": { - "iron": 10, - "gold": 11, - "coal": 12 - }, + "cost": [ + { + "name": "iron", + "amount": 1 + }, + { + "name": "gold", + "amount": 1 + }, + { + "name": "coal", + "amount": 1 + } + ], "energy": 100, "multiplier": 3 } diff --git a/src/lib/utils/calculateAvailableResources.ts b/src/lib/utils/calculateAvailableResources.ts index 5855f57..733274f 100644 --- a/src/lib/utils/calculateAvailableResources.ts +++ b/src/lib/utils/calculateAvailableResources.ts @@ -1,16 +1,20 @@ +import type Resource from "../../types/Resource"; import type Resources from "../../types/Resources"; -export default function calculateAvailableResources(userResources: Resources, buildingCost: Resources) { +export default function calculateAvailableResources(userResources: Array, buildingCost: Array) { let canBuild = true; - const resources = {} as Resources; - - let resource: keyof Resources; - for (resource in buildingCost) { - resources[resource] = userResources[resource] - buildingCost[resource]; - if (userResources[resource] < buildingCost[resource]) { - canBuild = false; + const resources = {} as Array; + + userResources.forEach((userResource) => { + const resource = buildingCost.find((buildingResource) => buildingResource.name === userResource.name); + if (resource) { + resources.push({ + name: userResource.name, + amount: userResource.amount - resource.amount + }); + if (userResource.amount < resource.amount) canBuild = false; } - } + }); return { canBuild, diff --git a/src/pages/api/build/createBuilding.ts b/src/pages/api/build/createBuilding.ts index a5bc6ea..1272d6f 100644 --- a/src/pages/api/build/createBuilding.ts +++ b/src/pages/api/build/createBuilding.ts @@ -1,16 +1,26 @@ import { type APIRoute } from "astro"; import validateAccessToken from "../../../lib/utils/validateAccessToken"; import { getAccessToken } from "../../../lib/db/accessTokens"; -import { getUserResources } from "../../../lib/db/users"; +// import { getUserResources } from "../../../lib/db/users"; +import { getUserResources } from "../../../lib/utils/resourceManager"; import buildings from '../../../lib/data/buildings.json'; import calculateAvailableResources from "../../../lib/utils/calculateAvailableResources"; +import { getUserByAccessToken } from "../../../lib/db/users"; export const POST: APIRoute = async({ request }) => { const response = await validateAccessToken(request); if(response instanceof Response) return response; - const user = response.username; - const resources = await getUserResources(user); + const user = await getUserByAccessToken(response); + if(user === null) { + return new Response( + JSON.stringify({ + code: 401, + message: "Unauthorized" + }), { status: 401 } + ) + } + const resources = await getUserResources(user._id); const buildingId = (await request.json()).building; const building = buildings.map(cat => cat.buildings.filter(b => b.id === buildingId))[0][0]; const balance = calculateAvailableResources(resources, building.cost); diff --git a/src/pages/game/buildings.astro b/src/pages/game/buildings.astro index 6aece36..08e79d8 100644 --- a/src/pages/game/buildings.astro +++ b/src/pages/game/buildings.astro @@ -1,9 +1,11 @@ --- import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; -import { getUserByAccessToken, getUserResources } from '../../lib/db/users'; +import { getUserByAccessToken } from '../../lib/db/users'; import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; import ResourceBar from '../../components/ResourceBar.astro'; +// import { calculateCurrentAvailableResources } from '../../lib/utils/resourceManager'; +// import { getUserResources } from '../../lib/utils/resourceManager'; const buildingsList = (await import('../../lib/data/buildings.json')).default; @@ -14,13 +16,14 @@ if(loggedToken === null || username === "") return Astro.redirect('/logout'); const checkUser = await getUserByAccessToken(loggedToken); if(checkUser === null || checkUser.username !== username) return Astro.redirect('/logout'); -const resources = await getUserResources(checkUser._id); +// const resources = await getUserResources(checkUser._id); const locale = getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); const langResources = await getLocales(locale, 'resources'); const langGame = await getLocales(locale, 'game'); const langBuildings = await getLocales(locale, 'buildings'); +// console.log(await calculateCurrentAvailableResources(checkUser._id)); --- diff --git a/src/pages/game/index.astro b/src/pages/game/index.astro index fd0c223..c4d464d 100644 --- a/src/pages/game/index.astro +++ b/src/pages/game/index.astro @@ -3,6 +3,7 @@ import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import ResourceBar from '../../components/ResourceBar.astro'; import { getUserByAccessToken } from '../../lib/db/users'; +// import { createInitialResources } from '../../lib/utils/resourceManager'; const loggedToken = Astro.cookies.get('sessionToken')?.value ?? null; const username = Astro.cookies.get('username')?.value ?? ""; @@ -10,7 +11,7 @@ if(loggedToken === null || username === "") return Astro.redirect('/logout'); const checkUser = await getUserByAccessToken(loggedToken); if(checkUser === null || checkUser.username !== username) return Astro.redirect('/logout'); - +// createInitialResources(checkUser._id); ---