2025-04-19 09:06:20 -07:00
|
|
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
2025-05-13 20:39:03 -07:00
|
|
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
2025-04-19 09:06:20 -07:00
|
|
|
import { getInventory } from "@/src/services/inventoryService";
|
|
|
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
|
|
import { ICrewMemberClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
|
|
|
import { RequestHandler } from "express";
|
|
|
|
import { Types } from "mongoose";
|
|
|
|
|
|
|
|
export const crewMembersController: RequestHandler = async (req, res) => {
|
|
|
|
const accountId = await getAccountIdForRequest(req);
|
2025-05-13 20:39:03 -07:00
|
|
|
const inventory = await getInventory(accountId, "CrewMembers NemesisHistory");
|
2025-04-19 09:06:20 -07:00
|
|
|
const data = getJSONfromString<ICrewMembersRequest>(String(req.body));
|
2025-05-13 08:25:09 -07:00
|
|
|
if (data.crewMember.SecondInCommand) {
|
2025-05-13 20:39:03 -07:00
|
|
|
clearOnCall(inventory);
|
|
|
|
}
|
|
|
|
if (data.crewMember.ItemId.$oid == "000000000000000000000000") {
|
|
|
|
const convertedNemesis = inventory.NemesisHistory!.find(x => x.fp == data.crewMember.NemesisFingerprint)!;
|
|
|
|
convertedNemesis.SecondInCommand = data.crewMember.SecondInCommand;
|
|
|
|
} else {
|
|
|
|
const dbCrewMember = inventory.CrewMembers.id(data.crewMember.ItemId.$oid)!;
|
|
|
|
dbCrewMember.AssignedRole = data.crewMember.AssignedRole;
|
|
|
|
dbCrewMember.SkillEfficiency = data.crewMember.SkillEfficiency;
|
|
|
|
dbCrewMember.WeaponConfigIdx = data.crewMember.WeaponConfigIdx;
|
|
|
|
dbCrewMember.WeaponId = new Types.ObjectId(data.crewMember.WeaponId.$oid);
|
|
|
|
dbCrewMember.Configs = data.crewMember.Configs;
|
|
|
|
dbCrewMember.SecondInCommand = data.crewMember.SecondInCommand;
|
2025-05-13 08:25:09 -07:00
|
|
|
}
|
2025-04-19 09:06:20 -07:00
|
|
|
await inventory.save();
|
|
|
|
res.json({
|
|
|
|
crewMemberId: data.crewMember.ItemId.$oid,
|
|
|
|
NemesisFingerprint: data.crewMember.NemesisFingerprint
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
interface ICrewMembersRequest {
|
|
|
|
crewMember: ICrewMemberClient;
|
|
|
|
}
|
2025-05-13 20:39:03 -07:00
|
|
|
|
|
|
|
const clearOnCall = (inventory: TInventoryDatabaseDocument): void => {
|
|
|
|
for (const cm of inventory.CrewMembers) {
|
|
|
|
if (cm.SecondInCommand) {
|
|
|
|
cm.SecondInCommand = false;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (inventory.NemesisHistory) {
|
|
|
|
for (const cm of inventory.NemesisHistory) {
|
|
|
|
if (cm.SecondInCommand) {
|
|
|
|
cm.SecondInCommand = false;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|