summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorIntevel ツ <59223342+Intevel@users.noreply.github.com>2021-04-24 10:21:40 +0200
committerIntevel ツ <59223342+Intevel@users.noreply.github.com>2021-04-24 10:21:40 +0200
commit75461b9f6ed940d744c0036227b0f8ce943a26ca (patch)
treea02e9d3003bf43bff8ac2965b391a0747ae535e2 /src
parentget /users/@me/channels (diff)
downloadserver-75461b9f6ed940d744c0036227b0f8ce943a26ca.tar.xz
POST /users/@me/channels
Diffstat (limited to 'src')
-rw-r--r--src/routes/users/@me/channels.ts73
-rw-r--r--src/schema/Channel.ts19
2 files changed, 85 insertions, 7 deletions
diff --git a/src/routes/users/@me/channels.ts b/src/routes/users/@me/channels.ts
index 8f2cb74d..b5a53be7 100644
--- a/src/routes/users/@me/channels.ts
+++ b/src/routes/users/@me/channels.ts
@@ -1,20 +1,79 @@
-import { Router, Request, Response } from "express";
-import { ChannelModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util";
-import { HTTPError } from "lambert-server";
-import { emitEvent } from "../../../util/Event";
-import { getPublicUser } from "../../../util/User";
+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();
+	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 }).exec(); 
+	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;
\ No newline at end of file
diff --git a/src/schema/Channel.ts b/src/schema/Channel.ts
index 0fafc54d..3a22872a 100644
--- a/src/schema/Channel.ts
+++ b/src/schema/Channel.ts
@@ -1,3 +1,4 @@
+import { ChannelType } from "@fosscord/server-util";
 import { Length } from "../util/instanceOf";
 
 export const ChannelModifySchema = {
@@ -20,6 +21,24 @@ export const ChannelModifySchema = {
 	$nsfw: Boolean,
 };
 
+export const DmChannelCreateSchema = {
+	owner_id: String,
+	$id: String,
+    $created_at: Date,
+    name: String,
+    type: Number,
+	recipients: [String]
+}
+
+export interface DmChannelCreateSchema {
+	owner_id: String;
+	id?: String;
+    created_at?: Date;
+    name: String;
+    type: Number;
+	recipients: String[];
+}
+
 export interface ChannelModifySchema {
 	name: string;
 	type: number;