This commit is contained in:
Ordis 2023-12-03 00:49:52 +01:00
parent 0a6a76c8f5
commit f271898ced
5 changed files with 149 additions and 111 deletions

View File

@ -39,6 +39,15 @@ app.use("/stats", statsRouter);
app.post("/test", async (req, _res) => { app.post("/test", async (req, _res) => {
console.log("test hit", req.body); console.log("test hit", req.body);
const newLoadout = new Loadout({}); 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(); await newLoadout.save();
_res.end(); _res.end();
}); });

View File

@ -4,17 +4,24 @@ import util from "util";
import { import {
EquipmentCategories, EquipmentCategories,
IConfigEntry, IConfigEntry,
ILoadout, ILoadoutRequest,
ILoadoutKey, ILoadoutKey,
ISaveLoadoutRequest, ISaveLoadoutRequest,
ISaveLoadoutRequestNoUpgradeVer ISaveLoadoutRequestNoUpgradeVer,
ILoadoutConfigDatabase
} from "@/src/types/saveLoadoutTypes"; } from "@/src/types/saveLoadoutTypes";
import { LoadoutModel } from "@/src/models/inventoryModels/loadoutModel";
import { Types } from "mongoose";
export const isEmptyObject = (obj: unknown): boolean => { export const isEmptyObject = (obj: unknown): boolean => {
return Boolean(obj && Object.keys(obj).length === 0 && obj.constructor === Object); 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)) { for (const [_equipmentName, _equipment] of Object.entries(equipmentChanges)) {
const equipment = _equipment as ISaveLoadoutRequestNoUpgradeVer[keyof ISaveLoadoutRequestNoUpgradeVer]; const equipment = _equipment as ISaveLoadoutRequestNoUpgradeVer[keyof ISaveLoadoutRequestNoUpgradeVer];
const equipmentName = _equipmentName as keyof ISaveLoadoutRequestNoUpgradeVer; const equipmentName = _equipmentName as keyof ISaveLoadoutRequestNoUpgradeVer;
@ -28,23 +35,59 @@ export const handleInventoryItemConfigChange = (equipmentChanges: ISaveLoadoutRe
case "LoadOuts": { case "LoadOuts": {
console.log("loadout received"); 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 loadout = _loadout as ILoadoutKey;
const loadoutName = _loadoutName as keyof ILoadout;
console.log(_loadoutName, loadout); //console.log("key", loadoutSlot, "value", loadout);
if (isEmptyObject(loadout)) { if (isEmptyObject(loadout)) {
continue; continue;
} }
// all non-empty entries are one loadout slot // all non-empty entries are one loadout slot
for (const [_loadoutId, _loadoutConfig] of Object.entries(loadout)) { for (const [loadoutId, loadoutConfig] of Object.entries(loadout)) {
console.log(loadout[_loadoutId].s); // 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; break;
} }
case "LongGuns": { case "LongGuns": {
console.log("longgun received");
console.log(equipmentName, equipment);
const longGun = equipment as IConfigEntry; const longGun = equipment as IConfigEntry;
// longGun["key"].PvpUpgrades; // longGun["key"].PvpUpgrades;
break; break;

View File

@ -152,7 +152,10 @@ suitConfigSchema.set("toJSON", {
const suitSchema = new Schema<ISuitDatabase>({ const suitSchema = new Schema<ISuitDatabase>({
ItemType: String, ItemType: String,
Configs: [suitConfigSchema], Configs: {
type: [suitConfigSchema],
default: [{}, {}, {}]
},
UpgradeVer: Number, UpgradeVer: Number,
XP: Number, XP: Number,
InfestationDate: Date, InfestationDate: Date,

View File

@ -1,67 +1,43 @@
import { IOid } from "@/src/types/commonTypes"; 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"; 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 $oid: String
}); },
{
_id: false
}
);
//create a mongoose schema based on interface M //create a mongoose schema based on interface M
const modSchema = new Schema<M>({ const EquipmentSelectionSchema = new Schema<IEquipmentSelection>(
{
ItemId: { ItemId: {
type: oidSchema, type: oidSchema,
default: { $oid: "000000000000000000000000" } default: { $oid: "000000000000000000000000" }
}, },
mod: Number, mod: Number,
cus: Number cus: Number
}); },
//default initialization for
const loadoutConfigSchema = new Schema<ILoadoutConfig>(
{ {
_id: false
}
);
const loadoutConfigSchema = new Schema<ILoadoutConfigDatabase>({
PresetIcon: String, PresetIcon: String,
Favorite: Boolean, Favorite: Boolean,
s: {}, s: EquipmentSelectionSchema,
p: {}, p: EquipmentSelectionSchema,
l: {}, l: EquipmentSelectionSchema,
m: {} m: EquipmentSelectionSchema
}, });
{
virtuals: { loadoutConfigSchema.virtual("ItemId").get(function (): string {
ItemId: {
get() {
return this._id.toString(); 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", { loadoutConfigSchema.set("toJSON", {
virtuals: true, virtuals: true,
@ -85,19 +61,31 @@ const loadoutSchema = new Schema<ILoadoutDatabase, loadoutModelType>({
DRIFTER: [loadoutConfigSchema] 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 //create database typefor ILoadoutConfig
type loadoutDocumentProps = { type loadoutDocumentProps = {
NORMAL: Types.DocumentArray<ILoadoutConfig>; NORMAL: Types.DocumentArray<ILoadoutConfigDatabase>;
SENTINEL: Types.DocumentArray<ILoadoutConfig>; SENTINEL: Types.DocumentArray<ILoadoutConfigDatabase>;
ARCHWING: Types.DocumentArray<ILoadoutConfig>; ARCHWING: Types.DocumentArray<ILoadoutConfigDatabase>;
NORMAL_PVP: Types.DocumentArray<ILoadoutConfig>; NORMAL_PVP: Types.DocumentArray<ILoadoutConfigDatabase>;
LUNARO: Types.DocumentArray<ILoadoutConfig>; LUNARO: Types.DocumentArray<ILoadoutConfigDatabase>;
OPERATOR: Types.DocumentArray<ILoadoutConfig>; OPERATOR: Types.DocumentArray<ILoadoutConfigDatabase>;
KDRIVE: Types.DocumentArray<ILoadoutConfig>; KDRIVE: Types.DocumentArray<ILoadoutConfigDatabase>;
DATAKNIFE: Types.DocumentArray<ILoadoutConfig>; DATAKNIFE: Types.DocumentArray<ILoadoutConfigDatabase>;
MECH: Types.DocumentArray<ILoadoutConfig>; MECH: Types.DocumentArray<ILoadoutConfigDatabase>;
OPERATOR_ADULT: Types.DocumentArray<ILoadoutConfig>; OPERATOR_ADULT: Types.DocumentArray<ILoadoutConfigDatabase>;
DRIFTER: Types.DocumentArray<ILoadoutConfig>; DRIFTER: Types.DocumentArray<ILoadoutConfigDatabase>;
}; };
type loadoutModelType = Model<ILoadoutDatabase, {}, loadoutDocumentProps>; type loadoutModelType = Model<ILoadoutDatabase, {}, loadoutDocumentProps>;

View File

@ -1,8 +1,8 @@
import { IOid } from "@/src/types/commonTypes"; import { IOid } from "@/src/types/commonTypes";
import { Document, Mongoose } from "mongoose"; import { Document, Mongoose, Types } from "mongoose";
export interface ISaveLoadoutRequest { export interface ISaveLoadoutRequest {
LoadOuts: ILoadout; LoadOuts: ILoadoutRequest;
LongGuns: IConfigEntry; LongGuns: IConfigEntry;
OperatorAmps: IConfigEntry; OperatorAmps: IConfigEntry;
Pistols: IConfigEntry; Pistols: IConfigEntry;
@ -36,51 +36,46 @@ export interface IConfigEntry {
[key: string]: Config; [key: string]: Config;
} }
export interface ILoadout { export interface ILoadoutRequest extends Omit<ILoadoutDatabase, "_id"> {}
NORMAL: ILoadoutKey;
SENTINEL: ILoadoutKey; export interface ILoadoutResponse extends ILoadoutDatabase {
ARCHWING: ILoadoutKey; ItemId: IOid;
NORMAL_PVP: ILoadoutKey;
LUNARO: ILoadoutKey;
OPERATOR: ILoadoutKey;
KDRIVE: ILoadoutKey;
DATAKNIFE: ILoadoutKey;
MECH: ILoadoutKey;
OPERATOR_ADULT: ILoadoutKey;
DRIFTER: ILoadoutKey;
} }
export interface ILoadoutDatabase { export interface ILoadoutDatabase {
NORMAL: ILoadoutConfig; NORMAL: ILoadoutConfigDatabase;
SENTINEL: ILoadoutConfig; SENTINEL: ILoadoutConfigDatabase;
ARCHWING: ILoadoutConfig; ARCHWING: ILoadoutConfigDatabase;
NORMAL_PVP: ILoadoutConfig; NORMAL_PVP: ILoadoutConfigDatabase;
LUNARO: ILoadoutConfig; LUNARO: ILoadoutConfigDatabase;
OPERATOR: ILoadoutConfig; OPERATOR: ILoadoutConfigDatabase;
KDRIVE: ILoadoutConfig; KDRIVE: ILoadoutConfigDatabase;
DATAKNIFE: ILoadoutConfig; DATAKNIFE: ILoadoutConfigDatabase;
MECH: ILoadoutConfig; MECH: ILoadoutConfigDatabase;
OPERATOR_ADULT: ILoadoutConfig; OPERATOR_ADULT: ILoadoutConfigDatabase;
DRIFTER: ILoadoutConfig; DRIFTER: ILoadoutConfigDatabase;
} }
export interface ILoadoutKey { export interface ILoadoutKey {
[key: string]: ILoadoutConfig; [key: string]: ILoadoutConfigClient;
} }
export type ILoadoutConfigDocument = ILoadoutConfig & Document; // for request and response from and to client
export interface ILoadoutConfigClient {
export interface ILoadoutConfig {
ItemId: IOid; ItemId: IOid;
PresetIcon: string; PresetIcon: string;
Favorite: boolean; Favorite: boolean;
s: M; s: IEquipmentSelection;
p: M; p: IEquipmentSelection;
l: M; l: IEquipmentSelection;
m: M; m: IEquipmentSelection;
} }
export interface M { export interface ILoadoutConfigDatabase extends Omit<ILoadoutConfigClient, "ItemId"> {
_id: Types.ObjectId;
}
export interface IEquipmentSelection {
ItemId: IOid; ItemId: IOid;
mod: number; mod: number;
cus: number; cus: number;
@ -129,7 +124,7 @@ export interface Col {
} }
export type EquipmentCategories = export type EquipmentCategories =
| { LoadOuts: { [key in keyof ILoadout]: LoadOut } } | { LoadOuts: { [key in keyof ILoadoutRequest]: LoadOut } }
| { LongGuns: Config } | { LongGuns: Config }
| { OperatorAmps: Config } // Replace 'any' with the actual type | { OperatorAmps: Config } // Replace 'any' with the actual type
| { Pistols: Config } // Replace 'any' with the actual type | { Pistols: Config } // Replace 'any' with the actual type