saveLoadout and misc. #99
@ -39,6 +39,15 @@ app.use("/stats", statsRouter);
 | 
			
		||||
app.post("/test", async (req, _res) => {
 | 
			
		||||
    console.log("test hit", req.body);
 | 
			
		||||
    const newLoadout = new Loadout({});
 | 
			
		||||
    newLoadout.NORMAL.push({
 | 
			
		||||
        _id: "000000000000000000000000",
 | 
			
		||||
        Favorite: false,
 | 
			
		||||
        PresetIcon: "",
 | 
			
		||||
        s: { ItemId: { $oid: "000000000000000000000000" }, mod: 0, cus: 0 },
 | 
			
		||||
        p: { ItemId: { $oid: "000000000000000000000000" }, mod: 0, cus: 0 },
 | 
			
		||||
        l: { ItemId: { $oid: "000000000000000000000000" }, mod: 0, cus: 0 },
 | 
			
		||||
        m: { ItemId: { $oid: "000000000000000000000000" }, mod: 0, cus: 0 }
 | 
			
		||||
    });
 | 
			
		||||
    await newLoadout.save();
 | 
			
		||||
    _res.end();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -4,17 +4,24 @@ import util from "util";
 | 
			
		||||
import {
 | 
			
		||||
    EquipmentCategories,
 | 
			
		||||
    IConfigEntry,
 | 
			
		||||
    ILoadout,
 | 
			
		||||
    ILoadoutRequest,
 | 
			
		||||
    ILoadoutKey,
 | 
			
		||||
    ISaveLoadoutRequest,
 | 
			
		||||
    ISaveLoadoutRequestNoUpgradeVer
 | 
			
		||||
    ISaveLoadoutRequestNoUpgradeVer,
 | 
			
		||||
    ILoadoutConfigDatabase
 | 
			
		||||
} from "@/src/types/saveLoadoutTypes";
 | 
			
		||||
import { LoadoutModel } from "@/src/models/inventoryModels/loadoutModel";
 | 
			
		||||
import { Types } from "mongoose";
 | 
			
		||||
 | 
			
		||||
export const isEmptyObject = (obj: unknown): boolean => {
 | 
			
		||||
    return Boolean(obj && Object.keys(obj).length === 0 && obj.constructor === Object);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const handleInventoryItemConfigChange = (equipmentChanges: ISaveLoadoutRequestNoUpgradeVer) => {
 | 
			
		||||
//setup default items on account creation or like originally in giveStartingItems.php
 | 
			
		||||
 | 
			
		||||
//export const updateLoadout = (loadout: ISaveLoadoutRequest, accountId: string) => {};
 | 
			
		||||
 | 
			
		||||
export const handleInventoryItemConfigChange = async (equipmentChanges: ISaveLoadoutRequestNoUpgradeVer) => {
 | 
			
		||||
    for (const [_equipmentName, _equipment] of Object.entries(equipmentChanges)) {
 | 
			
		||||
        const equipment = _equipment as ISaveLoadoutRequestNoUpgradeVer[keyof ISaveLoadoutRequestNoUpgradeVer];
 | 
			
		||||
        const equipmentName = _equipmentName as keyof ISaveLoadoutRequestNoUpgradeVer;
 | 
			
		||||
@ -28,23 +35,59 @@ export const handleInventoryItemConfigChange = (equipmentChanges: ISaveLoadoutRe
 | 
			
		||||
            case "LoadOuts": {
 | 
			
		||||
                console.log("loadout received");
 | 
			
		||||
 | 
			
		||||
                for (const [_loadoutName, _loadout] of Object.entries(equipment)) {
 | 
			
		||||
                for (const [_loadoutSlot, _loadout] of Object.entries(equipment)) {
 | 
			
		||||
                    const loadoutSlot = _loadoutSlot as keyof ILoadoutRequest;
 | 
			
		||||
                    const loadout = _loadout as ILoadoutKey;
 | 
			
		||||
                    const loadoutName = _loadoutName as keyof ILoadout;
 | 
			
		||||
 | 
			
		||||
                    console.log(_loadoutName, loadout);
 | 
			
		||||
                    //console.log("key", loadoutSlot, "value", loadout);
 | 
			
		||||
 | 
			
		||||
                    if (isEmptyObject(loadout)) {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    // all non-empty entries are one loadout slot
 | 
			
		||||
                    for (const [_loadoutId, _loadoutConfig] of Object.entries(loadout)) {
 | 
			
		||||
                        console.log(loadout[_loadoutId].s);
 | 
			
		||||
                    for (const [loadoutId, loadoutConfig] of Object.entries(loadout)) {
 | 
			
		||||
                        // console.log("loadoutId", loadoutId, "loadoutconfig", loadoutConfig);
 | 
			
		||||
                        const loadout = await LoadoutModel.findById("656a184a9cefa0e5627689af");
 | 
			
		||||
                        if (!loadout) {
 | 
			
		||||
                            throw new Error("loadout not found");
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        const oldLoadoutConfig = loadout[loadoutSlot].find(
 | 
			
		||||
                            loadout => loadout._id.toString() === loadoutId
 | 
			
		||||
                        );
 | 
			
		||||
 | 
			
		||||
                        // if no config with this id exists, create a new one
 | 
			
		||||
                        if (!oldLoadoutConfig) {
 | 
			
		||||
                            const { ItemId, ...loadoutConfigItemIdRemoved } = loadoutConfig;
 | 
			
		||||
                            loadout[loadoutSlot].push({
 | 
			
		||||
                                _id: ItemId.$oid,
 | 
			
		||||
                                ...loadoutConfigItemIdRemoved
 | 
			
		||||
                            });
 | 
			
		||||
                            await loadout.save();
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        const loadoutIndex = loadout[loadoutSlot].indexOf(oldLoadoutConfig);
 | 
			
		||||
 | 
			
		||||
                        if (loadoutIndex === undefined || loadoutIndex === -1) {
 | 
			
		||||
                            throw new Error("loadout index not found");
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        //console.log("parent id", oldLoadoutConfig.ownerDocument()._id);
 | 
			
		||||
                        loadout[loadoutSlot][loadoutIndex].set(loadoutConfig);
 | 
			
		||||
                        //loadout.NORMAL[loadoutIndex].overwrite(loadoutConfig);
 | 
			
		||||
                        //console.log("db", loadout[loadoutSlot][loadoutIndex].schema);
 | 
			
		||||
 | 
			
		||||
                        await loadout.save();
 | 
			
		||||
                        //({ _id: loadoutId }, loadoutConfig);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case "LongGuns": {
 | 
			
		||||
                console.log("longgun received");
 | 
			
		||||
                console.log(equipmentName, equipment);
 | 
			
		||||
 | 
			
		||||
                const longGun = equipment as IConfigEntry;
 | 
			
		||||
                //   longGun["key"].PvpUpgrades;
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
@ -152,7 +152,10 @@ suitConfigSchema.set("toJSON", {
 | 
			
		||||
 | 
			
		||||
const suitSchema = new Schema<ISuitDatabase>({
 | 
			
		||||
    ItemType: String,
 | 
			
		||||
    Configs: [suitConfigSchema],
 | 
			
		||||
    Configs: {
 | 
			
		||||
        type: [suitConfigSchema],
 | 
			
		||||
        default: [{}, {}, {}]
 | 
			
		||||
    },
 | 
			
		||||
    UpgradeVer: Number,
 | 
			
		||||
    XP: Number,
 | 
			
		||||
    InfestationDate: Date,
 | 
			
		||||
 | 
			
		||||
@ -1,67 +1,43 @@
 | 
			
		||||
import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
import { ILoadout, ILoadoutConfig, ILoadoutConfigDocument, ILoadoutDatabase, M } from "@/src/types/saveLoadoutTypes";
 | 
			
		||||
import { ILoadoutConfigDatabase, ILoadoutDatabase, IEquipmentSelection } from "@/src/types/saveLoadoutTypes";
 | 
			
		||||
import { Model, Schema, Types, model } from "mongoose";
 | 
			
		||||
 | 
			
		||||
//create a schema for the $oid type
 | 
			
		||||
const oidSchema = new Schema<IOid>({
 | 
			
		||||
const oidSchema = new Schema<IOid>(
 | 
			
		||||
    {
 | 
			
		||||
        $oid: String
 | 
			
		||||
});
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        _id: false
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
//create a mongoose schema based on interface M
 | 
			
		||||
const modSchema = new Schema<M>({
 | 
			
		||||
const EquipmentSelectionSchema = new Schema<IEquipmentSelection>(
 | 
			
		||||
    {
 | 
			
		||||
        ItemId: {
 | 
			
		||||
            type: oidSchema,
 | 
			
		||||
            default: { $oid: "000000000000000000000000" }
 | 
			
		||||
        },
 | 
			
		||||
        mod: Number,
 | 
			
		||||
        cus: Number
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
//default initialization for
 | 
			
		||||
const loadoutConfigSchema = new Schema<ILoadoutConfig>(
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        _id: false
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const loadoutConfigSchema = new Schema<ILoadoutConfigDatabase>({
 | 
			
		||||
    PresetIcon: String,
 | 
			
		||||
    Favorite: Boolean,
 | 
			
		||||
        s: {},
 | 
			
		||||
        p: {},
 | 
			
		||||
        l: {},
 | 
			
		||||
        m: {}
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        virtuals: {
 | 
			
		||||
            ItemId: {
 | 
			
		||||
                get() {
 | 
			
		||||
    s: EquipmentSelectionSchema,
 | 
			
		||||
    p: EquipmentSelectionSchema,
 | 
			
		||||
    l: EquipmentSelectionSchema,
 | 
			
		||||
    m: EquipmentSelectionSchema
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
loadoutConfigSchema.virtual("ItemId").get(function (): string {
 | 
			
		||||
    return this._id.toString();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
interface User {
 | 
			
		||||
    firstName: string;
 | 
			
		||||
    lastName: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const UserSchema = new Schema(
 | 
			
		||||
    {
 | 
			
		||||
        firstName: String,
 | 
			
		||||
        lastName: String
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        virtuals: {
 | 
			
		||||
            fullname: {
 | 
			
		||||
                get() {
 | 
			
		||||
                    return `${this.firstName} ${this.lastName}`;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
// loadoutConfigSchema.virtual("ItemId").get(function (): string {
 | 
			
		||||
//     return this._id
 | 
			
		||||
// });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
loadoutConfigSchema.set("toJSON", {
 | 
			
		||||
    virtuals: true,
 | 
			
		||||
@ -85,19 +61,31 @@ const loadoutSchema = new Schema<ILoadoutDatabase, loadoutModelType>({
 | 
			
		||||
    DRIFTER: [loadoutConfigSchema]
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
loadoutSchema.virtual("ItemId").get(function (): string {
 | 
			
		||||
    return this._id.toString();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
loadoutSchema.set("toJSON", {
 | 
			
		||||
    virtuals: true,
 | 
			
		||||
    transform(_doc, ret, _options) {
 | 
			
		||||
        delete ret._id;
 | 
			
		||||
        delete ret.__v;
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
//create database typefor ILoadoutConfig
 | 
			
		||||
type loadoutDocumentProps = {
 | 
			
		||||
    NORMAL: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    SENTINEL: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    ARCHWING: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    NORMAL_PVP: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    LUNARO: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    OPERATOR: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    KDRIVE: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    DATAKNIFE: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    MECH: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    OPERATOR_ADULT: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    DRIFTER: Types.DocumentArray<ILoadoutConfig>;
 | 
			
		||||
    NORMAL: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    SENTINEL: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    ARCHWING: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    NORMAL_PVP: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    LUNARO: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    OPERATOR: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    KDRIVE: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    DATAKNIFE: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    MECH: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    OPERATOR_ADULT: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
    DRIFTER: Types.DocumentArray<ILoadoutConfigDatabase>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
type loadoutModelType = Model<ILoadoutDatabase, {}, loadoutDocumentProps>;
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
import { IOid } from "@/src/types/commonTypes";
 | 
			
		||||
import { Document, Mongoose } from "mongoose";
 | 
			
		||||
import { Document, Mongoose, Types } from "mongoose";
 | 
			
		||||
 | 
			
		||||
export interface ISaveLoadoutRequest {
 | 
			
		||||
    LoadOuts: ILoadout;
 | 
			
		||||
    LoadOuts: ILoadoutRequest;
 | 
			
		||||
    LongGuns: IConfigEntry;
 | 
			
		||||
    OperatorAmps: IConfigEntry;
 | 
			
		||||
    Pistols: IConfigEntry;
 | 
			
		||||
@ -36,51 +36,46 @@ export interface IConfigEntry {
 | 
			
		||||
    [key: string]: Config;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ILoadout {
 | 
			
		||||
    NORMAL: ILoadoutKey;
 | 
			
		||||
    SENTINEL: ILoadoutKey;
 | 
			
		||||
    ARCHWING: ILoadoutKey;
 | 
			
		||||
    NORMAL_PVP: ILoadoutKey;
 | 
			
		||||
    LUNARO: ILoadoutKey;
 | 
			
		||||
    OPERATOR: ILoadoutKey;
 | 
			
		||||
    KDRIVE: ILoadoutKey;
 | 
			
		||||
    DATAKNIFE: ILoadoutKey;
 | 
			
		||||
    MECH: ILoadoutKey;
 | 
			
		||||
    OPERATOR_ADULT: ILoadoutKey;
 | 
			
		||||
    DRIFTER: ILoadoutKey;
 | 
			
		||||
export interface ILoadoutRequest extends Omit<ILoadoutDatabase, "_id"> {}
 | 
			
		||||
 | 
			
		||||
export interface ILoadoutResponse extends ILoadoutDatabase {
 | 
			
		||||
    ItemId: IOid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ILoadoutDatabase {
 | 
			
		||||
    NORMAL: ILoadoutConfig;
 | 
			
		||||
    SENTINEL: ILoadoutConfig;
 | 
			
		||||
    ARCHWING: ILoadoutConfig;
 | 
			
		||||
    NORMAL_PVP: ILoadoutConfig;
 | 
			
		||||
    LUNARO: ILoadoutConfig;
 | 
			
		||||
    OPERATOR: ILoadoutConfig;
 | 
			
		||||
    KDRIVE: ILoadoutConfig;
 | 
			
		||||
    DATAKNIFE: ILoadoutConfig;
 | 
			
		||||
    MECH: ILoadoutConfig;
 | 
			
		||||
    OPERATOR_ADULT: ILoadoutConfig;
 | 
			
		||||
    DRIFTER: ILoadoutConfig;
 | 
			
		||||
    NORMAL: ILoadoutConfigDatabase;
 | 
			
		||||
    SENTINEL: ILoadoutConfigDatabase;
 | 
			
		||||
    ARCHWING: ILoadoutConfigDatabase;
 | 
			
		||||
    NORMAL_PVP: ILoadoutConfigDatabase;
 | 
			
		||||
    LUNARO: ILoadoutConfigDatabase;
 | 
			
		||||
    OPERATOR: ILoadoutConfigDatabase;
 | 
			
		||||
    KDRIVE: ILoadoutConfigDatabase;
 | 
			
		||||
    DATAKNIFE: ILoadoutConfigDatabase;
 | 
			
		||||
    MECH: ILoadoutConfigDatabase;
 | 
			
		||||
    OPERATOR_ADULT: ILoadoutConfigDatabase;
 | 
			
		||||
    DRIFTER: ILoadoutConfigDatabase;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ILoadoutKey {
 | 
			
		||||
    [key: string]: ILoadoutConfig;
 | 
			
		||||
    [key: string]: ILoadoutConfigClient;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type ILoadoutConfigDocument = ILoadoutConfig & Document;
 | 
			
		||||
 | 
			
		||||
export interface ILoadoutConfig {
 | 
			
		||||
// for request and response from and to client
 | 
			
		||||
export interface ILoadoutConfigClient {
 | 
			
		||||
    ItemId: IOid;
 | 
			
		||||
    PresetIcon: string;
 | 
			
		||||
    Favorite: boolean;
 | 
			
		||||
    s: M;
 | 
			
		||||
    p: M;
 | 
			
		||||
    l: M;
 | 
			
		||||
    m: M;
 | 
			
		||||
    s: IEquipmentSelection;
 | 
			
		||||
    p: IEquipmentSelection;
 | 
			
		||||
    l: IEquipmentSelection;
 | 
			
		||||
    m: IEquipmentSelection;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface M {
 | 
			
		||||
export interface ILoadoutConfigDatabase extends Omit<ILoadoutConfigClient, "ItemId"> {
 | 
			
		||||
    _id: Types.ObjectId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IEquipmentSelection {
 | 
			
		||||
    ItemId: IOid;
 | 
			
		||||
    mod: number;
 | 
			
		||||
    cus: number;
 | 
			
		||||
@ -129,7 +124,7 @@ export interface Col {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type EquipmentCategories =
 | 
			
		||||
    | { LoadOuts: { [key in keyof ILoadout]: LoadOut } }
 | 
			
		||||
    | { LoadOuts: { [key in keyof ILoadoutRequest]: LoadOut } }
 | 
			
		||||
    | { LongGuns: Config }
 | 
			
		||||
    | { OperatorAmps: Config } // Replace 'any' with the actual type
 | 
			
		||||
    | { Pistols: Config } // Replace 'any' with the actual type
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user