From 5e842189f34522c6d794e8fc4edf0591d4deaa26 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 26 Apr 2021 03:06:19 +0530 Subject: [PATCH 1/2] update server util version --- package-lock.json | Bin 756156 -> 745905 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index ea95261705533bcfd88796bdf8190dad66fdb20b..05786b478581ec2fbf1472e2e6babd1ee0f3e7bc 100644 GIT binary patch delta 2565 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 diff --git a/package.json b/package.json index f8509916..187aa29e 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "homepage": "https://github.com/fosscord/fosscord-api#readme", "dependencies": { - "@fosscord/server-util": "^1.0.4", + "@fosscord/server-util": "^1.0.7", "@types/jest": "^26.0.22", "bcrypt": "^5.0.0", "body-parser": "^1.19.0", From aeecd50b77f7ad26f4f24e1f38d18ef09f875ddf Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 26 Apr 2021 03:40:20 +0530 Subject: [PATCH 2/2] Channel Delete + Update Route --- package-lock.json | Bin 775440 -> 775414 bytes package.json | 2 +- src/Server.ts | 7 ++- src/global.d.ts | 8 ++++ src/routes/channels/#channel_id/index.ts | 55 +++++++++++++++++------ src/schema/Channel.ts | 2 +- 6 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 src/global.d.ts diff --git a/package-lock.json b/package-lock.json index 47737734d0a808d4477f30e563c958cd50b7dbd9..47439e70a2e8a4a8f1ab92f7d2fa993e12c8cf69 100644 GIT binary patch delta 66 zcmbQRO8?tR{e~@!%i5=3Uc)|Ra{qLh_JR&ZAZ7w$W*}w(Vpbq#17da{<^W<&Am-X$ J(80aH2LR%n8}k4F delta 66 zcmeyiQh&lK{e~@!%i5>UU&Fp`a{qLh_OK2{AZ7w$W*}w(Vpbq#17da{<^W<&Am-X0 J*1^5N2LQqo8oK}h 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;