2025-01-03 09:06:50 +01:00
|
|
|
import {
|
|
|
|
IGuildDatabase,
|
|
|
|
IDojoComponentDatabase,
|
|
|
|
ITechProjectDatabase,
|
2025-03-05 23:54:47 -08:00
|
|
|
ITechProjectClient,
|
|
|
|
IDojoDecoDatabase
|
2025-01-03 09:06:50 +01:00
|
|
|
} from "@/src/types/guildTypes";
|
2025-03-03 05:46:16 -08:00
|
|
|
import { Document, Model, model, Schema, Types } from "mongoose";
|
2025-03-06 21:24:25 -08:00
|
|
|
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
|
2025-01-03 09:06:50 +01:00
|
|
|
import { toMongoDate } from "../helpers/inventoryHelpers";
|
2024-05-04 15:42:25 +02:00
|
|
|
|
2025-03-05 23:54:47 -08:00
|
|
|
const dojoDecoSchema = new Schema<IDojoDecoDatabase>({
|
|
|
|
Type: String,
|
|
|
|
Pos: [Number],
|
|
|
|
Rot: [Number],
|
|
|
|
Name: String,
|
|
|
|
RegularCredits: Number,
|
|
|
|
MiscItems: { type: [typeCountSchema], default: undefined },
|
2025-03-06 21:24:25 -08:00
|
|
|
CompletionTime: Date,
|
|
|
|
RushPlatinum: Number
|
2025-03-05 23:54:47 -08:00
|
|
|
});
|
|
|
|
|
2024-05-16 01:34:38 +02:00
|
|
|
const dojoComponentSchema = new Schema<IDojoComponentDatabase>({
|
|
|
|
pf: { type: String, required: true },
|
|
|
|
ppf: String,
|
2024-06-06 16:55:37 +02:00
|
|
|
pi: Schema.Types.ObjectId,
|
|
|
|
op: String,
|
|
|
|
pp: String,
|
2025-02-11 20:11:31 -08:00
|
|
|
Name: String,
|
|
|
|
Message: String,
|
2025-03-03 12:48:39 -08:00
|
|
|
RegularCredits: Number,
|
|
|
|
MiscItems: { type: [typeCountSchema], default: undefined },
|
2025-03-05 23:54:47 -08:00
|
|
|
CompletionTime: Date,
|
2025-03-06 21:24:25 -08:00
|
|
|
RushPlatinum: Number,
|
2025-03-05 23:54:47 -08:00
|
|
|
DestructionTime: Date,
|
|
|
|
Decos: [dojoDecoSchema],
|
|
|
|
DecoCapacity: Number
|
2024-05-04 15:42:25 +02:00
|
|
|
});
|
|
|
|
|
2025-01-03 09:06:50 +01:00
|
|
|
const techProjectSchema = new Schema<ITechProjectDatabase>(
|
|
|
|
{
|
|
|
|
ItemType: String,
|
|
|
|
ReqCredits: Number,
|
|
|
|
ReqItems: [typeCountSchema],
|
|
|
|
State: Number,
|
|
|
|
CompletionDate: Date
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
techProjectSchema.set("toJSON", {
|
|
|
|
virtuals: true,
|
|
|
|
transform(_doc, obj) {
|
|
|
|
const db = obj as ITechProjectDatabase;
|
|
|
|
const client = obj as ITechProjectClient;
|
|
|
|
if (db.CompletionDate) {
|
|
|
|
client.CompletionDate = toMongoDate(db.CompletionDate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2024-05-16 01:34:38 +02:00
|
|
|
const guildSchema = new Schema<IGuildDatabase>(
|
|
|
|
{
|
|
|
|
Name: { type: String, required: true },
|
2025-03-03 05:46:16 -08:00
|
|
|
DojoComponents: { type: [dojoComponentSchema], default: [] },
|
2024-12-23 23:12:21 +01:00
|
|
|
DojoCapacity: { type: Number, default: 100 },
|
2025-01-03 09:06:50 +01:00
|
|
|
DojoEnergy: { type: Number, default: 5 },
|
2025-03-06 21:24:25 -08:00
|
|
|
VaultRegularCredits: Number,
|
|
|
|
VaultPremiumCredits: Number,
|
|
|
|
VaultMiscItems: { type: [typeCountSchema], default: undefined },
|
|
|
|
VaultShipDecorations: { type: [typeCountSchema], default: undefined },
|
|
|
|
VaultFusionTreasures: { type: [fusionTreasuresSchema], default: undefined },
|
2025-01-03 09:06:50 +01:00
|
|
|
TechProjects: { type: [techProjectSchema], default: undefined }
|
2024-05-16 01:34:38 +02:00
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
2024-05-04 15:42:25 +02:00
|
|
|
|
2025-03-03 05:46:16 -08:00
|
|
|
type GuildDocumentProps = {
|
|
|
|
DojoComponents: Types.DocumentArray<IDojoComponentDatabase>;
|
|
|
|
};
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
|
|
type GuildModel = Model<IGuildDatabase, {}, GuildDocumentProps>;
|
|
|
|
|
|
|
|
export const Guild = model<IGuildDatabase, GuildModel>("Guild", guildSchema);
|
|
|
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
|
|
export type TGuildDatabaseDocument = Document<unknown, {}, IGuildDatabase> &
|
|
|
|
Omit<
|
|
|
|
IGuildDatabase & {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
} & {
|
|
|
|
__v: number;
|
|
|
|
},
|
|
|
|
keyof GuildDocumentProps
|
|
|
|
> &
|
|
|
|
GuildDocumentProps;
|