forked from OpenWF/SpaceNinjaServer
Reviewed-on: OpenWF/SpaceNinjaServer#1459 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
import { AllianceMember, Guild, GuildMember } from "@/src/models/guildModel";
|
|
import { deleteAlliance } from "@/src/services/guildService";
|
|
import { getAccountForRequest } from "@/src/services/loginService";
|
|
import { GuildPermission } from "@/src/types/guildTypes";
|
|
import { RequestHandler } from "express";
|
|
|
|
export const removeFromAllianceController: RequestHandler = async (req, res) => {
|
|
// Check requester is a warlord in their guild
|
|
const account = await getAccountForRequest(req);
|
|
const guildMember = (await GuildMember.findOne({ accountId: account._id, status: 0 }))!;
|
|
if (guildMember.rank > 1) {
|
|
res.status(400).json({ Error: 104 });
|
|
return;
|
|
}
|
|
|
|
let allianceMember = (await AllianceMember.findOne({ guildId: guildMember.guildId }))!;
|
|
if (!guildMember.guildId.equals(req.query.guildId as string)) {
|
|
// Removing a guild that is not our own needs additional permissions
|
|
if (!(allianceMember.Permissions & GuildPermission.Ruler)) {
|
|
res.status(400).json({ Error: 104 });
|
|
return;
|
|
}
|
|
|
|
// Update allianceMember to point to the alliance to kick
|
|
allianceMember = (await AllianceMember.findOne({ guildId: req.query.guildId }))!;
|
|
}
|
|
|
|
if (allianceMember.Permissions & GuildPermission.Ruler) {
|
|
await deleteAlliance(allianceMember.allianceId);
|
|
} else {
|
|
await Promise.all([
|
|
await Guild.updateOne({ _id: allianceMember.guildId }, { $unset: { AllianceId: "" } }),
|
|
await AllianceMember.deleteOne({ _id: allianceMember._id })
|
|
]);
|
|
}
|
|
|
|
res.end();
|
|
};
|