2025-01-03 09:06:50 +01:00
|
|
|
import {
|
|
|
|
IGuildDatabase,
|
|
|
|
IDojoComponentDatabase,
|
|
|
|
ITechProjectDatabase,
|
2025-03-09 07:47:32 -07:00
|
|
|
IDojoDecoDatabase,
|
2025-03-10 16:40:40 -07:00
|
|
|
ILongMOTD,
|
2025-03-12 01:08:15 -07:00
|
|
|
IGuildMemberDatabase,
|
2025-03-13 10:46:08 -07:00
|
|
|
IGuildLogEntryNumber,
|
2025-03-14 02:07:08 -07:00
|
|
|
IGuildRank,
|
2025-03-16 08:16:11 -07:00
|
|
|
IGuildLogRoomChange,
|
|
|
|
IGuildLogEntryRoster,
|
2025-03-25 15:12:09 -07:00
|
|
|
IGuildLogEntryContributable,
|
2025-03-31 04:14:00 -07:00
|
|
|
IDojoLeaderboardEntry,
|
2025-04-02 04:59:21 -07:00
|
|
|
IGuildAdDatabase,
|
|
|
|
IAllianceDatabase,
|
|
|
|
IAllianceMemberDatabase
|
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-04-04 06:02:40 -07:00
|
|
|
import { pictureFrameInfoSchema } from "./personalRoomsModel";
|
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,
|
2025-04-04 06:02:40 -07:00
|
|
|
Sockets: Number,
|
2025-03-05 23:54:47 -08:00
|
|
|
RegularCredits: Number,
|
|
|
|
MiscItems: { type: [typeCountSchema], default: undefined },
|
2025-03-06 21:24:25 -08:00
|
|
|
CompletionTime: Date,
|
2025-04-04 06:02:40 -07:00
|
|
|
RushPlatinum: Number,
|
2025-04-07 05:30:00 -07:00
|
|
|
PictureFrameInfo: pictureFrameInfoSchema,
|
|
|
|
Pending: Boolean
|
2025-03-05 23:54:47 -08:00
|
|
|
});
|
|
|
|
|
2025-03-25 15:12:09 -07:00
|
|
|
const dojoLeaderboardEntrySchema = new Schema<IDojoLeaderboardEntry>(
|
|
|
|
{
|
|
|
|
s: Number,
|
|
|
|
r: Number,
|
|
|
|
n: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
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-14 02:07:08 -07:00
|
|
|
CompletionLogPending: Boolean,
|
2025-03-06 21:24:25 -08:00
|
|
|
RushPlatinum: Number,
|
2025-03-05 23:54:47 -08:00
|
|
|
DestructionTime: Date,
|
|
|
|
Decos: [dojoDecoSchema],
|
2025-03-25 15:12:09 -07:00
|
|
|
DecoCapacity: Number,
|
2025-04-07 05:30:00 -07:00
|
|
|
PaintBot: Schema.Types.ObjectId,
|
|
|
|
PendingColors: { type: [Number], default: undefined },
|
|
|
|
Colors: { type: [Number], default: undefined },
|
|
|
|
PendingLights: { type: [Number], default: undefined },
|
|
|
|
Lights: { type: [Number], default: undefined },
|
2025-04-08 03:06:06 -07:00
|
|
|
Settings: String,
|
2025-03-25 15:12:09 -07:00
|
|
|
Leaderboard: { type: [dojoLeaderboardEntrySchema], default: undefined }
|
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 }
|
|
|
|
);
|
|
|
|
|
2025-03-09 07:47:32 -07:00
|
|
|
const longMOTDSchema = new Schema<ILongMOTD>(
|
|
|
|
{
|
|
|
|
message: String,
|
2025-04-03 10:38:37 -07:00
|
|
|
authorName: String,
|
|
|
|
authorGuildName: String
|
2025-03-09 07:47:32 -07:00
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
2025-03-13 02:14:29 -07:00
|
|
|
const guildRankSchema = new Schema<IGuildRank>(
|
|
|
|
{
|
|
|
|
Name: String,
|
|
|
|
Permissions: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const defaultRanks: IGuildRank[] = [
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Creator",
|
|
|
|
Permissions: 16351
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Warlord",
|
|
|
|
Permissions: 16351
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_General",
|
|
|
|
Permissions: 4318
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Officer",
|
|
|
|
Permissions: 4314
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Leader",
|
|
|
|
Permissions: 4106
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Sage",
|
|
|
|
Permissions: 4304
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Soldier",
|
|
|
|
Permissions: 4098
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Initiate",
|
|
|
|
Permissions: 4096
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Name: "/Lotus/Language/Game/Rank_Utility",
|
|
|
|
Permissions: 4096
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
2025-03-16 08:16:11 -07:00
|
|
|
const guildLogRoomChangeSchema = new Schema<IGuildLogRoomChange>(
|
|
|
|
{
|
|
|
|
dateTime: Date,
|
|
|
|
entryType: Number,
|
|
|
|
details: String,
|
|
|
|
componentId: Types.ObjectId
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
const guildLogEntryContributableSchema = new Schema<IGuildLogEntryContributable>(
|
2025-03-12 07:59:20 -07:00
|
|
|
{
|
|
|
|
dateTime: Date,
|
|
|
|
entryType: Number,
|
|
|
|
details: String
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
2025-03-16 08:16:11 -07:00
|
|
|
const guildLogEntryRosterSchema = new Schema<IGuildLogEntryRoster>(
|
2025-03-14 02:07:08 -07:00
|
|
|
{
|
|
|
|
dateTime: Date,
|
|
|
|
entryType: Number,
|
2025-03-16 08:16:11 -07:00
|
|
|
details: String
|
2025-03-14 02:07:08 -07:00
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
2025-03-13 10:46:08 -07:00
|
|
|
const guildLogEntryNumberSchema = new Schema<IGuildLogEntryNumber>(
|
2025-03-12 01:08:15 -07:00
|
|
|
{
|
|
|
|
dateTime: Date,
|
|
|
|
entryType: Number,
|
|
|
|
details: Number
|
|
|
|
},
|
|
|
|
{ _id: false }
|
|
|
|
);
|
|
|
|
|
2024-05-16 01:34:38 +02:00
|
|
|
const guildSchema = new Schema<IGuildDatabase>(
|
|
|
|
{
|
2025-03-10 16:40:40 -07:00
|
|
|
Name: { type: String, required: true, unique: true },
|
2025-03-09 07:47:32 -07:00
|
|
|
MOTD: { type: String, default: "" },
|
|
|
|
LongMOTD: { type: longMOTDSchema, default: undefined },
|
2025-03-13 02:14:29 -07:00
|
|
|
Ranks: { type: [guildRankSchema], default: defaultRanks },
|
2025-03-15 03:21:40 -07:00
|
|
|
TradeTax: { type: Number, default: 0 },
|
2025-03-21 05:19:53 -07:00
|
|
|
Tier: { type: Number, default: 1 },
|
2025-03-31 04:14:00 -07:00
|
|
|
Emblem: { type: Boolean },
|
2025-04-03 10:39:16 -07:00
|
|
|
AutoContributeFromVault: { type: Boolean },
|
2025-04-02 04:59:21 -07:00
|
|
|
AllianceId: { type: Types.ObjectId },
|
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-03-08 01:44:30 -08:00
|
|
|
TechProjects: { type: [techProjectSchema], default: undefined },
|
2025-03-16 04:32:11 -07:00
|
|
|
ActiveDojoColorResearch: { type: String, default: "" },
|
2025-03-08 01:44:30 -08:00
|
|
|
Class: { type: Number, default: 0 },
|
|
|
|
XP: { type: Number, default: 0 },
|
|
|
|
ClaimedXP: { type: [String], default: undefined },
|
|
|
|
CeremonyClass: Number,
|
|
|
|
CeremonyContributors: { type: [Types.ObjectId], default: undefined },
|
|
|
|
CeremonyResetDate: Date,
|
2025-03-12 01:08:15 -07:00
|
|
|
CeremonyEndo: Number,
|
2025-03-14 02:07:08 -07:00
|
|
|
RoomChanges: { type: [guildLogRoomChangeSchema], default: undefined },
|
2025-03-16 08:16:11 -07:00
|
|
|
TechChanges: { type: [guildLogEntryContributableSchema], default: undefined },
|
|
|
|
RosterActivity: { type: [guildLogEntryRosterSchema], default: undefined },
|
2025-03-13 10:46:08 -07:00
|
|
|
ClassChanges: { type: [guildLogEntryNumberSchema], 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>;
|
|
|
|
};
|
|
|
|
|
2025-03-29 15:20:54 -07:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
2025-03-03 05:46:16 -08:00
|
|
|
type GuildModel = Model<IGuildDatabase, {}, GuildDocumentProps>;
|
|
|
|
|
|
|
|
export const Guild = model<IGuildDatabase, GuildModel>("Guild", guildSchema);
|
|
|
|
|
2025-03-29 15:20:54 -07:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
2025-03-03 05:46:16 -08:00
|
|
|
export type TGuildDatabaseDocument = Document<unknown, {}, IGuildDatabase> &
|
|
|
|
Omit<
|
|
|
|
IGuildDatabase & {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
} & {
|
|
|
|
__v: number;
|
|
|
|
},
|
|
|
|
keyof GuildDocumentProps
|
|
|
|
> &
|
|
|
|
GuildDocumentProps;
|
2025-03-10 16:40:40 -07:00
|
|
|
|
|
|
|
const guildMemberSchema = new Schema<IGuildMemberDatabase>({
|
|
|
|
accountId: Types.ObjectId,
|
|
|
|
guildId: Types.ObjectId,
|
|
|
|
status: { type: Number, required: true },
|
2025-03-27 03:33:08 -07:00
|
|
|
rank: { type: Number, default: 7 },
|
2025-04-01 02:28:24 -07:00
|
|
|
RequestMsg: String,
|
|
|
|
RequestExpiry: Date,
|
2025-03-27 03:33:08 -07:00
|
|
|
RegularCreditsContributed: Number,
|
|
|
|
PremiumCreditsContributed: Number,
|
|
|
|
MiscItemsContributed: { type: [typeCountSchema], default: undefined },
|
|
|
|
ShipDecorationsContributed: { type: [typeCountSchema], default: undefined }
|
2025-03-10 16:40:40 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
guildMemberSchema.index({ accountId: 1, guildId: 1 }, { unique: true });
|
2025-04-01 02:28:24 -07:00
|
|
|
guildMemberSchema.index({ RequestExpiry: 1 }, { expireAfterSeconds: 0 });
|
2025-03-10 16:40:40 -07:00
|
|
|
|
|
|
|
export const GuildMember = model<IGuildMemberDatabase>("GuildMember", guildMemberSchema);
|
2025-03-31 04:14:00 -07:00
|
|
|
|
2025-04-05 06:51:23 -07:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
|
|
export type TGuildMemberDatabaseDocument = Document<unknown, {}, IGuildMemberDatabase> &
|
|
|
|
IGuildMemberDatabase & {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
__v: number;
|
|
|
|
};
|
|
|
|
|
2025-03-31 04:14:00 -07:00
|
|
|
const guildAdSchema = new Schema<IGuildAdDatabase>({
|
|
|
|
GuildId: { type: Schema.Types.ObjectId, required: true },
|
|
|
|
Emblem: Boolean,
|
|
|
|
Expiry: { type: Date, required: true },
|
|
|
|
Features: { type: Number, required: true },
|
|
|
|
GuildName: { type: String, required: true },
|
|
|
|
MemberCount: { type: Number, required: true },
|
|
|
|
RecruitMsg: { type: String, required: true },
|
|
|
|
Tier: { type: Number, required: true }
|
|
|
|
});
|
|
|
|
|
|
|
|
guildAdSchema.index({ GuildId: 1 }, { unique: true });
|
|
|
|
guildAdSchema.index({ Expiry: 1 }, { expireAfterSeconds: 0 });
|
|
|
|
|
|
|
|
export const GuildAd = model<IGuildAdDatabase>("GuildAd", guildAdSchema);
|
2025-04-02 04:59:21 -07:00
|
|
|
|
|
|
|
const allianceSchema = new Schema<IAllianceDatabase>({
|
|
|
|
Name: String,
|
|
|
|
MOTD: longMOTDSchema,
|
|
|
|
LongMOTD: longMOTDSchema,
|
2025-04-02 13:26:44 -07:00
|
|
|
Emblem: Boolean,
|
|
|
|
VaultRegularCredits: Number
|
2025-04-02 04:59:21 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
allianceSchema.index({ Name: 1 }, { unique: true });
|
|
|
|
|
|
|
|
export const Alliance = model<IAllianceDatabase>("Alliance", allianceSchema);
|
|
|
|
|
|
|
|
const allianceMemberSchema = new Schema<IAllianceMemberDatabase>({
|
2025-04-03 19:04:21 -07:00
|
|
|
allianceId: { type: Schema.Types.ObjectId, required: true },
|
|
|
|
guildId: { type: Schema.Types.ObjectId, required: true },
|
|
|
|
Pending: { type: Boolean, required: true },
|
|
|
|
Permissions: { type: Number, required: true }
|
2025-04-02 04:59:21 -07:00
|
|
|
});
|
|
|
|
|
2025-04-02 18:51:15 +02:00
|
|
|
allianceMemberSchema.index({ allianceId: 1, guildId: 1 }, { unique: true });
|
2025-04-02 04:59:21 -07:00
|
|
|
|
|
|
|
export const AllianceMember = model<IAllianceMemberDatabase>("AllianceMember", allianceMemberSchema);
|