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();
 | 
						|
};
 |