forked from OpenWF/SpaceNinjaServer
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { GuildMember } from "@/src/models/guildModel";
 | 
						|
import { getGuildForRequest, hasGuildPermissionEx } from "@/src/services/guildService";
 | 
						|
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
						|
import { GuildPermission } from "@/src/types/guildTypes";
 | 
						|
import { RequestHandler } from "express";
 | 
						|
 | 
						|
export const changeGuildRankController: RequestHandler = async (req, res) => {
 | 
						|
    const accountId = await getAccountIdForRequest(req);
 | 
						|
    const member = (await GuildMember.findOne({
 | 
						|
        accountId: accountId,
 | 
						|
        guildId: req.query.guildId as string
 | 
						|
    }))!;
 | 
						|
    const newRank: number = parseInt(req.query.rankChange as string);
 | 
						|
 | 
						|
    const guild = await getGuildForRequest(req);
 | 
						|
    if (newRank < member.rank || !hasGuildPermissionEx(guild, member, GuildPermission.Promoter)) {
 | 
						|
        res.status(400).json("Invalid permission");
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    const target = (await GuildMember.findOne({
 | 
						|
        guildId: req.query.guildId as string,
 | 
						|
        accountId: req.query.targetId as string
 | 
						|
    }))!;
 | 
						|
    target.rank = parseInt(req.query.rankChange as string);
 | 
						|
    await target.save();
 | 
						|
 | 
						|
    if (newRank == 0) {
 | 
						|
        // If we just promoted someone else to Founding Warlord, we need to demote ourselves to Warlord.
 | 
						|
        member.rank = 1;
 | 
						|
        await member.save();
 | 
						|
    }
 | 
						|
 | 
						|
    res.json({
 | 
						|
        _id: req.query.targetId as string,
 | 
						|
        Rank: newRank
 | 
						|
    });
 | 
						|
};
 |