46 lines
1.8 KiB
TypeScript
46 lines
1.8 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, "Boosters");
|
||
|
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;
|
||
|
}
|
||
|
const now = Math.floor(Date.now() / 1000);
|
||
|
for (const { ItemType, ExpiryDate } of requests) {
|
||
|
if (ExpiryDate < now) {
|
||
|
// remove expired boosters
|
||
|
const index = boosters.findIndex(item => item.ItemType === ItemType);
|
||
|
if (index !== -1) {
|
||
|
boosters.splice(index, 1);
|
||
|
}
|
||
|
} else {
|
||
|
const boosterItem = boosters.find(item => item.ItemType === ItemType);
|
||
|
if (boosterItem) {
|
||
|
boosterItem.ExpiryDate = ExpiryDate;
|
||
|
} else {
|
||
|
boosters.push({ ItemType, ExpiryDate });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
await inventory.save();
|
||
|
res.end();
|
||
|
};
|