🐛 fix lean not working with virtuals
This commit is contained in:
parent
f5180084ff
commit
b32beb0b9c
@ -7,21 +7,21 @@ import { emitEvent } from "../../../util/Event";
|
|||||||
|
|
||||||
import { InviteCreateSchema } from "../../../schema/Invite";
|
import { InviteCreateSchema } from "../../../schema/Invite";
|
||||||
|
|
||||||
import { getPermission, ChannelModel, InviteModel, InviteCreateEvent } from "fosscord-server-util";
|
import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject } from "fosscord-server-util";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
router.post("/", check(InviteCreateSchema), async (req: Request, res: Response) => {
|
router.post("/", check(InviteCreateSchema), async (req: Request, res: Response) => {
|
||||||
const usID = req.user_id;
|
const { user_id } = req;
|
||||||
const chID = req.params.channel_id;
|
const { channel_id } = req.params;
|
||||||
const channel = await ChannelModel.findOne({ id: chID }).exec();
|
const channel = await ChannelModel.findOne({ id: channel_id }).exec();
|
||||||
|
|
||||||
if (!channel || !channel.guild_id) {
|
if (!channel || !channel.guild_id) {
|
||||||
throw new HTTPError("This channel doesn't exist", 404);
|
throw new HTTPError("This channel doesn't exist", 404);
|
||||||
}
|
}
|
||||||
const { guild_id: guID } = channel;
|
const { guild_id } = channel;
|
||||||
|
|
||||||
const permission = await getPermission(usID, guID);
|
const permission = await getPermission(user_id, guild_id);
|
||||||
|
|
||||||
if (!permission.has("CREATE_INSTANT_INVITE")) {
|
if (!permission.has("CREATE_INSTANT_INVITE")) {
|
||||||
throw new HTTPError("You aren't authorised to access this endpoint", 401);
|
throw new HTTPError("You aren't authorised to access this endpoint", 401);
|
||||||
@ -34,34 +34,35 @@ router.post("/", check(InviteCreateSchema), async (req: Request, res: Response)
|
|||||||
max_uses: req.body.max_uses,
|
max_uses: req.body.max_uses,
|
||||||
max_age: req.body.max_age,
|
max_age: req.body.max_age,
|
||||||
created_at: new Date(),
|
created_at: new Date(),
|
||||||
guild_id: guID,
|
guild_id,
|
||||||
channel_id: chID,
|
channel_id: channel_id,
|
||||||
inviter_id: usID,
|
inviter_id: user_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
await new InviteModel(invite).save();
|
await new InviteModel(invite).save();
|
||||||
|
|
||||||
await emitEvent({ event: "INVITE_CREATE", data: invite } as InviteCreateEvent);
|
await emitEvent({ event: "INVITE_CREATE", data: invite, guild_id } as InviteCreateEvent);
|
||||||
res.status(201).send(invite);
|
res.status(201).send(invite);
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/", async (req: Request, res: Response) => {
|
router.get("/", async (req: Request, res: Response) => {
|
||||||
const usID = req.user_id;
|
const { user_id } = req;
|
||||||
const chID = req.params.channel_id;
|
const { channel_id } = req.params;
|
||||||
const channel = await ChannelModel.findOne({ id: chID }).exec();
|
const channel = await ChannelModel.findOne({ id: channel_id }).exec();
|
||||||
|
|
||||||
if (!channel || !channel.guild_id) {
|
if (!channel || !channel.guild_id) {
|
||||||
throw new HTTPError("This channel doesn't exist", 404);
|
throw new HTTPError("This channel doesn't exist", 404);
|
||||||
}
|
}
|
||||||
const { guild_id: guID } = channel;
|
const { guild_id } = channel;
|
||||||
const permission = await getPermission(usID, guID);
|
const permission = await getPermission(user_id, guild_id);
|
||||||
|
|
||||||
if (!permission.has("MANAGE_CHANNELS")) {
|
if (!permission.has("MANAGE_CHANNELS")) {
|
||||||
throw new HTTPError("You aren't authorised to access this endpoint", 401);
|
throw new HTTPError("You aren't authorised to access this endpoint", 401);
|
||||||
}
|
}
|
||||||
|
|
||||||
const invites = await InviteModel.find({ guild_id: guID }).lean().exec();
|
const invites = await InviteModel.find({ guild_id }).exec();
|
||||||
res.status(200).send(invites);
|
|
||||||
|
res.status(200).send(toObject(invites));
|
||||||
});
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
@ -1,11 +1,22 @@
|
|||||||
import { Router } from "express";
|
import { Router } from "express";
|
||||||
import { ChannelModel, ChannelType, getPermission, Message, MessageCreateEvent, MessageModel, Snowflake } from "fosscord-server-util";
|
import {
|
||||||
|
ChannelModel,
|
||||||
|
ChannelType,
|
||||||
|
getPermission,
|
||||||
|
Message,
|
||||||
|
MessageCreateEvent,
|
||||||
|
MessageDocument,
|
||||||
|
MessageModel,
|
||||||
|
Snowflake,
|
||||||
|
toObject,
|
||||||
|
} from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { MessageCreateSchema } from "../../../../schema/Message";
|
import { MessageCreateSchema } from "../../../../schema/Message";
|
||||||
import { check, instanceOf, Length } from "../../../../util/instanceOf";
|
import { check, instanceOf, Length } from "../../../../util/instanceOf";
|
||||||
import { PublicUserProjection } from "../../../../util/User";
|
import { PublicUserProjection } from "../../../../util/User";
|
||||||
import multer from "multer";
|
import multer from "multer";
|
||||||
import { emitEvent } from "../../../../util/Event";
|
import { emitEvent } from "../../../../util/Event";
|
||||||
|
import { Query } from "mongoose";
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
@ -57,7 +68,7 @@ router.get("/", async (req, res) => {
|
|||||||
if (!channel.recipients.includes(req.user_id)) throw new HTTPError("You don't have permission to view this channel", 401);
|
if (!channel.recipients.includes(req.user_id)) throw new HTTPError("You don't have permission to view this channel", 401);
|
||||||
}
|
}
|
||||||
|
|
||||||
var query: any;
|
var query: Query<MessageDocument[], MessageDocument, {}>;
|
||||||
if (after) query = MessageModel.find({ channel_id, id: { $gt: after } });
|
if (after) query = MessageModel.find({ channel_id, id: { $gt: after } });
|
||||||
else if (before) query = MessageModel.find({ channel_id, id: { $lt: before } });
|
else if (before) query = MessageModel.find({ channel_id, id: { $lt: before } });
|
||||||
else if (around)
|
else if (around)
|
||||||
@ -76,10 +87,9 @@ router.get("/", async (req, res) => {
|
|||||||
.populate({ path: "mention_channels", select: { id: true, guild_id: true, type: true, name: true } })
|
.populate({ path: "mention_channels", select: { id: true, guild_id: true, type: true, name: true } })
|
||||||
.populate("mention_roles")
|
.populate("mention_roles")
|
||||||
// .populate({ path: "member", select: PublicMemberProjection })
|
// .populate({ path: "member", select: PublicMemberProjection })
|
||||||
.lean()
|
|
||||||
.exec();
|
.exec();
|
||||||
|
|
||||||
return res.json(messages);
|
return res.json(toObject(messages));
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: config max upload size
|
// TODO: config max upload size
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel } from "fosscord-server-util";
|
import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel, toObject } from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { getIpAdress } from "../../../middlewares/GlobalRateLimit";
|
import { getIpAdress } from "../../../middlewares/GlobalRateLimit";
|
||||||
import { BanCreateSchema } from "../../../schema/Ban";
|
import { BanCreateSchema } from "../../../schema/Ban";
|
||||||
@ -16,8 +16,8 @@ router.get("/", async (req: Request, res: Response) => {
|
|||||||
const guild = await GuildModel.findOne({ id: guild_id }).exec();
|
const guild = await GuildModel.findOne({ id: guild_id }).exec();
|
||||||
if (!guild) throw new HTTPError("Guild not found", 404);
|
if (!guild) throw new HTTPError("Guild not found", 404);
|
||||||
|
|
||||||
var bans = await BanModel.find({ guild_id: guild_id }).lean().exec();
|
var bans = await BanModel.find({ guild_id: guild_id }).exec();
|
||||||
return res.json(bans);
|
return res.json(toObject(bans));
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/:user", async (req: Request, res: Response) => {
|
router.get("/:user", async (req: Request, res: Response) => {
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
import { Router } from "express";
|
import { Router } from "express";
|
||||||
import { ChannelModel, ChannelType, GuildModel, Snowflake } from "fosscord-server-util";
|
import { ChannelCreateEvent, ChannelModel, ChannelType, GuildModel, Snowflake, toObject } from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { ChannelModifySchema } from "../../../schema/Channel";
|
import { ChannelModifySchema } from "../../../schema/Channel";
|
||||||
|
import { emitEvent } from "../../../util/Event";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.get("/", async (req, res) => {
|
router.get("/", async (req, res) => {
|
||||||
const guild_id = (req.params.id);
|
const guild_id = req.params.id;
|
||||||
const channels = await ChannelModel.find({ guild_id }).lean().exec();
|
const channels = await ChannelModel.find({ guild_id }).exec();
|
||||||
|
|
||||||
res.json(channels);
|
res.json(toObject(channels));
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post("/", check(ChannelModifySchema), async (req, res) => {
|
router.post("/", check(ChannelModifySchema), async (req, res) => {
|
||||||
const guild_id = (req.params.id);
|
const guild_id = req.params.id;
|
||||||
const body = req.body as ChannelModifySchema;
|
const body = req.body as ChannelModifySchema;
|
||||||
if (!body.permission_overwrites) body.permission_overwrites = [];
|
if (!body.permission_overwrites) body.permission_overwrites = [];
|
||||||
if (!body.topic) body.topic = "";
|
if (!body.topic) body.topic = "";
|
||||||
@ -45,6 +46,8 @@ router.post("/", check(ChannelModifySchema), async (req, res) => {
|
|||||||
};
|
};
|
||||||
await new ChannelModel(channel).save();
|
await new ChannelModel(channel).save();
|
||||||
|
|
||||||
|
await emitEvent({ event: "CHANNEL_CREATE", data: channel, guild_id } as ChannelCreateEvent);
|
||||||
|
|
||||||
res.json(channel);
|
res.json(channel);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { GuildModel, MemberModel } from "fosscord-server-util";
|
import { GuildModel, MemberModel, toObject } from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { instanceOf, Length } from "../../../util/instanceOf";
|
import { instanceOf, Length } from "../../../util/instanceOf";
|
||||||
import { PublicMemberProjection } from "../../../util/Member";
|
import { PublicMemberProjection } from "../../../util/Member";
|
||||||
@ -32,10 +32,9 @@ router.get("/", async (req: Request, res: Response) => {
|
|||||||
var members = await MemberModel.find({ guild_id, ...query }, PublicMemberProjection)
|
var members = await MemberModel.find({ guild_id, ...query }, PublicMemberProjection)
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.populate({ path: "user", select: PublicUserProjection })
|
.populate({ path: "user", select: PublicUserProjection })
|
||||||
.lean()
|
|
||||||
.exec();
|
.exec();
|
||||||
|
|
||||||
return res.json(members);
|
return res.json(toObject(members));
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/:member", async (req: Request, res: Response) => {
|
router.get("/:member", async (req: Request, res: Response) => {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent } from "fosscord-server-util";
|
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
import { emitEvent } from "../../../util/Event";
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
@ -11,15 +11,13 @@ router.get("/", async (req: Request, res: Response) => {
|
|||||||
if (!user) throw new HTTPError("User not found", 404);
|
if (!user) throw new HTTPError("User not found", 404);
|
||||||
|
|
||||||
var guildIDs = user.guilds || [];
|
var guildIDs = user.guilds || [];
|
||||||
var guild = await GuildModel.find({ id: { $in: guildIDs } })
|
var guild = await GuildModel.find({ id: { $in: guildIDs } }).exec();
|
||||||
.lean()
|
res.json(toObject(guild));
|
||||||
.exec();
|
|
||||||
res.json(guild);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// user send to leave a certain guild
|
// user send to leave a certain guild
|
||||||
router.delete("/:id", async (req: Request, res: Response) => {
|
router.delete("/:id", async (req: Request, res: Response) => {
|
||||||
const guildID = (req.params.id);
|
const guildID = req.params.id;
|
||||||
const guild = await GuildModel.findOne({ id: guildID }).exec();
|
const guild = await GuildModel.findOne({ id: guildID }).exec();
|
||||||
|
|
||||||
if (!guild) throw new HTTPError("Guild doesn't exist", 404);
|
if (!guild) throw new HTTPError("Guild doesn't exist", 404);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { UserModel } from "fosscord-server-util";
|
import { toObject, UserModel } from "fosscord-server-util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
|
|
||||||
export const PublicUserProjection = {
|
export const PublicUserProjection = {
|
||||||
@ -16,9 +16,7 @@ export async function getPublicUser(user_id: string, additional_fields?: any) {
|
|||||||
...PublicUserProjection,
|
...PublicUserProjection,
|
||||||
...additional_fields,
|
...additional_fields,
|
||||||
}
|
}
|
||||||
)
|
).exec();
|
||||||
.lean()
|
|
||||||
.exec();
|
|
||||||
if (!user) throw new HTTPError("User not found", 404);
|
if (!user) throw new HTTPError("User not found", 404);
|
||||||
return user;
|
return toObject(user);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user