XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
UTF-8
import { getAccountIdForRequest } from "../../services/loginService.ts";
import type { RequestHandler } from "express";
import { getPersonalRooms } from "../../services/personalRoomsService.ts";
import type { IOid } from "../../types/commonTypes.ts";
import { Types } from "mongoose";
import type { IFavouriteLoadoutDatabase, TBootLocation } from "../../types/personalRoomsTypes.ts";

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