forked from OpenWF/SpaceNinjaServer
feat: favoriting equipment & skins (#1555)
Reviewed-on: OpenWF/SpaceNinjaServer#1555 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
2ca79ef898
commit
dde95c2b61
@ -1,32 +0,0 @@
|
|||||||
import { RequestHandler } from "express";
|
|
||||||
import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes";
|
|
||||||
import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService";
|
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
|
||||||
import { logger } from "@/src/utils/logger";
|
|
||||||
|
|
||||||
export const saveLoadoutController: RequestHandler = async (req, res) => {
|
|
||||||
//validate here
|
|
||||||
const accountId = await getAccountIdForRequest(req);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest;
|
|
||||||
// console.log(util.inspect(body, { showHidden: false, depth: null, colors: true }));
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
const { UpgradeVer, ...equipmentChanges } = body;
|
|
||||||
const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId);
|
|
||||||
|
|
||||||
//send back new loadout id, if new loadout was added
|
|
||||||
if (newLoadoutId) {
|
|
||||||
res.send(newLoadoutId);
|
|
||||||
}
|
|
||||||
res.status(200).end();
|
|
||||||
} catch (error: unknown) {
|
|
||||||
if (error instanceof Error) {
|
|
||||||
logger.error(`error in saveLoadoutController: ${error.message}`);
|
|
||||||
res.status(400).json({ error: error.message });
|
|
||||||
} else {
|
|
||||||
res.status(400).json({ error: "unknown error" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
21
src/controllers/api/saveLoadoutController.ts
Normal file
21
src/controllers/api/saveLoadoutController.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { RequestHandler } from "express";
|
||||||
|
import { ISaveLoadoutRequest } from "@/src/types/saveLoadoutTypes";
|
||||||
|
import { handleInventoryItemConfigChange } from "@/src/services/saveLoadoutService";
|
||||||
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
|
|
||||||
|
export const saveLoadoutController: RequestHandler = async (req, res) => {
|
||||||
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
|
||||||
|
const body: ISaveLoadoutRequest = JSON.parse(req.body as string) as ISaveLoadoutRequest;
|
||||||
|
// console.log(util.inspect(body, { showHidden: false, depth: null, colors: true }));
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
const { UpgradeVer, ...equipmentChanges } = body;
|
||||||
|
const newLoadoutId = await handleInventoryItemConfigChange(equipmentChanges, accountId);
|
||||||
|
|
||||||
|
//send back new loadout id, if new loadout was added
|
||||||
|
if (newLoadoutId) {
|
||||||
|
res.send(newLoadoutId);
|
||||||
|
}
|
||||||
|
res.end();
|
||||||
|
};
|
@ -612,6 +612,7 @@ const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
|
|||||||
const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
|
const weaponSkinsSchema = new Schema<IWeaponSkinDatabase>(
|
||||||
{
|
{
|
||||||
ItemType: String,
|
ItemType: String,
|
||||||
|
Favorite: Boolean,
|
||||||
IsNew: Boolean
|
IsNew: Boolean
|
||||||
},
|
},
|
||||||
{ id: false }
|
{ id: false }
|
||||||
@ -880,6 +881,7 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
|
|||||||
RailjackImage: FlavourItemSchema,
|
RailjackImage: FlavourItemSchema,
|
||||||
CrewMembers: crewShipMembersSchema,
|
CrewMembers: crewShipMembersSchema,
|
||||||
Details: detailsSchema,
|
Details: detailsSchema,
|
||||||
|
Favorite: Boolean,
|
||||||
IsNew: Boolean
|
IsNew: Boolean
|
||||||
},
|
},
|
||||||
{ id: false }
|
{ id: false }
|
||||||
|
@ -97,7 +97,7 @@ import { removeFromGuildController } from "@/src/controllers/api/removeFromGuild
|
|||||||
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
|
import { rerollRandomModController } from "@/src/controllers/api/rerollRandomModController";
|
||||||
import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
|
import { retrievePetFromStasisController } from "@/src/controllers/api/retrievePetFromStasisController";
|
||||||
import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
|
import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
|
||||||
import { saveLoadoutController } from "@/src/controllers/api/saveLoadout";
|
import { saveLoadoutController } from "@/src/controllers/api/saveLoadoutController";
|
||||||
import { saveSettingsController } from "@/src/controllers/api/saveSettingsController";
|
import { saveSettingsController } from "@/src/controllers/api/saveSettingsController";
|
||||||
import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController";
|
import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController";
|
||||||
import { sellController } from "@/src/controllers/api/sellController";
|
import { sellController } from "@/src/controllers/api/sellController";
|
||||||
|
@ -140,7 +140,22 @@ export const handleInventoryItemConfigChange = async (
|
|||||||
case "WeaponSkins": {
|
case "WeaponSkins": {
|
||||||
const itemEntries = equipment as IItemEntry;
|
const itemEntries = equipment as IItemEntry;
|
||||||
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
|
for (const [itemId, itemConfigEntries] of Object.entries(itemEntries)) {
|
||||||
inventory.WeaponSkins.id(itemId)!.IsNew = itemConfigEntries.IsNew;
|
if (itemId.startsWith("ca70ca70ca70ca70")) {
|
||||||
|
logger.warn(
|
||||||
|
`unlockAllSkins does not work with favoriting items because you don't actually own it`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const inventoryItem = inventory.WeaponSkins.id(itemId);
|
||||||
|
if (!inventoryItem) {
|
||||||
|
throw new Error(`inventory item WeaponSkins not found with id ${itemId}`);
|
||||||
|
}
|
||||||
|
if ("Favorite" in itemConfigEntries) {
|
||||||
|
inventoryItem.Favorite = itemConfigEntries.Favorite;
|
||||||
|
}
|
||||||
|
if ("IsNew" in itemConfigEntries) {
|
||||||
|
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -163,6 +178,9 @@ export const handleInventoryItemConfigChange = async (
|
|||||||
inventoryItem.Configs[parseInt(configId)] = config;
|
inventoryItem.Configs[parseInt(configId)] = config;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ("Favorite" in itemConfigEntries) {
|
||||||
|
inventoryItem.Favorite = itemConfigEntries.Favorite;
|
||||||
|
}
|
||||||
if ("IsNew" in itemConfigEntries) {
|
if ("IsNew" in itemConfigEntries) {
|
||||||
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
||||||
}
|
}
|
||||||
|
@ -142,6 +142,7 @@ export interface IEquipmentDatabase {
|
|||||||
RailjackImage?: IFlavourItem;
|
RailjackImage?: IFlavourItem;
|
||||||
CrewMembers?: ICrewShipMembersDatabase;
|
CrewMembers?: ICrewShipMembersDatabase;
|
||||||
Details?: IKubrowPetDetailsDatabase;
|
Details?: IKubrowPetDetailsDatabase;
|
||||||
|
Favorite?: boolean;
|
||||||
IsNew?: boolean;
|
IsNew?: boolean;
|
||||||
_id: Types.ObjectId;
|
_id: Types.ObjectId;
|
||||||
}
|
}
|
||||||
|
@ -1034,6 +1034,7 @@ export interface ITaunt {
|
|||||||
|
|
||||||
export interface IWeaponSkinDatabase {
|
export interface IWeaponSkinDatabase {
|
||||||
ItemType: string;
|
ItemType: string;
|
||||||
|
Favorite?: boolean;
|
||||||
IsNew?: boolean;
|
IsNew?: boolean;
|
||||||
_id: Types.ObjectId;
|
_id: Types.ObjectId;
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ export interface IItemEntry {
|
|||||||
|
|
||||||
export type IConfigEntry = {
|
export type IConfigEntry = {
|
||||||
[configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
|
[configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
|
||||||
} & { IsNew?: boolean };
|
} & { Favorite?: boolean; IsNew?: boolean };
|
||||||
|
|
||||||
export type ILoadoutClient = Omit<ILoadoutDatabase, "_id" | "loadoutOwnerId">;
|
export type ILoadoutClient = Omit<ILoadoutDatabase, "_id" | "loadoutOwnerId">;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user