feat: daily reset for syndicate standing (#582)

This commit is contained in:
Sainan 2024-12-22 00:44:49 +01:00 committed by GitHub
parent 8a43eae230
commit d9c94664c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 40 additions and 9 deletions

View File

@ -1,5 +1,5 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountForRequest } from "@/src/services/loginService";
import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { toInventoryResponse } from "@/src/helpers/inventoryHelpers";
import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel";
import { config } from "@/src/services/configService"; import { config } from "@/src/services/configService";
@ -11,15 +11,15 @@ import { ExportCustoms, ExportFlavour, ExportKeys, ExportRegions, ExportResource
// eslint-disable-next-line @typescript-eslint/no-misused-promises // eslint-disable-next-line @typescript-eslint/no-misused-promises
const inventoryController: RequestHandler = async (request, response) => { const inventoryController: RequestHandler = async (request, response) => {
let accountId; let account;
try { try {
accountId = await getAccountIdForRequest(request); account = await getAccountForRequest(request);
} catch (e) { } catch (e) {
response.status(400).send("Log-in expired"); response.status(400).send("Log-in expired");
return; return;
} }
const inventory = await Inventory.findOne({ accountOwnerId: accountId }) const inventory = await Inventory.findOne({ accountOwnerId: account._id.toString() })
.populate<{ LoadOutPresets: ILoadoutDatabase }>("LoadOutPresets") .populate<{ LoadOutPresets: ILoadoutDatabase }>("LoadOutPresets")
.populate<{ Ships: IShipInventory }>("Ships", "-ShipInteriorColors"); .populate<{ Ships: IShipInventory }>("Ships", "-ShipInteriorColors");
@ -28,6 +28,29 @@ const inventoryController: RequestHandler = async (request, response) => {
return; return;
} }
// Handle daily reset
const today: number = Math.trunc(new Date().getTime() / 86400000);
if (account.LastLoginDay != today) {
account.LastLoginDay = today;
await account.save();
inventory.DailyAffiliation = 16000;
inventory.DailyAffiliationPvp = 16000;
inventory.DailyAffiliationLibrary = 16000;
inventory.DailyAffiliationCetus = 16000;
inventory.DailyAffiliationQuills = 16000;
inventory.DailyAffiliationSolaris = 16000;
inventory.DailyAffiliationVentkids = 16000;
inventory.DailyAffiliationVox = 16000;
inventory.DailyAffiliationEntrati = 16000;
inventory.DailyAffiliationNecraloid = 16000;
inventory.DailyAffiliationZariman = 16000;
inventory.DailyAffiliationKahl = 16000;
inventory.DailyAffiliationCavia = 16000;
inventory.DailyAffiliationHex = 16000;
await inventory.save();
}
//TODO: make a function that converts from database representation to client //TODO: make a function that converts from database representation to client
const inventoryJSON = inventory.toJSON(); const inventoryJSON = inventory.toJSON();

View File

@ -41,7 +41,7 @@ const loginController: RequestHandler = async (request, response) => {
}); });
logger.debug("created new account"); logger.debug("created new account");
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const { email, password, ...databaseAccount } = newAccount; const { email, password, LastLoginDay, ...databaseAccount } = newAccount;
const newLoginResponse: ILoginResponse = { const newLoginResponse: ILoginResponse = {
...databaseAccount, ...databaseAccount,
Groups: groups, Groups: groups,
@ -77,7 +77,7 @@ const loginController: RequestHandler = async (request, response) => {
} }
await account.save(); await account.save();
const { email, password, ...databaseAccount } = account.toJSON(); const { email, password, LastLoginDay, ...databaseAccount } = account.toJSON();
const newLoginResponse: ILoginResponse = { const newLoginResponse: ILoginResponse = {
...databaseAccount, ...databaseAccount,
Groups: groups, Groups: groups,

View File

@ -635,6 +635,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
DailyAffiliationZariman: Number, DailyAffiliationZariman: Number,
DailyAffiliationKahl: Number, DailyAffiliationKahl: Number,
DailyAffiliationCavia: Number, DailyAffiliationCavia: Number,
DailyAffiliationHex: Number,
//Daily Focus limit //Daily Focus limit
DailyFocus: Number, DailyFocus: Number,

View File

@ -33,7 +33,8 @@ const databaseAccountSchema = new Schema<IDatabaseAccountDocument>(
AmazonRefreshToken: { type: String }, AmazonRefreshToken: { type: String },
ConsentNeeded: { type: Boolean, required: true }, ConsentNeeded: { type: Boolean, required: true },
TrackedSettings: { type: [String], default: [] }, TrackedSettings: { type: [String], default: [] },
Nonce: { type: Number, default: 0 } Nonce: { type: Number, default: 0 },
LastLoginDay: { type: Number }
}, },
opts opts
); );

View File

@ -44,7 +44,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ
await personalRooms.save(); await personalRooms.save();
}; };
export const getAccountIdForRequest = async (req: Request): Promise<string> => { export const getAccountForRequest = async (req: Request) => {
if (!req.query.accountId) { if (!req.query.accountId) {
throw new Error("Request is missing accountId parameter"); throw new Error("Request is missing accountId parameter");
} }
@ -61,5 +61,9 @@ export const getAccountIdForRequest = async (req: Request): Promise<string> => {
if (!account) { if (!account) {
throw new Error("Invalid accountId-nonce pair"); throw new Error("Invalid accountId-nonce pair");
} }
return account._id.toString(); return account;
};
export const getAccountIdForRequest = async (req: Request): Promise<string> => {
return (await getAccountForRequest(req))._id.toString();
}; };

View File

@ -283,6 +283,7 @@ export interface IInventoryResponse {
NemesisAbandonedRewards: string[]; NemesisAbandonedRewards: string[];
DailyAffiliationKahl: number; DailyAffiliationKahl: number;
DailyAffiliationCavia: number; DailyAffiliationCavia: number;
DailyAffiliationHex?: number;
LastInventorySync: IOid; LastInventorySync: IOid;
NextRefill: IMongoDate; // Next time argon crystals will have a decay tick NextRefill: IMongoDate; // Next time argon crystals will have a decay tick
FoundToday?: IMiscItem[]; // for Argon Crystals FoundToday?: IMiscItem[]; // for Argon Crystals

View File

@ -32,6 +32,7 @@ export interface IDatabaseAccount {
ConsentNeeded: boolean; ConsentNeeded: boolean;
TrackedSettings: string[]; TrackedSettings: string[];
Nonce: number; Nonce: number;
LastLoginDay?: number;
} }
export interface ILoginRequest { export interface ILoginRequest {