🐛 fix lean not working with virtuals
This commit is contained in:
parent
e0d88a9117
commit
f48127f8a4
39
package-lock.json
generated
39
package-lock.json
generated
@ -17,6 +17,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jsonwebtoken": "^8.5.0",
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
"@types/node": "^14.14.25",
|
"@types/node": "^14.14.25",
|
||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
@ -47,6 +48,25 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/mongoose": {
|
||||||
|
"version": "5.10.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.10.4.tgz",
|
||||||
|
"integrity": "sha512-U7fNDcTcdaSGzQ3+mlSBeebiYr6eaacJi330LTLOEh8Sm6mXfuec70ag/UXkL+alFm7pfAjFqfc7jEaJEJvAHQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/mongodb": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/mongoose-lean-virtuals": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mongoose-lean-virtuals/-/mongoose-lean-virtuals-0.5.1.tgz",
|
||||||
|
"integrity": "sha512-bNk+QLjP5VZU4EsJag4xQsjLAa8CEm/SKZDyiC2kM208wIrGum6daD7j45Oqs50bWNGfqZYRuEhh8xZ17D7aEw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/mongoose": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "14.14.25",
|
"version": "14.14.25",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
|
||||||
@ -1164,6 +1184,25 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/mongoose": {
|
||||||
|
"version": "5.10.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.10.4.tgz",
|
||||||
|
"integrity": "sha512-U7fNDcTcdaSGzQ3+mlSBeebiYr6eaacJi330LTLOEh8Sm6mXfuec70ag/UXkL+alFm7pfAjFqfc7jEaJEJvAHQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/mongodb": "*",
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/mongoose-lean-virtuals": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/mongoose-lean-virtuals/-/mongoose-lean-virtuals-0.5.1.tgz",
|
||||||
|
"integrity": "sha512-bNk+QLjP5VZU4EsJag4xQsjLAa8CEm/SKZDyiC2kM208wIrGum6daD7j45Oqs50bWNGfqZYRuEhh8xZ17D7aEw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/mongoose": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "14.14.25",
|
"version": "14.14.25",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jsonwebtoken": "^8.5.0",
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
"@types/node": "^14.14.25",
|
"@types/node": "^14.14.25",
|
||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,6 @@ export * from "./models/index";
|
|||||||
export * from "./util/index";
|
export * from "./util/index";
|
||||||
|
|
||||||
import Config, { DefaultOptions } from "./util/Config";
|
import Config, { DefaultOptions } from "./util/Config";
|
||||||
import db, { MongooseCache } from "./util/Database";
|
import db, { MongooseCache, toObject } from "./util/Database";
|
||||||
|
|
||||||
export { Config, db, DefaultOptions, MongooseCache };
|
export { Config, db, DefaultOptions, MongooseCache, toObject };
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Schema, Types, Document } from "mongoose";
|
import { Schema, Types, Document } from "mongoose";
|
||||||
import db from "../util/Database";
|
import db from "../util/Database";
|
||||||
import { UserModel } from "./User";
|
import { PublicUser, UserModel } from "./User";
|
||||||
import { MemberModel } from "./Member";
|
import { MemberModel, PublicMember } from "./Member";
|
||||||
import { RoleModel } from "./Role";
|
import { Role, RoleModel } from "./Role";
|
||||||
|
import { Channel } from "./Channel";
|
||||||
|
|
||||||
export interface Message {
|
export interface Message {
|
||||||
id: string;
|
id: string;
|
||||||
@ -36,6 +37,12 @@ export interface Message {
|
|||||||
channel_id?: string;
|
channel_id?: string;
|
||||||
guild_id?: string;
|
guild_id?: string;
|
||||||
};
|
};
|
||||||
|
// mongoose virtuals:
|
||||||
|
author?: PublicUser;
|
||||||
|
member?: PublicMember;
|
||||||
|
mentions?: PublicUser[];
|
||||||
|
mention_roles?: Role[];
|
||||||
|
mention_channels?: Channel[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MessageDocument extends Document, Message {
|
export interface MessageDocument extends Document, Message {
|
||||||
@ -190,50 +197,39 @@ export const Embed = {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MessageSchema = new Schema(
|
export const MessageSchema = new Schema({
|
||||||
{
|
id: String,
|
||||||
id: String,
|
channel_id: String,
|
||||||
channel_id: String,
|
author_id: String,
|
||||||
author_id: String,
|
webhook_id: String,
|
||||||
webhook_id: String,
|
guild_id: String,
|
||||||
guild_id: String,
|
application_id: String,
|
||||||
application_id: String,
|
content: String,
|
||||||
content: String,
|
timestamp: Date,
|
||||||
timestamp: Date,
|
edited_timestamp: Date,
|
||||||
edited_timestamp: Date,
|
tts: Boolean,
|
||||||
tts: Boolean,
|
mention_everyone: Boolean,
|
||||||
mention_everyone: Boolean,
|
mention_user_ids: [String],
|
||||||
mention_user_ids: [String],
|
mention_role_ids: [String],
|
||||||
mention_role_ids: [String],
|
mention_channel_ids: [String],
|
||||||
mention_channel_ids: [String],
|
attachments: [Attachment],
|
||||||
attachments: [Attachment],
|
embeds: [Embed],
|
||||||
embeds: [Embed],
|
reactions: [Reaction],
|
||||||
reactions: [Reaction],
|
nonce: Schema.Types.Mixed, // can be a long or a string
|
||||||
nonce: Schema.Types.Mixed, // can be a long or a string
|
pinned: Boolean,
|
||||||
pinned: Boolean,
|
type: { type: Number },
|
||||||
type: { type: Number },
|
activity: {
|
||||||
activity: {
|
type: Number,
|
||||||
type: Number,
|
party_id: String,
|
||||||
party_id: String,
|
|
||||||
},
|
|
||||||
flags: Types.Long,
|
|
||||||
stickers: [],
|
|
||||||
message_reference: {
|
|
||||||
message_id: String,
|
|
||||||
channel_id: String,
|
|
||||||
guild_id: String,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
flags: Types.Long,
|
||||||
toJSON: {
|
stickers: [],
|
||||||
transform: function (doc, ret) {
|
message_reference: {
|
||||||
delete ret.mention_channel_ids;
|
message_id: String,
|
||||||
delete ret.mention_user_ids;
|
channel_id: String,
|
||||||
delete ret.mention_role_ids;
|
guild_id: String,
|
||||||
},
|
},
|
||||||
},
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
MessageSchema.virtual("author", {
|
MessageSchema.virtual("author", {
|
||||||
ref: UserModel,
|
ref: UserModel,
|
||||||
@ -270,6 +266,8 @@ MessageSchema.virtual("mention_channels", {
|
|||||||
justOne: false,
|
justOne: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
MessageSchema.set("removeResponse", ["mention_channel_ids", "mention_role_ids", "mention_user_ids", "author_id"]);
|
||||||
|
|
||||||
// TODO: missing Application Model
|
// TODO: missing Application Model
|
||||||
// MessageSchema.virtual("application", {
|
// MessageSchema.virtual("application", {
|
||||||
// ref: Application,
|
// ref: Application,
|
||||||
|
@ -1,4 +1,20 @@
|
|||||||
import mongoose from "mongoose";
|
import mongoose from "mongoose";
|
||||||
|
import { Schema } from "mongoose";
|
||||||
|
|
||||||
|
mongoose.plugin((schema: Schema, opts: any) => {
|
||||||
|
schema.set("toObject", {
|
||||||
|
virtuals: true,
|
||||||
|
versionKey: false,
|
||||||
|
transform(doc: any, ret: any) {
|
||||||
|
delete ret._id;
|
||||||
|
delete ret.__v;
|
||||||
|
const props = schema.get("removeResponse") || [];
|
||||||
|
props.forEach((prop: string) => {
|
||||||
|
delete ret[prop];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
export * from "./Ban";
|
export * from "./Ban";
|
||||||
export * from "./Channel";
|
export * from "./Channel";
|
||||||
@ -15,14 +31,3 @@ export * from "./Message";
|
|||||||
export * from "./Status";
|
export * from "./Status";
|
||||||
export * from "./VoiceState";
|
export * from "./VoiceState";
|
||||||
export * from "./Event";
|
export * from "./Event";
|
||||||
|
|
||||||
mongoose.plugin((schema: any) => {
|
|
||||||
schema.options.toJSON = {
|
|
||||||
virtuals: true,
|
|
||||||
versionKey: false,
|
|
||||||
transform(doc: any, ret: any) {
|
|
||||||
delete ret._id;
|
|
||||||
delete ret.__v;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
@ -2,6 +2,7 @@ import "./MongoBigInt";
|
|||||||
import mongoose, { Collection, Connection } from "mongoose";
|
import mongoose, { Collection, Connection } from "mongoose";
|
||||||
import { ChangeStream, ChangeEvent, Long } from "mongodb";
|
import { ChangeStream, ChangeEvent, Long } from "mongodb";
|
||||||
import EventEmitter from "events";
|
import EventEmitter from "events";
|
||||||
|
import { Document } from "mongoose";
|
||||||
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
|
||||||
|
|
||||||
console.log(`[DB] connect: ${uri}`);
|
console.log(`[DB] connect: ${uri}`);
|
||||||
@ -10,6 +11,14 @@ const connection = mongoose.createConnection(uri, { autoIndex: true, useNewUrlPa
|
|||||||
|
|
||||||
export default <Connection>connection;
|
export default <Connection>connection;
|
||||||
|
|
||||||
|
function transform<T extends Document>(document: T) {
|
||||||
|
return document.toObject({ virtuals: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
export function toObject<T extends Document>(document: T | T[]) {
|
||||||
|
return Array.isArray(document) ? document.map((x) => transform<T>(x)) : transform(document);
|
||||||
|
}
|
||||||
|
|
||||||
export interface MongooseCache {
|
export interface MongooseCache {
|
||||||
on(event: "delete", listener: (id: string) => void): this;
|
on(event: "delete", listener: (id: string) => void): this;
|
||||||
on(event: "change", listener: (data: any) => void): this;
|
on(event: "change", listener: (data: any) => void): this;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user