diff --git a/src/controllers/api/setHubNpcCustomizationsController.ts b/src/controllers/api/setHubNpcCustomizationsController.ts new file mode 100644 index 00000000..6e199933 --- /dev/null +++ b/src/controllers/api/setHubNpcCustomizationsController.ts @@ -0,0 +1,21 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { IHubNpcCustomization } from "@/src/types/inventoryTypes/inventoryTypes"; +import { RequestHandler } from "express"; + +export const setHubNpcCustomizationsController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const inventory = await getInventory(accountId, "HubNpcCustomizations"); + const upload = getJSONfromString(String(req.body)); + inventory.HubNpcCustomizations ??= []; + const cust = inventory.HubNpcCustomizations.find(x => x.Tag == upload.Tag); + if (cust) { + cust.Colors = upload.Colors; + cust.Pattern = upload.Pattern; + } else { + inventory.HubNpcCustomizations.push(upload); + } + await inventory.save(); + res.end(); +}; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 029bf6c0..775de04a 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -95,7 +95,8 @@ import { ISortieRewardAttenuation, IInvasionProgressDatabase, IInvasionProgressClient, - IAccolades + IAccolades, + IHubNpcCustomization } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -1327,6 +1328,15 @@ const lockedWeaponGroupSchema = new Schema( { _id: false } ); +const hubNpcCustomizationSchema = new Schema( + { + Colors: colorSchema, + Pattern: String, + Tag: String + }, + { _id: false } +); + const inventorySchema = new Schema( { accountOwnerId: Schema.Types.ObjectId, @@ -1680,7 +1690,9 @@ const inventorySchema = new Schema( // G3 + Zanuka BrandedSuits: { type: [Schema.Types.ObjectId], default: undefined }, - LockedWeaponGroup: { type: lockedWeaponGroupSchema, default: undefined } + LockedWeaponGroup: { type: lockedWeaponGroupSchema, default: undefined }, + + HubNpcCustomizations: { type: [hubNpcCustomizationSchema], default: undefined } }, { timestamps: { createdAt: "Created", updatedAt: false } } ); diff --git a/src/routes/api.ts b/src/routes/api.ts index e6416f7a..c3dc2e50 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -117,6 +117,7 @@ import { setDojoComponentMessageController } from "@/src/controllers/api/setDojo import { setDojoComponentSettingsController } from "@/src/controllers/api/setDojoComponentSettingsController"; import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController"; import { setGuildMotdController } from "@/src/controllers/api/setGuildMotdController"; +import { setHubNpcCustomizationsController } from "@/src/controllers/api/setHubNpcCustomizationsController"; import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController"; import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController"; import { setShipFavouriteLoadoutController } from "@/src/controllers/api/setShipFavouriteLoadoutController"; @@ -285,6 +286,7 @@ apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController apiRouter.post("/setDojoComponentSettings.php", setDojoComponentSettingsController); apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController); apiRouter.post("/setGuildMotd.php", setGuildMotdController); +apiRouter.post("/setHubNpcCustomizations.php", setHubNpcCustomizationsController); apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController); apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController); apiRouter.post("/setShipFavouriteLoadout.php", setShipFavouriteLoadoutController); diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index b4dbc57c..219f43a5 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -368,6 +368,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu EchoesHexConquestActiveStickers?: string[]; BrandedSuits?: IOid[]; LockedWeaponGroup?: ILockedWeaponGroupClient; + HubNpcCustomizations?: IHubNpcCustomization[]; } export interface IAffiliation { @@ -1228,3 +1229,9 @@ export interface ILockedWeaponGroupDatabase { } export type TPartialStartingGear = Pick; + +export interface IHubNpcCustomization { + Colors?: IColor; + Pattern: string; + Tag: string; +}