diff --git a/src/routes/api/v8/guilds/index.ts b/src/routes/api/v8/guilds/index.ts
index 9a4e81fa..73fac4d2 100644
--- a/src/routes/api/v8/guilds/index.ts
+++ b/src/routes/api/v8/guilds/index.ts
@@ -1,4 +1,151 @@
-import { Router } from "express";
+import { Router, Request, Response } from "express";
+import { db, GuildSchema, Guild } from "fosscord-server-util";
+import { HTTPError } from "lambert-server";
+import { check } from "./../../../../util/instanceOf";
+
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({});
+
+ 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({
+ id: true,
+ name: true,
+ icon: true,
+ // icon_hash: true,
+ splash: true,
+ discovery_splash: true,
+ owner: true,
+ owner_id: true,
+ permissions: true,
+ region: true,
+ afk_channel_id: true,
+ afk_timeout: true,
+ widget_enabled: true,
+ widget_channel_id: true,
+ verification_level: true,
+ default_message_notifications: true,
+ explicit_content_filter: true,
+ roles: true,
+ emojis: true,
+ features: true,
+ mfa_level: true,
+ application_id: true,
+ system_channel_id: true,
+ system_channel_flags: true,
+ rules_channel_id: true,
+ joined_at: true,
+ // large: true,
+ // unavailable: true,
+ member_count: true,
+ // voice_states: true,
+ // members: true,
+ // channels: true,
+ // presences: true,
+ max_presences: true,
+ max_members: true,
+ vanity_url_code: true,
+ description: true,
+ banner: true,
+ premium_tier: true,
+ premium_subscription_count: true,
+ preferred_locale: true,
+ public_updates_channel_id: true,
+ max_video_channel_users: true,
+ approximate_member_count: true,
+ approximate_presence_count: true,
+ // welcome_screen: true,
+ });
+ return res.json(guild);
+});
+
+// router.put("/:id", check(GuildSchema), async (req: Request, res: Response) => {}); // TODO: add addGuildSchema & createGuildSchema
+
+// TODO: finish POST route
+// router.post("/", check(GuildSchema), async (req: Request, res: Response) => {
+// const body = req.body as GuildSchema;
+// const guildID = BigInt();
+// const guild: Guild = {
+// ...body, // ! contains name & icon values
+// afk_channel_id: undefined,
+// afk_timeout: undefined,
+// application_id: undefined,
+// approximate_member_count: undefined,
+// approximate_presence_count: undefined,
+// banner: undefined,
+// channels: [],
+// default_message_notifications: undefined,
+// description: undefined,
+// discovery_splash: undefined,
+// emojis: [],
+// explicit_content_filter: undefined,
+// features: [],
+// // icon: undefined,
+// id: guildID,
+// // joined_at: undefined,
+// large: undefined,
+// max_members: undefined,
+// max_presences: undefined,
+// max_video_channel_users: undefined,
+// member_count: undefined,
+// members: undefined,
+// mfa_level: undefined,
+// // name: undefined,
+// owner_id: req.userid, // ! important
+// // owner: undefined,
+// permissions: undefined,
+// preferred_locale: undefined,
+// premium_subscription_count: undefined,
+// premium_tier: undefined,
+// presences: [],
+// public_updates_channel_id: undefined,
+// region: undefined,
+// roles: [],
+// rules_channel_id: undefined,
+// splash: undefined,
+// system_channel_flags: undefined,
+// system_channel_id: undefined,
+// unavailable: undefined,
+// vanity_url_code: undefined,
+// verification_level: undefined,
+// voice_states: [],
+// welcome_screen: [],
+// widget_channel_id: undefined,
+// widget_enabled: undefined,
+// };
+
+// try {
+// await db.data.guilds.push(guild);
+// } catch (error) {
+// throw new HTTPError("Couldnt create Guild", 500);
+// }
+// res.status(201).json({ id: guild.id });
+// });
+
+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 });
+
+ if (!guild) {
+ throw new HTTPError("This guild doesnt exist", 404);
+ }
+
+ if (!guild.owner_id) {
+ throw new HTTPError("You arent the owner of this guild", 401);
+ }
+
+ try {
+ await db.data.guilds({ id: guildID }).delete();
+ } catch (error) {
+ throw new HTTPError(`Couldnt delete guild: ${error}`, 500);
+ }
+
+ return res.status(204);
+});
+
export default router;
|