forked from OpenWF/SpaceNinjaServer
		
	Seems to be the same format as the request, so just mirror it back. This is so the client knows we acknowledged the change as it won't resync the ship until the next login. Closes #1822 Reviewed-on: OpenWF/SpaceNinjaServer#1824 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 { getAccountIdForRequest } from "@/src/services/loginService";
 | 
						|
import { RequestHandler } from "express";
 | 
						|
import { getPersonalRooms } from "@/src/services/personalRoomsService";
 | 
						|
import { IOid } from "@/src/types/commonTypes";
 | 
						|
import { Types } from "mongoose";
 | 
						|
import { IFavouriteLoadoutDatabase, TBootLocation } from "@/src/types/shipTypes";
 | 
						|
 | 
						|
export const setShipFavouriteLoadoutController: RequestHandler = async (req, res) => {
 | 
						|
    const accountId = await getAccountIdForRequest(req);
 | 
						|
    const personalRooms = await getPersonalRooms(accountId);
 | 
						|
    const body = JSON.parse(String(req.body)) as ISetShipFavouriteLoadoutRequest;
 | 
						|
    if (body.BootLocation == "LISET") {
 | 
						|
        personalRooms.Ship.FavouriteLoadoutId = new Types.ObjectId(body.FavouriteLoadoutId.$oid);
 | 
						|
    } else if (body.BootLocation == "APARTMENT") {
 | 
						|
        updateTaggedDisplay(personalRooms.Apartment.FavouriteLoadouts, body);
 | 
						|
    } else if (body.BootLocation == "SHOP") {
 | 
						|
        updateTaggedDisplay(personalRooms.TailorShop.FavouriteLoadouts, body);
 | 
						|
    } else {
 | 
						|
        console.log(body);
 | 
						|
        throw new Error(`unexpected BootLocation: ${body.BootLocation}`);
 | 
						|
    }
 | 
						|
    await personalRooms.save();
 | 
						|
    res.json(body);
 | 
						|
};
 | 
						|
 | 
						|
interface ISetShipFavouriteLoadoutRequest {
 | 
						|
    BootLocation: TBootLocation;
 | 
						|
    FavouriteLoadoutId: IOid;
 | 
						|
    TagName?: string;
 | 
						|
}
 | 
						|
 | 
						|
const updateTaggedDisplay = (arr: IFavouriteLoadoutDatabase[], body: ISetShipFavouriteLoadoutRequest): void => {
 | 
						|
    const display = arr.find(x => x.Tag == body.TagName!);
 | 
						|
    if (display) {
 | 
						|
        display.LoadoutId = new Types.ObjectId(body.FavouriteLoadoutId.$oid);
 | 
						|
    } else {
 | 
						|
        arr.push({
 | 
						|
            Tag: body.TagName!,
 | 
						|
            LoadoutId: new Types.ObjectId(body.FavouriteLoadoutId.$oid)
 | 
						|
        });
 | 
						|
    }
 | 
						|
};
 |