Channel Delete + Update Route

This commit is contained in:
Your Name 2021-04-26 03:40:20 +05:30
parent c041961243
commit aeecd50b77
6 changed files with 57 additions and 18 deletions

1
package-lock.json generated
View File

@ -2812,7 +2812,6 @@
"dependencies": { "dependencies": {
"anymatch": "~3.1.1", "anymatch": "~3.1.1",
"braces": "~3.0.2", "braces": "~3.0.2",
"fsevents": "~2.3.1",
"glob-parent": "~5.1.0", "glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0", "is-binary-path": "~2.1.0",
"is-glob": "~4.0.1", "is-glob": "~4.0.1",

View File

@ -11,7 +11,7 @@
"build": "tsc -b .", "build": "tsc -b .",
"build:util": "tsc -b ./node_modules/@fosscord/server-util/", "build:util": "tsc -b ./node_modules/@fosscord/server-util/",
"postinstall": "patch-package", "postinstall": "patch-package",
"dev": "tsnd --respawn src/" "dev": "tsnd --respawn src/start.ts"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -12,8 +12,13 @@ import { ErrorHandler } from "./middlewares/ErrorHandler";
import { BodyParser } from "./middlewares/BodyParser"; import { BodyParser } from "./middlewares/BodyParser";
import { Router } from "express"; import { Router } from "express";
import fetch from "node-fetch"; 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 { declare global {
namespace Express { namespace Express {

8
src/global.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
declare global {
namespace Express {
interface Request {
user_id: any;
token: any;
}
}
}

View File

@ -1,24 +1,25 @@
import { ChannelModel, getPermission, toObject } from "@fosscord/server-util"; import { ChannelDeleteEvent, ChannelModel, ChannelUpdateEvent, getPermission, toObject } from "@fosscord/server-util";
import { Router } from "express"; import { Router } from "express";
import { HTTPError } from "lambert-server"; import { HTTPError } from "lambert-server";
import { ChannelModifySchema } from "../../../schema/Channel";
import { emitEvent } from "../../../util/Event";
import { check } from "../../../util/instanceOf";
const router: Router = Router(); const router: Router = Router();
// TODO: delete channel // TODO: delete channel
// TODO: Get channel // TODO: Get channel
router.delete("/", async(req,res)=>{ router.delete("/", async (req, res) => {
const {channel_id} = req.params const { channel_id } = req.params
const channel = await ChannelModel.findOne({ id: channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); 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) throw new HTTPError("Channel not found", 404);
if (channel.guild_id) {
const permission = await getPermission(req.user_id, channel.guild_id) const permission = await getPermission(req.user_id, channel.guild_id)
permission.hasThrow("MANAGE_CHANNELS") permission.hasThrow("MANAGE_CHANNELS")
// TODO Channel Update Gateway event will fire for each of them // 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})
} await ChannelModel.deleteOne({ id: channel_id })
// TODO: Dm channel "close" not delete // TODO: Dm channel "close" not delete
@ -27,4 +28,30 @@ router.delete("/", async(req,res)=>{
res.send(data) 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; export default router;

View File

@ -37,7 +37,7 @@ export interface ChannelModifySchema {
topic?: string; topic?: string;
bitrate?: number; bitrate?: number;
user_limit?: number; user_limit?: number;
rate_limit_per_user?: Number; rate_limit_per_user?: number;
position?: number; position?: number;
permission_overwrites?: { permission_overwrites?: {
id: string; id: string;