summary refs log tree commit diff
path: root/src/routes/api/v8/guilds/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/api/v8/guilds/index.ts')
-rw-r--r--src/routes/api/v8/guilds/index.ts88
1 files changed, 37 insertions, 51 deletions
diff --git a/src/routes/api/v8/guilds/index.ts b/src/routes/api/v8/guilds/index.ts

index 2d7e081a..46372a68 100644 --- a/src/routes/api/v8/guilds/index.ts +++ b/src/routes/api/v8/guilds/index.ts
@@ -1,19 +1,20 @@ import { Router, Request, Response } from "express"; -import { db, Guild, Snowflake } from "fosscord-server-util"; +import { GuildDeleteEvent, GuildModel, MemberModel, Snowflake } from "fosscord-server-util"; import { HTTPError } from "lambert-server"; import { check } from "./../../../../util/instanceOf"; -import { GuildCreateSchema, GuildGetSchema, GuildUpdateSchema } from "../../../../schema/Guild"; +import { GuildCreateSchema, GuildUpdateSchema } from "../../../../schema/Guild"; +import { emitEvent } from "../../../../util/Event"; const router: Router = Router(); router.get("/:id", async (req: Request, res: Response) => { - const member = await db.data.guilds({ id: req.params.id }).members({ id: req.userid }).get({ id: true }); + const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); + if (!guild) throw new HTTPError("Guild doesn't exist"); - if (!member) { - throw new HTTPError("you arent a member of the guild you are trying to access", 401); - } + const member = await MemberModel.findOne({ guild_id: req.params.id, id: req.userid }, "id").exec(); + + if (!member) throw new HTTPError("you arent a member of the guild you are trying to access", 401); - const guild = await db.data.guilds({ id: req.params.id }).get(GuildGetSchema); return res.json(guild); }); @@ -21,7 +22,7 @@ router.patch("/:id", check(GuildUpdateSchema), async (req: Request, res: Respons // TODO: check permission of member const body = req.body as GuildUpdateSchema; - const guild = await db.data.guilds({ id: req.params.id }).get({ id: true }); + const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); if (!guild) throw new HTTPError("This guild doesnt exist", 404); throw "not finished"; @@ -30,70 +31,40 @@ router.patch("/:id", check(GuildUpdateSchema), async (req: Request, res: Respons // // TODO: finish POST route router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) => { const body = req.body as GuildCreateSchema; + // TODO: check if user is in more than 100 (config max guilds) const guildID = Snowflake.generate(); - const guild: Guild = { - // name: undefined, - // owner: undefined, - ...body, // ! contains name & icon values + const guild = { + name: body.name, + region: body.region || "en-US", owner_id: req.userid, + icon: undefined, afk_channel_id: undefined, afk_timeout: 300, application_id: undefined, banner: undefined, - channels: [], default_message_notifications: undefined, description: undefined, splash: undefined, discovery_splash: undefined, - emojis: [], explicit_content_filter: undefined, features: [], - // icon: undefined, id: guildID, - // joined_at: undefined, large: undefined, max_members: 250000, - max_presences: undefined, + max_presences: 250000, max_video_channel_users: 25, - member_count: 0, presence_count: 0, - members: [ - { - id: req.userid, - roles: [], // @everyone role is not explicitly set, the client and server automatically assumes it - joined_at: Date.now(), - nick: undefined, - premium_since: undefined, - deaf: false, - mute: false, - pending: false, - permissions: 8n, // value will be computed if a role is changed - }, - ], + member_count: 0, mfa_level: 0, preferred_locale: "en-US", premium_subscription_count: 0, premium_tier: 0, - presences: [], public_updates_channel_id: undefined, - region: undefined, - roles: [ - { - color: 0, - hoist: false, - name: "@everyone", - permissions: 0n, - id: guildID, - managed: true, // ? discord set this to true, - mentionable: false, - position: 0, - }, - ], rules_channel_id: undefined, system_channel_flags: undefined, system_channel_id: undefined, - unavailable: undefined, + unavailable: false, vanity_url_code: undefined, verification_level: undefined, voice_states: [], @@ -103,7 +74,9 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = }; try { - await db.data.guilds.push(guild); + await new GuildModel(guild).save(); + // TODO: insert default everyone role + // TODO: automatically add user to guild } catch (error) { throw new HTTPError("Couldnt create Guild", 500); } @@ -111,16 +84,29 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = }); router.delete("/:id", async (req: Request, res: Response) => { - const { id: guildID } = req.params; - - const guild = await db.data.guilds({ id: guildID }).get({ owner_id: true }); + try { + var guildID = BigInt(req.params.id); + } catch (error) { + throw new HTTPError("Invalid id format", 400); + } + const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }, "owner_id").exec(); if (!guild) throw new HTTPError("This guild doesnt exist", 404); if (guild.owner_id !== req.userid) throw new HTTPError("You arent the owner of this guild", 401); - await db.data.guilds({ id: guildID }).delete(); + await emitEvent({ + event: "GUILD_DELETE", + data: { + id: guildID, + }, + guild_id: guildID, + } as GuildDeleteEvent); + + await GuildModel.deleteOne({ id: guildID }).exec(); return res.status(204); }); export default router; + +export async function addMember(guild: bigint, user: bigint) {}