feat: favoriting equipment & skins #1555
@ -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