diff --git a/src/Server.ts b/src/Server.ts
index c7c52c1f..c7f36233 100644
--- a/src/Server.ts
+++ b/src/Server.ts
@@ -12,8 +12,13 @@ import { ErrorHandler } from "./middlewares/ErrorHandler";
import { BodyParser } from "./middlewares/BodyParser";
import { Router } from "express";
import fetch from "node-fetch";
+import mongoose from "mongoose";
-export interface FosscordServerOptions extends ServerOptions {}
+// this will return the new updated document for findOneAndUpdate
+mongoose.set('returnOriginal', false); // https://mongoosejs.com/docs/api/model.html#model_Model.findOneAndUpdate
+
+
+export interface FosscordServerOptions extends ServerOptions { }
declare global {
namespace Express {
diff --git a/src/global.d.ts b/src/global.d.ts
new file mode 100644
index 00000000..3eb70f44
--- /dev/null
+++ b/src/global.d.ts
@@ -0,0 +1,8 @@
+declare global {
+ namespace Express {
+ interface Request {
+ user_id: any;
+ token: any;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/channels/#channel_id/index.ts b/src/routes/channels/#channel_id/index.ts
index f6970df3..730c1a67 100644
--- a/src/routes/channels/#channel_id/index.ts
+++ b/src/routes/channels/#channel_id/index.ts
@@ -1,30 +1,57 @@
-import { ChannelModel, getPermission, toObject } from "@fosscord/server-util";
+import { ChannelDeleteEvent, ChannelModel, ChannelUpdateEvent, getPermission, toObject } from "@fosscord/server-util";
import { Router } from "express";
import { HTTPError } from "lambert-server";
+import { ChannelModifySchema } from "../../../schema/Channel";
+import { emitEvent } from "../../../util/Event";
+import { check } from "../../../util/instanceOf";
const router: Router = Router();
// TODO: delete channel
// TODO: Get channel
-router.delete("/", async(req,res)=>{
- const {channel_id} = req.params
+router.delete("/", async (req, res) => {
+ const { channel_id } = req.params
const channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec();
if (!channel) throw new HTTPError("Channel not found", 404);
- if (channel.guild_id) {
- const permission = await getPermission(req.user_id, channel.guild_id)
- permission.hasThrow("MANAGE_CHANNELS")
-
- // TODO Channel Update Gateway event will fire for each of them
- await ChannelModel.updateMany({parent_id: channel_id}, {$set: {channel_id: null}}).exec()
-
- await ChannelModel.deleteOne({id: channel_id})
- }
-
+ const permission = await getPermission(req.user_id, channel.guild_id)
+ permission.hasThrow("MANAGE_CHANNELS")
+
+ // TODO Channel Update Gateway event will fire for each of them
+
+
+ await ChannelModel.deleteOne({ id: channel_id })
+
// TODO: Dm channel "close" not delete
-
+
const data = toObject(channel);
//TODO: Reload channel list if request successful
res.send(data)
})
+// should be good now
+
+router.patch("/", check(ChannelModifySchema), async (req, res) => {
+ var payload = req.body as ChannelModifySchema //new data
+ const { channel_id } = req.params
+ var channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true }).exec();
+ if (!channel) throw new HTTPError("Channel not found", 404);
+
+ const permission = await getPermission(req.user_id, channel.guild_id, channel_id)
+ permission.hasThrow("MANAGE_CHANNELS")
+ channel = await ChannelModel.findOneAndUpdate({ id: channel_id }, payload).exec()
+ if (!channel) throw new HTTPError("Channel not found", 404);
+
+ //const data = toObject(channel);
+ //TODO: Reload channel list if request successful
+
+ await emitEvent({
+ event: "CHANNEL_UPDATE",
+ data: channel,
+ guild_id: channel.guild_id,
+ } as ChannelUpdateEvent)
+
+ res.send(toObject(channel));
+})
+
export default router;
+
diff --git a/src/schema/Channel.ts b/src/schema/Channel.ts
index 70e305e4..3189091d 100644
--- a/src/schema/Channel.ts
+++ b/src/schema/Channel.ts
@@ -37,7 +37,7 @@ export interface ChannelModifySchema {
topic?: string;
bitrate?: number;
user_limit?: number;
- rate_limit_per_user?: Number;
+ rate_limit_per_user?: number;
position?: number;
permission_overwrites?: {
id: string;
|