From 58508a026007be5b9be70cfe5dca44d06fe968ed Mon Sep 17 00:00:00 2001 From: Sainan Date: Tue, 25 Mar 2025 06:38:37 -0700 Subject: [PATCH] feat: nightwave challenge completion (#1319) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1319 --- .../api/updateChallengeProgressController.ts | 53 ++++++++++++++++--- src/services/inventoryService.ts | 13 ++--- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/controllers/api/updateChallengeProgressController.ts b/src/controllers/api/updateChallengeProgressController.ts index a69e995b..3e056538 100644 --- a/src/controllers/api/updateChallengeProgressController.ts +++ b/src/controllers/api/updateChallengeProgressController.ts @@ -3,21 +3,60 @@ import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getAccountIdForRequest } from "@/src/services/loginService"; import { addChallenges, addSeasonalChallengeHistory, getInventory } from "@/src/services/inventoryService"; import { IChallengeProgress, ISeasonChallenge } from "@/src/types/inventoryTypes/inventoryTypes"; +import { ExportNightwave } from "warframe-public-export-plus"; +import { logger } from "@/src/utils/logger"; +import { IAffiliationMods } from "@/src/types/purchaseTypes"; export const updateChallengeProgressController: RequestHandler = async (req, res) => { const challenges = getJSONfromString(String(req.body)); const accountId = await getAccountIdForRequest(req); - const inventory = await getInventory(accountId, "ChallengeProgress SeasonChallengeHistory"); - addChallenges(inventory, challenges.ChallengeProgress); - addSeasonalChallengeHistory(inventory, challenges.SeasonChallengeHistory); + const inventory = await getInventory(accountId, "ChallengeProgress SeasonChallengeHistory Affiliations"); + if (challenges.ChallengeProgress) { + addChallenges(inventory, challenges.ChallengeProgress); + } + if (challenges.SeasonChallengeHistory) { + addSeasonalChallengeHistory(inventory, challenges.SeasonChallengeHistory); + } + const affiliationMods: IAffiliationMods[] = []; + if (challenges.ChallengeProgress && challenges.SeasonChallengeCompletions) { + for (const challenge of challenges.SeasonChallengeCompletions) { + // Ignore challenges that weren't completed just now + if (!challenges.ChallengeProgress.find(x => challenge.challenge.indexOf(x.Name) != -1)) { + continue; + } + + const meta = ExportNightwave.challenges[challenge.challenge]; + logger.debug("Completed challenge", meta); + + let affiliation = inventory.Affiliations.find(x => x.Tag == ExportNightwave.affiliationTag); + if (!affiliation) { + affiliation = + inventory.Affiliations[ + inventory.Affiliations.push({ + Tag: ExportNightwave.affiliationTag, + Standing: 0 + }) - 1 + ]; + } + affiliation.Standing += meta.standing; + + if (affiliationMods.length == 0) { + affiliationMods.push({ Tag: ExportNightwave.affiliationTag }); + } + affiliationMods[0].Standing ??= 0; + affiliationMods[0].Standing += meta.standing; + } + } await inventory.save(); - res.status(200).end(); + res.json({ + AffiliationMods: affiliationMods + }); }; interface IUpdateChallengeProgressRequest { - ChallengeProgress: IChallengeProgress[]; - SeasonChallengeHistory: ISeasonChallenge[]; - SeasonChallengeCompletions: ISeasonChallenge[]; + ChallengeProgress?: IChallengeProgress[]; + SeasonChallengeHistory?: ISeasonChallenge[]; + SeasonChallengeCompletions?: ISeasonChallenge[]; } diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index dde254f1..8397edfa 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -1207,11 +1207,11 @@ export const addFocusXpIncreases = (inventory: TInventoryDatabaseDocument, focus export const addSeasonalChallengeHistory = ( inventory: TInventoryDatabaseDocument, - itemsArray: ISeasonChallenge[] | undefined + itemsArray: ISeasonChallenge[] ): void => { const category = inventory.SeasonChallengeHistory; - itemsArray?.forEach(({ challenge, id }) => { + itemsArray.forEach(({ challenge, id }) => { const itemIndex = category.findIndex(i => i.challenge === challenge); if (itemIndex !== -1) { @@ -1222,17 +1222,14 @@ export const addSeasonalChallengeHistory = ( }); }; -export const addChallenges = ( - inventory: TInventoryDatabaseDocument, - itemsArray: IChallengeProgress[] | undefined -): void => { +export const addChallenges = (inventory: TInventoryDatabaseDocument, itemsArray: IChallengeProgress[]): void => { const category = inventory.ChallengeProgress; - itemsArray?.forEach(({ Name, Progress }) => { + itemsArray.forEach(({ Name, Progress }) => { const itemIndex = category.findIndex(i => i.Name === Name); if (itemIndex !== -1) { - category[itemIndex].Progress += Progress; + category[itemIndex].Progress = Progress; } else { category.push({ Name, Progress }); }