SpaceNinjaServer/src/models/shipModel.ts

67 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-06-05 04:16:49 +08:00
import { Schema, model } from "mongoose";
2023-06-05 00:17:01 +02:00
import { IShip } from "../types/shipTypes";
import { IOid } from "../types/commonTypes";
import { loadoutSchema } from "@/src/models/inventoryModels/loadoutModel";
2023-06-05 04:16:49 +08:00
2023-06-05 00:17:01 +02:00
const roomSchema = new Schema(
{
Name: String,
MaxCapacity: Number
},
{ _id: false }
);
const shipSchema = new Schema(
{
Rooms: [roomSchema],
Features: [String],
ContentUrlSignature: String
},
{ id: false }
);
shipSchema.virtual("ShipId").get(function () {
return { $oid: this._id.toString() } satisfies IOid;
2023-06-05 04:16:49 +08:00
});
2023-06-05 00:17:01 +02:00
shipSchema.set("toJSON", {
virtuals: true,
2023-06-05 04:16:49 +08:00
transform(_document, returnedObject) {
delete returnedObject._id;
}
});
const apartmentSchema = new Schema({
Rooms: [roomSchema],
FavouriteLoadouts: [Schema.Types.Mixed]
});
2023-06-05 00:17:01 +02:00
apartmentSchema.set("toJSON", {
transform(_document, returnedObject) {
delete returnedObject._id;
}
});
const shipDatabaseSchema = new Schema<IShip>({
2023-06-05 00:17:01 +02:00
ShipOwnerId: Schema.Types.ObjectId,
2023-06-05 04:16:49 +08:00
Ship: shipSchema,
Apartment: apartmentSchema,
LoadOutInventory: {
LoadOutPresets: {
type: Schema.Types.ObjectId,
ref: "Loadout"
}
}
2023-06-05 04:16:49 +08:00
});
shipDatabaseSchema.set("toJSON", {
transform(_document, returnedObject) {
delete returnedObject._id;
delete returnedObject.__v;
}
});
2023-06-05 00:17:01 +02:00
const Ship = model<IShip>("Ship", shipDatabaseSchema);
2023-06-05 04:16:49 +08:00
export { Ship };