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
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 |