forked from OpenWF/SpaceNinjaServer
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
![]() |
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||
|
import { getInventory } from "@/src/services/inventoryService";
|
||
|
import { RequestHandler } from "express";
|
||
|
import { ExportBoosters } from "warframe-public-export-plus";
|
||
|
|
||
|
const I32_MAX = 0x7fffffff;
|
||
|
|
||
|
export const setBoosterController: RequestHandler = async (req, res) => {
|
||
|
const accountId = await getAccountIdForRequest(req);
|
||
|
const requests = req.body as { ItemType: string; ExpiryDate: number }[];
|
||
|
const inventory = await getInventory(accountId);
|
||
|
const boosters = inventory.Boosters;
|
||
|
if (
|
||
|
requests.some(request => {
|
||
|
if (typeof request.ItemType !== "string") return true;
|
||
|
if (Object.entries(ExportBoosters).find(([_, item]) => item.typeName === request.ItemType) === undefined)
|
||
|
return true;
|
||
|
if (typeof request.ExpiryDate !== "number") return true;
|
||
|
if (request.ExpiryDate < 0 || request.ExpiryDate > I32_MAX) return true;
|
||
|
return false;
|
||
|
})
|
||
|
) {
|
||
|
res.status(400).send("Invalid ItemType provided.");
|
||
|
return;
|
||
|
}
|
||
|
// Remove if ExpiryDate lower than current time?
|
||
|
for (const { ItemType, ExpiryDate } of requests) {
|
||
|
const boosterItem = boosters.find(item => item.ItemType === ItemType);
|
||
|
if (boosterItem) {
|
||
|
boosterItem.ExpiryDate = ExpiryDate;
|
||
|
} else {
|
||
|
boosters.push({ ItemType, ExpiryDate });
|
||
|
}
|
||
|
}
|
||
|
await inventory.save();
|
||
|
res.end();
|
||
|
};
|