summary refs log tree commit diff
path: root/src/routes/channels/#channel_id/index.ts
blob: 730c1a678f714df3cc76052dad7e52f9a8ba09fa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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

	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);
	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;