feat: updateAlignment (#1039)

Closes #1038

may need some more information about how this endpoint works. had to make a few assumptions.

Reviewed-on: OpenWF/SpaceNinjaServer#1039
Co-authored-by: Sainan <sainan@calamity.inc>
Co-committed-by: Sainan <sainan@calamity.inc>
This commit is contained in:
Sainan 2025-02-28 12:36:49 -08:00 committed by OrdisPrime
parent 8c662fa1ec
commit c971a484ef
4 changed files with 41 additions and 5 deletions

View File

@ -0,0 +1,25 @@
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { getInventory } from "@/src/services/inventoryService";
import { getAccountIdForRequest } from "@/src/services/loginService";
import { IAlignment } from "@/src/types/inventoryTypes/inventoryTypes";
import { RequestHandler } from "express";
export const updateAlignmentController: RequestHandler = async (req, res) => {
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId);
const body = getJSONfromString<IUpdateAlignmentRequest>(String(req.body));
inventory.Alignment = {
Alignment: body.Alignment,
Wisdom: body.Wisdom
};
await inventory.save();
res.json(inventory.Alignment);
};
interface IUpdateAlignmentRequest {
Wisdom: number;
Alignment: number;
PreviousAlignment: IAlignment;
AlignmentAction: string; // e.g. "/Lotus/Language/Game/MawCinematicDualChoice"
KeyChainName: string;
}

View File

@ -70,7 +70,8 @@ import {
IPendingCouponClient, IPendingCouponClient,
ILibraryDailyTaskInfo, ILibraryDailyTaskInfo,
IDroneDatabase, IDroneDatabase,
IDroneClient IDroneClient,
IAlignment
} from "../../types/inventoryTypes/inventoryTypes"; } from "../../types/inventoryTypes/inventoryTypes";
import { IOid } from "../../types/commonTypes"; import { IOid } from "../../types/commonTypes";
import { import {
@ -970,6 +971,14 @@ const libraryDailyTaskInfoSchema = new Schema<ILibraryDailyTaskInfo>(
{ _id: false } { _id: false }
); );
const alignmentSchema = new Schema<IAlignment>(
{
Alignment: Number,
Wisdom: Number
},
{ _id: false }
);
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>( const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
{ {
accountOwnerId: Schema.Types.ObjectId, accountOwnerId: Schema.Types.ObjectId,
@ -1171,8 +1180,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
//https://warframe.fandom.com/wiki/Alignment //https://warframe.fandom.com/wiki/Alignment
//like "Alignment": { "Wisdom": 9, "Alignment": 1 }, //like "Alignment": { "Wisdom": 9, "Alignment": 1 },
Alignment: Schema.Types.Mixed, Alignment: alignmentSchema,
AlignmentReplay: Schema.Types.Mixed, AlignmentReplay: alignmentSchema,
//https://warframe.fandom.com/wiki/Sortie //https://warframe.fandom.com/wiki/Sortie
CompletedSorties: [String], CompletedSorties: [String],

View File

@ -87,6 +87,7 @@ import { syndicateStandingBonusController } from "@/src/controllers/api/syndicat
import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController"; import { tauntHistoryController } from "@/src/controllers/api/tauntHistoryController";
import { trainingResultController } from "@/src/controllers/api/trainingResultController"; import { trainingResultController } from "@/src/controllers/api/trainingResultController";
import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController"; import { unlockShipFeatureController } from "@/src/controllers/api/unlockShipFeatureController";
import { updateAlignmentController } from "@/src/controllers/api/updateAlignmentController";
import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController"; import { updateChallengeProgressController } from "@/src/controllers/api/updateChallengeProgressController";
import { updateQuestController } from "@/src/controllers/api/updateQuestController"; import { updateQuestController } from "@/src/controllers/api/updateQuestController";
import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController"; import { updateSessionGetController, updateSessionPostController } from "@/src/controllers/api/updateSessionController";
@ -188,6 +189,7 @@ apiRouter.post("/syndicateStandingBonus.php", syndicateStandingBonusController);
apiRouter.post("/tauntHistory.php", tauntHistoryController); apiRouter.post("/tauntHistory.php", tauntHistoryController);
apiRouter.post("/trainingResult.php", trainingResultController); apiRouter.post("/trainingResult.php", trainingResultController);
apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController); apiRouter.post("/unlockShipFeature.php", unlockShipFeatureController);
apiRouter.post("/updateAlignment.php", updateAlignmentController);
apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController); apiRouter.post("/updateChallengeProgress.php", updateChallengeProgressController);
apiRouter.post("/updateNodeIntros.php", genericUpdateController); apiRouter.post("/updateNodeIntros.php", genericUpdateController);
apiRouter.post("/updateQuest.php", updateQuestController); apiRouter.post("/updateQuest.php", updateQuestController);

View File

@ -253,7 +253,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
CompletedSyndicates: string[]; CompletedSyndicates: string[];
FocusXP?: IFocusXP; FocusXP?: IFocusXP;
Wishlist: string[]; Wishlist: string[];
Alignment: IAlignment; Alignment?: IAlignment;
CompletedSorties: string[]; CompletedSorties: string[];
LastSortieReward: ILastSortieReward[]; LastSortieReward: ILastSortieReward[];
Drones: IDroneClient[]; Drones: IDroneClient[];
@ -267,7 +267,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
HasContributedToDojo?: boolean; HasContributedToDojo?: boolean;
HWIDProtectEnabled?: boolean; HWIDProtectEnabled?: boolean;
KubrowPetPrints: IKubrowPetPrint[]; KubrowPetPrints: IKubrowPetPrint[];
AlignmentReplay: IAlignment; AlignmentReplay?: IAlignment;
PersonalGoalProgress: IPersonalGoalProgress[]; PersonalGoalProgress: IPersonalGoalProgress[];
ThemeStyle: string; ThemeStyle: string;
ThemeBackground: string; ThemeBackground: string;