1
mirror of https://github.com/thepeacockproject/Peacock synced 2025-03-21 00:04:22 +01:00
Peacock/components/contracts/contractsModeRouting.ts
Reece Dunham 3421ee385b
Fix some style issues
Signed-off-by: Reece Dunham <me@rdil.rocks>
2023-04-02 00:22:26 -04:00

106 lines
3.5 KiB
TypeScript

/*
* The Peacock Project - a HITMAN server replacement.
* Copyright (C) 2021-2023 The Peacock Project Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import type {
ContractSearchResult,
GameVersion,
RequestWithJwt,
} from "../types/types"
import type { Response } from "express"
import { getConfig, getVersionedConfig } from "../configSwizzleManager"
import { getUserData } from "../databaseHandler"
import { generateUserCentric } from "./dataGen"
import { controller, preserveContracts } from "../controller"
import { createLocationsData } from "../menus/destinations"
import { userAuths } from "../officialServerAuth"
import { log, LogLevel } from "../loggingInterop"
import {
getRemoteService,
contractCreationTutorialId,
getMaxProfileLevel,
} from "../utils"
export function contractsModeHome(req: RequestWithJwt, res: Response): void {
const contractsHomeTemplate = getConfig("ContractsTemplate", false)
const userData = getUserData(req.jwt.unique_name, req.gameVersion)
const contractCreationTutorial = controller.resolveContract(
contractCreationTutorialId,
)
res.json({
template: contractsHomeTemplate,
data: {
CreateContractTutorial: generateUserCentric(
contractCreationTutorial!,
req.jwt.unique_name,
req.gameVersion,
),
LocationsData: createLocationsData(req.gameVersion, true),
FilterData: getVersionedConfig(
"FilterData",
req.gameVersion,
false,
),
PlayerProfileXpData: {
XP: userData.Extensions.progression.PlayerProfileXP.Total,
Level: userData.Extensions.progression.PlayerProfileXP
.ProfileLevel,
MaxLevel: getMaxProfileLevel(req.gameVersion),
},
},
})
}
export async function officialSearchContract(
userId: string,
gameVersion: GameVersion,
filters: string[],
pageNumber: number,
): Promise<ContractSearchResult> {
const remoteService = getRemoteService(gameVersion)
const user = userAuths.get(userId)
if (!user) {
log(LogLevel.WARN, `No authentication for user ${userId}!`)
return undefined
}
const resp = await user._useService<{
data: ContractSearchResult
}>(
pageNumber === 0
? `https://${remoteService}.hitman.io/profiles/page/ContractSearch?sorting=`
: `https://${remoteService}.hitman.io/profiles/page/ContractSearchPaginate?page=${pageNumber}&sorting=`,
false,
filters,
)
preserveContracts(
resp.data.data.Data.Contracts.map(
(c) => c.UserCentricContract.Contract.Metadata.PublicId,
),
)
controller.storeIdToPublicId(
resp.data.data.Data.Contracts.map((c) => c.UserCentricContract),
)
return resp.data.data
}