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 { 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 == "SHOP") { const display = personalRooms.TailorShop.FavouriteLoadouts.find(x => x.Tag == body.TagName!); if (display) { display.LoadoutId = new Types.ObjectId(body.FavouriteLoadoutId.$oid); } else { personalRooms.TailorShop.FavouriteLoadouts.push({ Tag: body.TagName!, LoadoutId: new Types.ObjectId(body.FavouriteLoadoutId.$oid) }); } } else { throw new Error(`unexpected BootLocation: ${body.BootLocation}`); } await personalRooms.save(); res.json({}); }; interface ISetShipFavouriteLoadoutRequest { BootLocation: TBootLocation; FavouriteLoadoutId: IOid; TagName?: string; // given request for SHOP, but not for LISET }