parent
dc4d592b5a
commit
cf50738d34
@ -1,8 +1,7 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "@/src/models/guildModel";
|
||||||
import { IDojoClient, IDojoComponentClient } from "@/src/types/guildTypes";
|
import { getDojoClient } from "@/src/services/guildService";
|
||||||
import { toOid, toMongoDate } from "@/src/helpers/inventoryHelpers";
|
|
||||||
|
|
||||||
export const getGuildDojoController: RequestHandler = async (req, res) => {
|
export const getGuildDojoController: RequestHandler = async (req, res) => {
|
||||||
const guildId = req.query.guildId as string;
|
const guildId = req.query.guildId as string;
|
||||||
@ -26,34 +25,5 @@ export const getGuildDojoController: RequestHandler = async (req, res) => {
|
|||||||
await guild.save();
|
await guild.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
const dojo: IDojoClient = {
|
res.json(getDojoClient(guild, 0));
|
||||||
_id: { $oid: guildId },
|
|
||||||
Name: guild.Name,
|
|
||||||
Tier: 1,
|
|
||||||
FixedContributions: true,
|
|
||||||
DojoRevision: 1,
|
|
||||||
RevisionTime: Math.round(Date.now() / 1000),
|
|
||||||
Energy: guild.DojoEnergy,
|
|
||||||
Capacity: guild.DojoCapacity,
|
|
||||||
DojoRequestStatus: 0,
|
|
||||||
DojoComponents: []
|
|
||||||
};
|
|
||||||
guild.DojoComponents.forEach(dojoComponent => {
|
|
||||||
const clientComponent: IDojoComponentClient = {
|
|
||||||
id: toOid(dojoComponent._id),
|
|
||||||
pf: dojoComponent.pf,
|
|
||||||
ppf: dojoComponent.ppf,
|
|
||||||
DecoCapacity: 600
|
|
||||||
};
|
|
||||||
if (dojoComponent.pi) {
|
|
||||||
clientComponent.pi = toOid(dojoComponent.pi);
|
|
||||||
clientComponent.op = dojoComponent.op!;
|
|
||||||
clientComponent.pp = dojoComponent.pp!;
|
|
||||||
}
|
|
||||||
if (dojoComponent.CompletionTime) {
|
|
||||||
clientComponent.CompletionTime = toMongoDate(dojoComponent.CompletionTime);
|
|
||||||
}
|
|
||||||
dojo.DojoComponents.push(clientComponent);
|
|
||||||
});
|
|
||||||
res.json(dojo);
|
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getGuildForRequest } from "@/src/services/guildService";
|
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
|
||||||
@ -15,7 +15,5 @@ export const queueDojoComponentDestructionController: RequestHandler = async (re
|
|||||||
guild.DojoEnergy -= room.energy;
|
guild.DojoEnergy -= room.energy;
|
||||||
}
|
}
|
||||||
await guild.save();
|
await guild.save();
|
||||||
res.json({
|
res.json(getDojoClient(guild, 1));
|
||||||
DojoRequestStatus: 1
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
18
src/controllers/api/setDojoComponentMessageController.ts
Normal file
18
src/controllers/api/setDojoComponentMessageController.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { RequestHandler } from "express";
|
||||||
|
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
|
||||||
|
|
||||||
|
export const setDojoComponentMessageController: RequestHandler = async (req, res) => {
|
||||||
|
const guild = await getGuildForRequest(req);
|
||||||
|
// At this point, we know that a member of the guild is making this request. Assuming they are allowed to change the message.
|
||||||
|
const component = guild.DojoComponents!.find(x => x._id.equals(req.query.componentId as string))!;
|
||||||
|
const payload = JSON.parse(String(req.body)) as SetDojoComponentMessageRequest;
|
||||||
|
if ("Name" in payload) {
|
||||||
|
component.Name = payload.Name;
|
||||||
|
} else {
|
||||||
|
component.Message = payload.Message;
|
||||||
|
}
|
||||||
|
await guild.save();
|
||||||
|
res.json(getDojoClient(guild, 1));
|
||||||
|
};
|
||||||
|
|
||||||
|
type SetDojoComponentMessageRequest = { Name: string } | { Message: string };
|
@ -1,6 +1,6 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { IDojoComponentClient } from "@/src/types/guildTypes";
|
import { IDojoComponentClient } from "@/src/types/guildTypes";
|
||||||
import { getGuildForRequest } from "@/src/services/guildService";
|
import { getDojoClient, getGuildForRequest } from "@/src/services/guildService";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
import { ExportDojoRecipes } from "warframe-public-export-plus";
|
||||||
|
|
||||||
@ -30,7 +30,5 @@ export const startDojoRecipeController: RequestHandler = async (req, res) => {
|
|||||||
CompletionTime: new Date(Date.now()) // TOOD: Omit this field & handle the "Collecting Materials" state.
|
CompletionTime: new Date(Date.now()) // TOOD: Omit this field & handle the "Collecting Materials" state.
|
||||||
});
|
});
|
||||||
await guild.save();
|
await guild.save();
|
||||||
res.json({
|
res.json(getDojoClient(guild, 0));
|
||||||
DojoRequestStatus: 0
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
@ -14,6 +14,8 @@ const dojoComponentSchema = new Schema<IDojoComponentDatabase>({
|
|||||||
pi: Schema.Types.ObjectId,
|
pi: Schema.Types.ObjectId,
|
||||||
op: String,
|
op: String,
|
||||||
pp: String,
|
pp: String,
|
||||||
|
Name: String,
|
||||||
|
Message: String,
|
||||||
CompletionTime: Date
|
CompletionTime: Date
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ import { sellController } from "@/src/controllers/api/sellController";
|
|||||||
import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
|
import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
|
||||||
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
|
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
|
||||||
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
|
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
|
||||||
|
import { setDojoComponentMessageController } from "@/src/controllers/api/setDojoComponentMessageController";
|
||||||
import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController";
|
import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController";
|
||||||
import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController";
|
import { setPlacedDecoInfoController } from "@/src/controllers/api/setPlacedDecoInfoController";
|
||||||
import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
|
import { setShipCustomizationsController } from "@/src/controllers/api/setShipCustomizationsController";
|
||||||
@ -158,6 +159,7 @@ apiRouter.post("/rerollRandomMod.php", rerollRandomModController);
|
|||||||
apiRouter.post("/saveDialogue.php", saveDialogueController);
|
apiRouter.post("/saveDialogue.php", saveDialogueController);
|
||||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
||||||
apiRouter.post("/sell.php", sellController);
|
apiRouter.post("/sell.php", sellController);
|
||||||
|
apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
|
||||||
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
|
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
|
||||||
apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController);
|
apiRouter.post("/setPlacedDecoInfo.php", setPlacedDecoInfoController);
|
||||||
apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController);
|
apiRouter.post("/setShipCustomizations.php", setShipCustomizationsController);
|
||||||
|
@ -3,14 +3,20 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
|
|||||||
import { getInventory } from "@/src/services/inventoryService";
|
import { getInventory } from "@/src/services/inventoryService";
|
||||||
import { Guild } from "@/src/models/guildModel";
|
import { Guild } from "@/src/models/guildModel";
|
||||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
|
||||||
|
import { IDojoClient, IDojoComponentClient, IGuildDatabase } from "@/src/types/guildTypes";
|
||||||
|
import { Document, Types } from "mongoose";
|
||||||
|
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
||||||
|
|
||||||
export const getGuildForRequest = async (req: Request) => {
|
export const getGuildForRequest = async (req: Request): Promise<TGuildDatabaseDocument> => {
|
||||||
const accountId = await getAccountIdForRequest(req);
|
const accountId = await getAccountIdForRequest(req);
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId);
|
||||||
return await getGuildForRequestEx(req, inventory);
|
return await getGuildForRequestEx(req, inventory);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getGuildForRequestEx = async (req: Request, inventory: TInventoryDatabaseDocument) => {
|
export const getGuildForRequestEx = async (
|
||||||
|
req: Request,
|
||||||
|
inventory: TInventoryDatabaseDocument
|
||||||
|
): Promise<TGuildDatabaseDocument> => {
|
||||||
const guildId = req.query.guildId as string;
|
const guildId = req.query.guildId as string;
|
||||||
if (!inventory.GuildId || inventory.GuildId.toString() != guildId) {
|
if (!inventory.GuildId || inventory.GuildId.toString() != guildId) {
|
||||||
throw new Error("Account is not in the guild that it has sent a request for");
|
throw new Error("Account is not in the guild that it has sent a request for");
|
||||||
@ -21,3 +27,47 @@ export const getGuildForRequestEx = async (req: Request, inventory: TInventoryDa
|
|||||||
}
|
}
|
||||||
return guild;
|
return guild;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getDojoClient = (guild: TGuildDatabaseDocument, status: number): IDojoClient => {
|
||||||
|
const dojo: IDojoClient = {
|
||||||
|
_id: { $oid: guild._id.toString() },
|
||||||
|
Name: guild.Name,
|
||||||
|
Tier: 1,
|
||||||
|
FixedContributions: true,
|
||||||
|
DojoRevision: 1,
|
||||||
|
RevisionTime: Math.round(Date.now() / 1000),
|
||||||
|
Energy: guild.DojoEnergy,
|
||||||
|
Capacity: guild.DojoCapacity,
|
||||||
|
DojoRequestStatus: status,
|
||||||
|
DojoComponents: []
|
||||||
|
};
|
||||||
|
guild.DojoComponents!.forEach(dojoComponent => {
|
||||||
|
const clientComponent: IDojoComponentClient = {
|
||||||
|
id: toOid(dojoComponent._id),
|
||||||
|
pf: dojoComponent.pf,
|
||||||
|
ppf: dojoComponent.ppf,
|
||||||
|
Name: dojoComponent.Name,
|
||||||
|
Message: dojoComponent.Message,
|
||||||
|
DecoCapacity: 600
|
||||||
|
};
|
||||||
|
if (dojoComponent.pi) {
|
||||||
|
clientComponent.pi = toOid(dojoComponent.pi);
|
||||||
|
clientComponent.op = dojoComponent.op!;
|
||||||
|
clientComponent.pp = dojoComponent.pp!;
|
||||||
|
}
|
||||||
|
if (dojoComponent.CompletionTime) {
|
||||||
|
clientComponent.CompletionTime = toMongoDate(dojoComponent.CompletionTime);
|
||||||
|
}
|
||||||
|
dojo.DojoComponents.push(clientComponent);
|
||||||
|
});
|
||||||
|
return dojo;
|
||||||
|
};
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
export type TGuildDatabaseDocument = Document<unknown, {}, IGuildDatabase> &
|
||||||
|
IGuildDatabase &
|
||||||
|
Required<{
|
||||||
|
_id: Types.ObjectId;
|
||||||
|
}> & {
|
||||||
|
__v: number;
|
||||||
|
};
|
||||||
|
@ -34,6 +34,8 @@ export interface IDojoComponentClient {
|
|||||||
pi?: IOid; // Parent ID. N/A to root.
|
pi?: IOid; // Parent ID. N/A to root.
|
||||||
op?: string; // "Open Portal"? N/A to root.
|
op?: string; // "Open Portal"? N/A to root.
|
||||||
pp?: string; // "Parent Portal"? N/A to root.
|
pp?: string; // "Parent Portal"? N/A to root.
|
||||||
|
Name?: string;
|
||||||
|
Message?: string;
|
||||||
RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
|
RegularCredits?: number; // "Collecting Materials" state: Number of credits that were donated.
|
||||||
MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
|
MiscItems?: IMiscItem[]; // "Collecting Materials" state: Resources that were donated.
|
||||||
CompletionTime?: IMongoDate;
|
CompletionTime?: IMongoDate;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user