Implement resource manager
This commit is contained in:
parent
564a3942a3
commit
4bfa3bbb49
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
import { ObjectId } from 'mongodb';
|
||||
import { getUserResources } from '../lib/db/users';
|
||||
import { getUserResources } from '../lib/utils/resourceManager';
|
||||
import { getHighestWeightedLanguage, getLocales } from '../lib/lang/langDriver';
|
||||
|
||||
import resourceTypes from '../lib/data/resources.json';
|
||||
|
|
|
@ -39,31 +39,9 @@ export const getUserByAccessToken = async(accessToken: string | AccessToken): Pr
|
|||
} else return getUserById(accessToken.user as ObjectId)
|
||||
}
|
||||
|
||||
export const getUserResources = async (id: ObjectId): Promise<Resources> => {
|
||||
const users = await Users();
|
||||
const user = await users.findOne({ _id: id });
|
||||
|
||||
const defaultResources: Resources = {
|
||||
coal: 0,
|
||||
iron: 0,
|
||||
gold: 0
|
||||
};
|
||||
|
||||
return user?.resources === undefined ? defaultResources : user?.resources;
|
||||
}
|
||||
|
||||
export const updateUserResources = async (username: string, resources: any) => {
|
||||
const users = await Users();
|
||||
await users.updateOne({ username }, {
|
||||
$set: {
|
||||
resources
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const getUserBuildings = async (username: string): Promise<Array<Building>> => {
|
||||
const users = await Users();
|
||||
const user = await users.findOne({ username });
|
||||
export const getUserBuildings = async (user: User): Promise<Array<Building>> => {
|
||||
// const users = await Users();
|
||||
// const user = await users.findOne({ username });
|
||||
|
||||
const buildings: Array<Building> = [];
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
import { ObjectId } from "mongodb"
|
||||
import { getUserById } from "../db/users";
|
||||
import { Users } from "../db/mongodb";
|
||||
import type DBResource from "../../types/DBResource";
|
||||
import type Resource from "../../types/Resource";
|
||||
|
||||
export const getUserResources = async (id: ObjectId): Promise<Array<DBResource>> => {
|
||||
const user = await getUserById(id);
|
||||
|
||||
const defaultResources: Array<DBResource> = [];
|
||||
|
||||
return user?.resources === undefined ? defaultResources : user?.resources;
|
||||
}
|
||||
|
||||
export const updateUserResources = async (id: ObjectId, resources: Array<DBResource>) => {
|
||||
const users = await Users();
|
||||
await users.updateOne({ _id: id }, {
|
||||
$set: {
|
||||
resources
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const calculateCurrentAvailableResources = async (id: ObjectId): Promise<Array<Resource>> => {
|
||||
const user = await getUserById(id);
|
||||
|
||||
if(user === null) return [];
|
||||
|
||||
const userResources = await getUserResources(id);
|
||||
|
||||
userResources.forEach(res => {
|
||||
const timeDiff = Math.abs((new Date()).getTime() - res.lastUpdated.getTime());
|
||||
const hours = timeDiff / (1000 * 60 * 60);
|
||||
const amountToAdd = hours * res.perHourMiningRate;
|
||||
res.amount += amountToAdd;
|
||||
res.lastUpdated = new Date();
|
||||
});
|
||||
|
||||
updateUserResources(id, userResources);
|
||||
return userResources;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
import type Resource from "./Resource";
|
||||
|
||||
export default interface DBResource extends Resource {
|
||||
lastUpdated: Date;
|
||||
perHourMiningRate: number;
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
export default interface Resource {
|
||||
name: string;
|
||||
type: "solid" | "liquid" | "gas";
|
||||
amount: number;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
import type { ObjectId } from "mongodb";
|
||||
import type Resources from "./Resources";
|
||||
import type Building from "./Building";
|
||||
import type DBResource from "./DBResource";
|
||||
|
||||
export default interface User {
|
||||
_id: ObjectId;
|
||||
|
@ -8,7 +8,7 @@ export default interface User {
|
|||
email: string;
|
||||
password: string;
|
||||
lastLogin: Date;
|
||||
resources: Resources;
|
||||
resources: Array<DBResource>;
|
||||
buildings: Array<Building>;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
|
|
Loading…
Reference in New Issue