forked from OpenWF/SpaceNinjaServer
For bootstrapper v0.11.11, out now. Reviewed-on: OpenWF/SpaceNinjaServer#2735 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import type { RequestHandler } from "express";
|
|
import { getAccountIdForRequest } from "../../services/loginService.ts";
|
|
import { addFusionPoints, getInventory } from "../../services/inventoryService.ts";
|
|
import { getGuildForRequestEx, hasGuildPermission } from "../../services/guildService.ts";
|
|
import { GuildPermission } from "../../types/guildTypes.ts";
|
|
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
|
|
|
|
export const addCurrencyController: RequestHandler = async (req, res) => {
|
|
const accountId = await getAccountIdForRequest(req);
|
|
const request = req.body as IAddCurrencyRequest;
|
|
let projection = request.currency as string;
|
|
if (request.currency.startsWith("Vault")) projection = "GuildId";
|
|
const inventory = await getInventory(accountId, projection);
|
|
if (request.currency == "FusionPoints") {
|
|
addFusionPoints(inventory, request.delta);
|
|
} else if (request.currency == "VaultRegularCredits" || request.currency == "VaultPremiumCredits") {
|
|
const guild = await getGuildForRequestEx(req, inventory);
|
|
if (await hasGuildPermission(guild, accountId, GuildPermission.Treasurer)) {
|
|
guild[request.currency] ??= 0;
|
|
guild[request.currency]! += request.delta;
|
|
await guild.save();
|
|
}
|
|
} else {
|
|
inventory[request.currency] += request.delta;
|
|
}
|
|
if (!request.currency.startsWith("Vault")) {
|
|
await inventory.save();
|
|
broadcastInventoryUpdate(req);
|
|
}
|
|
res.end();
|
|
};
|
|
|
|
interface IAddCurrencyRequest {
|
|
currency:
|
|
| "RegularCredits"
|
|
| "PremiumCredits"
|
|
| "FusionPoints"
|
|
| "PrimeTokens"
|
|
| "VaultRegularCredits"
|
|
| "VaultPremiumCredits";
|
|
delta: number;
|
|
}
|