forked from OpenWF/SpaceNinjaServer
42 lines
2.0 KiB
TypeScript
42 lines
2.0 KiB
TypeScript
|
import { getCalendarProgress, getInventory } from "@/src/services/inventoryService";
|
||
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||
|
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
|
||
|
import { getWorldState } from "@/src/services/worldStateService";
|
||
|
import { IInventoryChanges } from "@/src/types/purchaseTypes";
|
||
|
import { RequestHandler } from "express";
|
||
|
|
||
|
// GET request; query parameters: CompletedEventIdx=0&Iteration=4&Version=19&Season=CST_SUMMER
|
||
|
export const completeCalendarEventController: RequestHandler = async (req, res) => {
|
||
|
const accountId = await getAccountIdForRequest(req);
|
||
|
const inventory = await getInventory(accountId);
|
||
|
const calendarProgress = getCalendarProgress(inventory);
|
||
|
const currentSeason = getWorldState().KnownCalendarSeasons[0];
|
||
|
let inventoryChanges: IInventoryChanges = {};
|
||
|
let dayIndex = 0;
|
||
|
for (const day of currentSeason.Days) {
|
||
|
if (day.events.length == 0 || day.events[0].type != "CET_CHALLENGE") {
|
||
|
if (dayIndex == calendarProgress.SeasonProgress.LastCompletedDayIdx) {
|
||
|
if (day.events.length != 0) {
|
||
|
const selection = day.events[parseInt(req.query.CompletedEventIdx as string)];
|
||
|
if (selection.type == "CET_REWARD") {
|
||
|
inventoryChanges = (await handleStoreItemAcquisition(selection.reward!, inventory))
|
||
|
.InventoryChanges;
|
||
|
} else if (selection.type == "CET_UPGRADE") {
|
||
|
calendarProgress.YearProgress.Upgrades.push(selection.upgrade!);
|
||
|
} else if (selection.type != "CET_PLOT") {
|
||
|
throw new Error(`unexpected selection type: ${selection.type}`);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
++dayIndex;
|
||
|
}
|
||
|
}
|
||
|
calendarProgress.SeasonProgress.LastCompletedDayIdx++;
|
||
|
await inventory.save();
|
||
|
res.json({
|
||
|
InventoryChanges: inventoryChanges,
|
||
|
CalendarProgress: inventory.CalendarProgress
|
||
|
});
|
||
|
};
|