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,
 | 
					    ILongMOTD,
 | 
				
			||||||
    IGuildMemberDatabase,
 | 
					    IGuildMemberDatabase,
 | 
				
			||||||
    IGuildLogClassChange,
 | 
					    IGuildLogClassChange,
 | 
				
			||||||
    IGuildLogTechChange
 | 
					    IGuildLogTechChange,
 | 
				
			||||||
 | 
					    IGuildRank
 | 
				
			||||||
} from "@/src/types/guildTypes";
 | 
					} from "@/src/types/guildTypes";
 | 
				
			||||||
import { Document, Model, model, Schema, Types } from "mongoose";
 | 
					import { Document, Model, model, Schema, Types } from "mongoose";
 | 
				
			||||||
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
 | 
					import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
 | 
				
			||||||
@ -58,6 +59,53 @@ const longMOTDSchema = new Schema<ILongMOTD>(
 | 
				
			|||||||
    { _id: false }
 | 
					    { _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>(
 | 
					const guildLogTechChangeSchema = new Schema<IGuildLogTechChange>(
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        dateTime: Date,
 | 
					        dateTime: Date,
 | 
				
			||||||
@ -81,6 +129,7 @@ const guildSchema = new Schema<IGuildDatabase>(
 | 
				
			|||||||
        Name: { type: String, required: true, unique: true },
 | 
					        Name: { type: String, required: true, unique: true },
 | 
				
			||||||
        MOTD: { type: String, default: "" },
 | 
					        MOTD: { type: String, default: "" },
 | 
				
			||||||
        LongMOTD: { type: longMOTDSchema, default: undefined },
 | 
					        LongMOTD: { type: longMOTDSchema, default: undefined },
 | 
				
			||||||
 | 
					        Ranks: { type: [guildRankSchema], default: defaultRanks },
 | 
				
			||||||
        DojoComponents: { type: [dojoComponentSchema], default: [] },
 | 
					        DojoComponents: { type: [dojoComponentSchema], default: [] },
 | 
				
			||||||
        DojoCapacity: { type: Number, default: 100 },
 | 
					        DojoCapacity: { type: Number, default: 100 },
 | 
				
			||||||
        DojoEnergy: { type: Number, default: 5 },
 | 
					        DojoEnergy: { type: Number, default: 5 },
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ import { contributeToDojoComponentController } from "@/src/controllers/api/contr
 | 
				
			|||||||
import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
 | 
					import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
 | 
				
			||||||
import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
					import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
				
			||||||
import { creditsController } from "@/src/controllers/api/creditsController";
 | 
					import { creditsController } from "@/src/controllers/api/creditsController";
 | 
				
			||||||
 | 
					import { customizeGuildRanksController } from "@/src/controllers/api/customizeGuildRanksController";
 | 
				
			||||||
import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
 | 
					import { declineGuildInviteController } from "@/src/controllers/api/declineGuildInviteController";
 | 
				
			||||||
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
 | 
					import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
 | 
				
			||||||
import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
 | 
					import { destroyDojoDecoController } from "@/src/controllers/api/destroyDojoDecoController";
 | 
				
			||||||
@ -171,6 +172,7 @@ apiRouter.post("/contributeGuildClass.php", contributeGuildClassController);
 | 
				
			|||||||
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
 | 
					apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
 | 
				
			||||||
apiRouter.post("/contributeToVault.php", contributeToVaultController);
 | 
					apiRouter.post("/contributeToVault.php", contributeToVaultController);
 | 
				
			||||||
apiRouter.post("/createGuild.php", createGuildController);
 | 
					apiRouter.post("/createGuild.php", createGuildController);
 | 
				
			||||||
 | 
					apiRouter.post("/customizeGuildRanks.php", customizeGuildRanksController);
 | 
				
			||||||
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
 | 
					apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
 | 
				
			||||||
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
 | 
					apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
 | 
				
			||||||
apiRouter.post("/drones.php", dronesController);
 | 
					apiRouter.post("/drones.php", dronesController);
 | 
				
			||||||
 | 
				
			|||||||
@ -86,44 +86,7 @@ export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: s
 | 
				
			|||||||
        MOTD: guild.MOTD,
 | 
					        MOTD: guild.MOTD,
 | 
				
			||||||
        LongMOTD: guild.LongMOTD,
 | 
					        LongMOTD: guild.LongMOTD,
 | 
				
			||||||
        Members: members,
 | 
					        Members: members,
 | 
				
			||||||
        Ranks: [
 | 
					        Ranks: guild.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
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        Tier: 1,
 | 
					        Tier: 1,
 | 
				
			||||||
        Vault: getGuildVault(guild),
 | 
					        Vault: getGuildVault(guild),
 | 
				
			||||||
        Class: guild.Class,
 | 
					        Class: guild.Class,
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,7 @@ export interface IGuildDatabase {
 | 
				
			|||||||
    Name: string;
 | 
					    Name: string;
 | 
				
			||||||
    MOTD: string;
 | 
					    MOTD: string;
 | 
				
			||||||
    LongMOTD?: ILongMOTD;
 | 
					    LongMOTD?: ILongMOTD;
 | 
				
			||||||
 | 
					    Ranks: IGuildRank[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DojoComponents: IDojoComponentDatabase[];
 | 
					    DojoComponents: IDojoComponentDatabase[];
 | 
				
			||||||
    DojoCapacity: number;
 | 
					    DojoCapacity: number;
 | 
				
			||||||
@ -57,6 +58,27 @@ export interface ILongMOTD {
 | 
				
			|||||||
    //authorGuildName: "";
 | 
					    //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 {
 | 
					export interface IGuildMemberDatabase {
 | 
				
			||||||
    accountId: Types.ObjectId;
 | 
					    accountId: Types.ObjectId;
 | 
				
			||||||
    guildId: Types.ObjectId;
 | 
					    guildId: Types.ObjectId;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user