summary refs log tree commit diff
path: root/src/routes/users/@me/channels.ts
blob: b5a53be7cd9c1019e823bbcadf941cd1582f7cc3 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import {
	Router,
	Request,
	Response
} from "express";
import {
	ChannelModel,
	ChannelCreateEvent,
	DMChannel,
	UserModel,
	toObject,
	ChannelType,
	Snowflake
} from "@fosscord/server-util";
import {
	HTTPError
} from "lambert-server";
import {
	emitEvent
} from "../../../util/Event";
import {
	getPublicUser
} from "../../../util/User";
import {
	DmChannelCreateSchema
} from "../../../schema/Channel";
import {
	check
} from "../../../util/instanceOf";

const router: Router = Router();

router.get("/", async (req: Request, res: Response) => {
	const user = await UserModel.findOne({
		id: req.user_id
	}, {
		guilds: true
	}).exec();
	if (!user) throw new HTTPError("User not found", 404);

	var testID = "829044530203328513"; //FOR TEST

	var channels = await ChannelModel.find({
		recipients: req.user_id,
		type: 1
	}).exec();

	res.json(toObject(channels));
});

router.post("/", check(DmChannelCreateSchema), async (req, res) => {
	const body = req.body as DmChannelCreateSchema;
	switch (body.type) {
		case ChannelType.GUILD_CATEGORY:
		case ChannelType.GUILD_TEXT:
		case ChannelType.GUILD_VOICE:
			throw new HTTPError("You can't create a dm channel in a guild");
			// TODO:
		case ChannelType.GUILD_STORE:
			throw new HTTPError("Not yet supported");
		case ChannelType.GUILD_NEWS:
			// TODO: check if guild is community server
	}

	const channel = {
		...body,
		owner_id: req.user_id,
		id: Snowflake.generate(),
		created_at: new Date(),
	};
	await new ChannelModel(channel).save();

	/*Event({ event: "CHANNEL_CREATE", data: channel } as ChannelCreateEvent);*/


	res.json(channel);
});

export default router;