feat: clan members #1143
@ -1,20 +1,13 @@
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
 | 
			
		||||
import { Guild, GuildMember } from "@/src/models/guildModel";
 | 
			
		||||
import { Guild } from "@/src/models/guildModel";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
 | 
			
		||||
import { fillInInventoryDataForGuildMember, getGuildVault } from "@/src/services/guildService";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { IGuildMemberClient } from "@/src/types/guildTypes";
 | 
			
		||||
import { Account } from "@/src/models/loginModel";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { getGuildClient } from "@/src/services/guildService";
 | 
			
		||||
 | 
			
		||||
const getGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await Inventory.findOne({ accountOwnerId: accountId });
 | 
			
		||||
    if (!inventory) {
 | 
			
		||||
        res.status(400).json({ error: "inventory was undefined" });
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    if (inventory.GuildId) {
 | 
			
		||||
        const guild = await Guild.findOne({ _id: inventory.GuildId });
 | 
			
		||||
        if (guild) {
 | 
			
		||||
@ -25,96 +18,7 @@ const getGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
                guild.CeremonyResetDate = undefined;
 | 
			
		||||
                await guild.save();
 | 
			
		||||
            }
 | 
			
		||||
            const guildMembers = await GuildMember.find({ guildId: inventory.GuildId });
 | 
			
		||||
 | 
			
		||||
            const members: IGuildMemberClient[] = [];
 | 
			
		||||
            let missingEntry = true;
 | 
			
		||||
            for (const guildMember of guildMembers) {
 | 
			
		||||
                const member: IGuildMemberClient = {
 | 
			
		||||
                    _id: toOid(guildMember.accountId),
 | 
			
		||||
                    Rank: guildMember.rank,
 | 
			
		||||
                    Status: guildMember.status
 | 
			
		||||
                };
 | 
			
		||||
                if (guildMember.accountId.equals(accountId)) {
 | 
			
		||||
                    missingEntry = false;
 | 
			
		||||
                } else {
 | 
			
		||||
                    member.DisplayName = (await Account.findOne(
 | 
			
		||||
                        {
 | 
			
		||||
                            _id: guildMember.accountId
 | 
			
		||||
                        },
 | 
			
		||||
                        "DisplayName"
 | 
			
		||||
                    ))!.DisplayName;
 | 
			
		||||
                    await fillInInventoryDataForGuildMember(member);
 | 
			
		||||
                }
 | 
			
		||||
                members.push(member);
 | 
			
		||||
            }
 | 
			
		||||
            if (missingEntry) {
 | 
			
		||||
                // Handle clans created prior to creation of the GuildMember model.
 | 
			
		||||
                await GuildMember.insertOne({
 | 
			
		||||
                    accountId: accountId,
 | 
			
		||||
                    guildId: inventory.GuildId,
 | 
			
		||||
                    status: 0,
 | 
			
		||||
                    rank: 0
 | 
			
		||||
                });
 | 
			
		||||
                members.push({
 | 
			
		||||
                    _id: { $oid: accountId },
 | 
			
		||||
                    Status: 0,
 | 
			
		||||
                    Rank: 0
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            res.json({
 | 
			
		||||
                _id: toOid(guild._id),
 | 
			
		||||
                Name: guild.Name,
 | 
			
		||||
                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
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                Tier: 1,
 | 
			
		||||
                Vault: getGuildVault(guild),
 | 
			
		||||
                Class: guild.Class,
 | 
			
		||||
                XP: guild.XP,
 | 
			
		||||
                IsContributor: !!guild.CeremonyContributors?.find(x => x.equals(accountId)),
 | 
			
		||||
                NumContributors: guild.CeremonyContributors?.length ?? 0,
 | 
			
		||||
                CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined
 | 
			
		||||
            });
 | 
			
		||||
            res.json(await getGuildClient(guild, accountId));
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,14 @@
 | 
			
		||||
import { Request } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { addRecipes, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { Guild, TGuildDatabaseDocument } from "@/src/models/guildModel";
 | 
			
		||||
import { Inventory, TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
			
		||||
import { Guild, GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
 | 
			
		||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
			
		||||
import {
 | 
			
		||||
    IDojoClient,
 | 
			
		||||
    IDojoComponentClient,
 | 
			
		||||
    IDojoContributable,
 | 
			
		||||
    IDojoDecoClient,
 | 
			
		||||
    IGuildClient,
 | 
			
		||||
    IGuildMemberClient,
 | 
			
		||||
    IGuildVault
 | 
			
		||||
} from "@/src/types/guildTypes";
 | 
			
		||||
@ -16,6 +17,7 @@ import { Types } from "mongoose";
 | 
			
		||||
import { ExportDojoRecipes, IDojoBuild } from "warframe-public-export-plus";
 | 
			
		||||
import { logger } from "../utils/logger";
 | 
			
		||||
import { config } from "./configService";
 | 
			
		||||
import { Account } from "../models/loginModel";
 | 
			
		||||
 | 
			
		||||
export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
@ -38,6 +40,99 @@ export const getGuildForRequestEx = async (
 | 
			
		||||
    return guild;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const getGuildClient = async (guild: TGuildDatabaseDocument, accountId: string): Promise<IGuildClient> => {
 | 
			
		||||
    const guildMembers = await GuildMember.find({ guildId: guild._id });
 | 
			
		||||
 | 
			
		||||
    const members: IGuildMemberClient[] = [];
 | 
			
		||||
    let missingEntry = true;
 | 
			
		||||
    for (const guildMember of guildMembers) {
 | 
			
		||||
        const member: IGuildMemberClient = {
 | 
			
		||||
            _id: toOid(guildMember.accountId),
 | 
			
		||||
            Rank: guildMember.rank,
 | 
			
		||||
            Status: guildMember.status
 | 
			
		||||
        };
 | 
			
		||||
        if (guildMember.accountId.equals(accountId)) {
 | 
			
		||||
            missingEntry = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            member.DisplayName = (await Account.findOne(
 | 
			
		||||
                {
 | 
			
		||||
                    _id: guildMember.accountId
 | 
			
		||||
                },
 | 
			
		||||
                "DisplayName"
 | 
			
		||||
            ))!.DisplayName;
 | 
			
		||||
            await fillInInventoryDataForGuildMember(member);
 | 
			
		||||
        }
 | 
			
		||||
        members.push(member);
 | 
			
		||||
    }
 | 
			
		||||
    if (missingEntry) {
 | 
			
		||||
        // Handle clans created prior to creation of the GuildMember model.
 | 
			
		||||
        await GuildMember.insertOne({
 | 
			
		||||
            accountId: accountId,
 | 
			
		||||
            guildId: guild._id,
 | 
			
		||||
            status: 0,
 | 
			
		||||
            rank: 0
 | 
			
		||||
        });
 | 
			
		||||
        members.push({
 | 
			
		||||
            _id: { $oid: accountId },
 | 
			
		||||
            Status: 0,
 | 
			
		||||
            Rank: 0
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        _id: toOid(guild._id),
 | 
			
		||||
        Name: guild.Name,
 | 
			
		||||
        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
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        Tier: 1,
 | 
			
		||||
        Vault: getGuildVault(guild),
 | 
			
		||||
        Class: guild.Class,
 | 
			
		||||
        XP: guild.XP,
 | 
			
		||||
        IsContributor: !!guild.CeremonyContributors?.find(x => x.equals(accountId)),
 | 
			
		||||
        NumContributors: guild.CeremonyContributors?.length ?? 0,
 | 
			
		||||
        CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const getGuildVault = (guild: TGuildDatabaseDocument): IGuildVault => {
 | 
			
		||||
    return {
 | 
			
		||||
        DojoRefundRegularCredits: guild.VaultRegularCredits,
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,25 @@ import { Types } from "mongoose";
 | 
			
		||||
import { IOid, IMongoDate } from "@/src/types/commonTypes";
 | 
			
		||||
import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
 | 
			
		||||
export interface IGuildClient {
 | 
			
		||||
    _id: IOid;
 | 
			
		||||
    Name: string;
 | 
			
		||||
    MOTD: string;
 | 
			
		||||
    LongMOTD?: ILongMOTD;
 | 
			
		||||
    Members: IGuildMemberClient[];
 | 
			
		||||
    Ranks: {
 | 
			
		||||
        Name: string;
 | 
			
		||||
        Permissions: number;
 | 
			
		||||
    }[];
 | 
			
		||||
    Tier: number;
 | 
			
		||||
    Vault: IGuildVault;
 | 
			
		||||
    Class: number;
 | 
			
		||||
    XP: number;
 | 
			
		||||
    IsContributor: boolean;
 | 
			
		||||
    NumContributors: number;
 | 
			
		||||
    CeremonyResetDate?: IMongoDate;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IGuildDatabase {
 | 
			
		||||
    _id: Types.ObjectId;
 | 
			
		||||
    Name: string;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user