Skip to content

Commit a3e4daa

Browse files
committed
add DELETE /api/clans/:name endpoint
1 parent a2dc36b commit a3e4daa

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

backend/api/APIController.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,29 @@ export default class APIController {
136136

137137
// (TODO) DELETE Endpoint: /api/clans/:name
138138
// Deletes a clan by its name (a clan can only be deleted by its leader)
139-
this.app.delete("/api/clans/:name", (req: express.Request, res: express.Response) => {
139+
this.app.delete("/api/clans/:name", async (req: express.Request, res: express.Response) => {
140+
const { session } = req.headers;
141+
if (!session) return res.status(400).json({
142+
message: "No session header provided"
143+
});
144+
145+
const requester: Socket | undefined = this.base.sockets.find((v: Socket) => v.sessionid === session);
146+
if (!requester) return res.status(400).json({
147+
message: "Invalid session ID provided"
148+
});
149+
150+
const clan: ClanData | undefined = await this.base.db.get("SELECT members FROM clans WHERE name = ?", req.params.name);
151+
if (!clan) return res.status(404).json({
152+
message: "Clan not found"
153+
});
154+
if (clan.leader !== requester.username || requester.role === Role.ADMIN) return res.status(403).json({
155+
message: "Only the clean leader and administrators can delete this clan"
156+
});
140157

158+
159+
await this.base.db.run("UPDATE accounts SET clan = null WHERE clan = ?", req.params.name);
160+
await this.base.db.run("DELETE FROM clans WHERE clan = ?", req.params.name)
161+
res.json(clan);
141162
});
142163

143164
// (TODO) POST Endpoint: /api/clans/:name

0 commit comments

Comments
 (0)