feat: clan vault #1093
							
								
								
									
										49
									
								
								src/controllers/api/contributeToVaultController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/controllers/api/contributeToVaultController.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
			
		||||
import { getGuildForRequestEx } from "@/src/services/guildService";
 | 
			
		||||
import { addFusionTreasures, addMiscItems, addShipDecorations, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { IFusionTreasure, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
 | 
			
		||||
export const contributeToVaultController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
    const inventory = await getInventory(accountId);
 | 
			
		||||
    const guild = await getGuildForRequestEx(req, inventory);
 | 
			
		||||
    const request = JSON.parse(String(req.body)) as IContributeToVaultRequest;
 | 
			
		||||
 | 
			
		||||
    if (request.RegularCredits) {
 | 
			
		||||
        guild.VaultRegularCredits ??= 0;
 | 
			
		||||
        guild.VaultRegularCredits += request.RegularCredits;
 | 
			
		||||
    }
 | 
			
		||||
    if (request.MiscItems.length) {
 | 
			
		||||
        guild.VaultMiscItems ??= [];
 | 
			
		||||
        for (const item of request.MiscItems) {
 | 
			
		||||
            guild.VaultMiscItems.push(item);
 | 
			
		||||
            addMiscItems(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (request.ShipDecorations.length) {
 | 
			
		||||
        guild.VaultShipDecorations ??= [];
 | 
			
		||||
        for (const item of request.ShipDecorations) {
 | 
			
		||||
            guild.VaultShipDecorations.push(item);
 | 
			
		||||
            addShipDecorations(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (request.FusionTreasures.length) {
 | 
			
		||||
        guild.VaultFusionTreasures ??= [];
 | 
			
		||||
        for (const item of request.FusionTreasures) {
 | 
			
		||||
            guild.VaultFusionTreasures.push(item);
 | 
			
		||||
            addFusionTreasures(inventory, [{ ...item, ItemCount: item.ItemCount * -1 }]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    await guild.save();
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
    res.end();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
interface IContributeToVaultRequest {
 | 
			
		||||
    RegularCredits: number;
 | 
			
		||||
    MiscItems: IMiscItem[];
 | 
			
		||||
    ShipDecorations: ITypeCount[];
 | 
			
		||||
    FusionTreasures: IFusionTreasure[];
 | 
			
		||||
}
 | 
			
		||||
@ -6,7 +6,7 @@ import {
 | 
			
		||||
    IDojoDecoDatabase
 | 
			
		||||
} from "@/src/types/guildTypes";
 | 
			
		||||
import { Document, Model, model, Schema, Types } from "mongoose";
 | 
			
		||||
import { typeCountSchema } from "./inventoryModels/inventoryModel";
 | 
			
		||||
import { fusionTreasuresSchema, typeCountSchema } from "./inventoryModels/inventoryModel";
 | 
			
		||||
import { toMongoDate } from "../helpers/inventoryHelpers";
 | 
			
		||||
 | 
			
		||||
const dojoDecoSchema = new Schema<IDojoDecoDatabase>({
 | 
			
		||||
@ -68,6 +68,8 @@ const guildSchema = new Schema<IGuildDatabase>(
 | 
			
		||||
        VaultRegularCredits: Number,
 | 
			
		||||
        VaultPremiumCredits: Number,
 | 
			
		||||
        VaultMiscItems: { type: [typeCountSchema], default: undefined },
 | 
			
		||||
        VaultShipDecorations: { type: [typeCountSchema], default: undefined },
 | 
			
		||||
        VaultFusionTreasures: { type: [fusionTreasuresSchema], default: undefined },
 | 
			
		||||
        TechProjects: { type: [techProjectSchema], default: undefined }
 | 
			
		||||
    },
 | 
			
		||||
    { id: false }
 | 
			
		||||
 | 
			
		||||
@ -552,7 +552,7 @@ questKeysSchema.set("toJSON", {
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
 | 
			
		||||
export const fusionTreasuresSchema = new Schema<IFusionTreasure>().add(typeCountSchema).add({ Sockets: Number });
 | 
			
		||||
 | 
			
		||||
const spectreLoadoutsSchema = new Schema<ISpectreLoadout>(
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ import { claimLibraryDailyTaskRewardController } from "@/src/controllers/api/cla
 | 
			
		||||
import { clearDialogueHistoryController } from "@/src/controllers/api/clearDialogueHistoryController";
 | 
			
		||||
import { completeRandomModChallengeController } from "@/src/controllers/api/completeRandomModChallengeController";
 | 
			
		||||
import { contributeToDojoComponentController } from "@/src/controllers/api/contributeToDojoComponentController";
 | 
			
		||||
import { contributeToVaultController } from "@/src/controllers/api/contributeToVaultController";
 | 
			
		||||
import { createGuildController } from "@/src/controllers/api/createGuildController";
 | 
			
		||||
import { creditsController } from "@/src/controllers/api/creditsController";
 | 
			
		||||
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
 | 
			
		||||
@ -153,6 +154,7 @@ apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
 | 
			
		||||
apiRouter.post("/clearDialogueHistory.php", clearDialogueHistoryController);
 | 
			
		||||
apiRouter.post("/completeRandomModChallenge.php", completeRandomModChallengeController);
 | 
			
		||||
apiRouter.post("/contributeToDojoComponent.php", contributeToDojoComponentController);
 | 
			
		||||
apiRouter.post("/contributeToVault.php", contributeToVaultController);
 | 
			
		||||
apiRouter.post("/createGuild.php", createGuildController);
 | 
			
		||||
apiRouter.post("/destroyDojoDeco.php", destroyDojoDecoController);
 | 
			
		||||
apiRouter.post("/dojoComponentRush.php", dojoComponentRushController);
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,9 @@ export const getGuildVault = (guild: TGuildDatabaseDocument): IGuildVault => {
 | 
			
		||||
    return {
 | 
			
		||||
        DojoRefundRegularCredits: guild.VaultRegularCredits,
 | 
			
		||||
        DojoRefundMiscItems: guild.VaultMiscItems,
 | 
			
		||||
        DojoRefundPremiumCredits: guild.VaultPremiumCredits
 | 
			
		||||
        DojoRefundPremiumCredits: guild.VaultPremiumCredits,
 | 
			
		||||
        ShipDecorations: guild.VaultShipDecorations,
 | 
			
		||||
        FusionTreasures: guild.VaultFusionTreasures
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,8 @@ export interface IGuildDatabase extends IGuild {
 | 
			
		||||
    VaultRegularCredits?: number;
 | 
			
		||||
    VaultPremiumCredits?: number;
 | 
			
		||||
    VaultMiscItems?: IMiscItem[];
 | 
			
		||||
    VaultShipDecorations?: ITypeCount[];
 | 
			
		||||
    VaultFusionTreasures?: IFusionTreasure[];
 | 
			
		||||
    TechProjects?: ITechProjectDatabase[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user