diff --git a/package-lock.json b/package-lock.json
index 47737734..47439e70 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2812,7 +2812,6 @@
"dependencies": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
- "fsevents": "~2.3.1",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
diff --git a/package.json b/package.json
index e5f4bb24..36017e31 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"build": "tsc -b .",
"build:util": "tsc -b ./node_modules/@fosscord/server-util/",
"postinstall": "patch-package",
- "dev": "tsnd --respawn src/"
+ "dev": "tsnd --respawn src/start.ts"
},
"repository": {
"type": "git",
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;
|