forked from OpenWF/SpaceNinjaServer
		
	feat: edit clan hierarchy (#1164)
Re #1144 Reviewed-on: OpenWF/SpaceNinjaServer#1164
This commit is contained in:
		
							parent
							
								
									516df61633
								
							
						
					
					
						commit
						b7800b6d20
					
				
							
								
								
									
										16
									
								
								src/controllers/api/customizeGuildRanksController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/controllers/api/customizeGuildRanksController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
import { getGuildForRequest } from "@/src/services/guildService";
 | 
			
		||||
import { IGuildRank } from "@/src/types/guildTypes";
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
 | 
			
		||||
export const customizeGuildRanksController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const guild = await getGuildForRequest(req);
 | 
			
		||||
    const payload = JSON.parse(String(req.body)) as ICustomizeGuildRanksRequest;
 | 
			
		||||
    // TODO: Verify permissions
 | 
			
		||||
    guild.Ranks = payload.GuildRanks;
 | 
			
		||||
    await guild.save();
 | 
			
		||||
    res.end();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
interface ICustomizeGuildRanksRequest {
 | 
			
		||||
    GuildRanks: IGuildRank[];
 | 
			
		||||
}
 | 
			
		||||
@ -6,7 +6,8 @@ import {
 | 
			
		||||
    ILongMOTD,
 | 
			
		||||
    IGuildMemberDatabase,
 | 
			
		||||
    IGuildLogClassChange,
 | 
			
		||||
    IGuildLogTechChange
 | 
			
		||||
    IGuildLogTechChange,
 | 
			
		||||
    IGuildRank
 | 
			
		||||
} from "@/src/types/guildTypes";
 | 
			
		||||
import { Document, Model, model, Schema, Types } from "mongoose";
 | 
			
		||||
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
 | 
			
		||||
@ -58,6 +59,53 @@ const longMOTDSchema = new Schema<ILongMOTD>(
 | 
			
		||||
    { _id: false }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const guildRankSchema = new Schema<IGuildRank>(
 | 
			
		||||
    {
 | 
			
		||||
        Name: String,
 | 
			
		||||
        Permissions: Number
 | 
			
		||||
    },
 | 
			
		||||
    { _id: false }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const defaultRanks: IGuildRank[] = [
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Creator",
 | 
			
		||||
        Permissions: 16351
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Warlord",
 | 
			
		||||
        Permissions: 16351
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_General",
 | 
			
		||||
        Permissions: 4318
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Officer",
 | 
			
		||||
        Permissions: 4314
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Leader",
 | 
			
		||||
        Permissions: 4106
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Sage",
 | 
			
		||||
        Permissions: 4304
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Soldier",
 | 
			
		||||
        Permissions: 4098
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Initiate",
 | 
			
		||||
        Permissions: 4096
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        Name: "/Lotus/Language/Game/Rank_Utility",
 | 
			
		||||
        Permissions: 4096
 | 
			
		||||
    }
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
 | 
			
		||||
    {
 | 
			
		||||
        dateTime: Date,
 | 
			
		||||
@ -81,6 +129,7 @@ const guildSchema = new Schema<IGuildDatabase>(
 | 
			
		||||
        Name: { type: String, required: true, unique: true },
 | 
			
		||||
        MOTD: { type: String, default: "" },
 | 
			
		||||
        LongMOTD: { type: longMOTDSchema, default: undefined },
 | 
			
		||||
        Ranks: { type: [guildRankSchema], default: defaultRanks },
 | 
			
		||||
        DojoComponents: { type: [dojoComponentSchema], default: [] },
 | 
			
		||||
        DojoCapacity: { type: Number, default: 100 },
 | 
			
		||||
        DojoEnergy: { type: Number, default: 5 },
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
 | 
			
		||||
import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
 | 
			
		||||
import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
			
		||||
import { creditsController } from "@/src/controllers/api/creditsController";
 | 
			
		||||
import { customizeGuildRanksController } from "@/src/controllers/api/customizeGuildRanksController";
 | 
			
		||||
import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
 | 
			
		||||
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
 | 
			
		||||
import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
 | 
			
		||||
@ -171,6 +172,7 @@ apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
 | 
			
		||||
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
 | 
			
		||||
apiRouter.post("/contributeToVault.php", contributeToVaultController);
 | 
			
		||||
apiRouter.post("/createGuild.php", createGuildController);
 | 
			
		||||
apiRouter.post("/customizeGuildRanks.php", customizeGuildRanksController);
 | 
			
		||||
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
 | 
			
		||||
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
 | 
			
		||||
apiRouter.post("/drones.php", dronesController);
 | 
			
		||||
 | 
			
		||||
@ -86,44 +86,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
 | 
			
		||||
        MOTD: guild.MOTD,
 | 
			
		||||
        LongMOTD: guild.LongMOTD,
 | 
			
		||||
        Members: members,
 | 
			
		||||
        Ranks: [
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Creator",
 | 
			
		||||
                Permissions: 16351
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Warlord",
 | 
			
		||||
                Permissions: 14303
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_General",
 | 
			
		||||
                Permissions: 4318
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Officer",
 | 
			
		||||
                Permissions: 4314
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Leader",
 | 
			
		||||
                Permissions: 4106
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Sage",
 | 
			
		||||
                Permissions: 4304
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Soldier",
 | 
			
		||||
                Permissions: 4098
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Initiate",
 | 
			
		||||
                Permissions: 4096
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                Name: "/Lotus/Language/Game/Rank_Utility",
 | 
			
		||||
                Permissions: 4096
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        Ranks: guild.Ranks,
 | 
			
		||||
        Tier: 1,
 | 
			
		||||
        Vault: getGuildVault(guild),
 | 
			
		||||
        Class: guild.Class,
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,7 @@ export interface IGuildDatabase {
 | 
			
		||||
    Name: string;
 | 
			
		||||
    MOTD: string;
 | 
			
		||||
    LongMOTD?: ILongMOTD;
 | 
			
		||||
    Ranks: IGuildRank[];
 | 
			
		||||
 | 
			
		||||
    DojoComponents: IDojoComponentDatabase[];
 | 
			
		||||
    DojoCapacity: number;
 | 
			
		||||
@ -57,6 +58,27 @@ export interface ILongMOTD {
 | 
			
		||||
    //authorGuildName: "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 32 seems to be reserved
 | 
			
		||||
export enum GuildPermission {
 | 
			
		||||
    Ruler = 1, // Change clan hierarchy
 | 
			
		||||
    Advertiser = 8192,
 | 
			
		||||
    Recruiter = 2, // Invite members
 | 
			
		||||
    Regulator = 4, // Kick members
 | 
			
		||||
    Promoter = 8, // Promote and demote members
 | 
			
		||||
    Architect = 16, // Create and destroy rooms
 | 
			
		||||
    Decorator = 1024, // Create and destroy decos
 | 
			
		||||
    Treasurer = 64, // Contribute from vault and edit tax rate
 | 
			
		||||
    Tech = 128, // Queue research
 | 
			
		||||
    ChatModerator = 512,
 | 
			
		||||
    Herald = 2048, // Change MOTD
 | 
			
		||||
    Fabricator = 4096 // Replicate research
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IGuildRank {
 | 
			
		||||
    Name: string;
 | 
			
		||||
    Permissions: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IGuildMemberDatabase {
 | 
			
		||||
    accountId: Types.ObjectId;
 | 
			
		||||
    guildId: Types.ObjectId;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user