diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 366ae82f..66f37b34 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -1,5 +1,5 @@ import { RequestHandler } from "express"; -import { getAccountIdForRequest } from "@/src/services/loginService"; +import { getAccountForRequest } from "@/src/services/loginService"; import { toInventoryResponse } from "@/src/helpers/inventoryHelpers"; import { Inventory } from "@/src/models/inventoryModels/inventoryModel"; 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 const inventoryController: RequestHandler = async (request, response) => { - let accountId; + let account; try { - accountId = await getAccountIdForRequest(request); + account = await getAccountForRequest(request); } catch (e) { response.status(400).send("Log-in expired"); return; } - const inventory = await Inventory.findOne({ accountOwnerId: accountId }) + const inventory = await Inventory.findOne({ accountOwnerId: account._id.toString() }) .populate<{ LoadOutPresets: ILoadoutDatabase }>("LoadOutPresets") .populate<{ Ships: IShipInventory }>("Ships", "-ShipInteriorColors"); @@ -28,6 +28,29 @@ const inventoryController: RequestHandler = async (request, response) => { 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 const inventoryJSON = inventory.toJSON(); diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 40d5d5d1..22baf06f 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -41,7 +41,7 @@ const loginController: RequestHandler = async (request, response) => { }); logger.debug("created new account"); // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { email, password, ...databaseAccount } = newAccount; + const { email, password, LastLoginDay, ...databaseAccount } = newAccount; const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, @@ -77,7 +77,7 @@ const loginController: RequestHandler = async (request, response) => { } await account.save(); - const { email, password, ...databaseAccount } = account.toJSON(); + const { email, password, LastLoginDay, ...databaseAccount } = account.toJSON(); const newLoginResponse: ILoginResponse = { ...databaseAccount, Groups: groups, diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index c49e8eb6..41df80c4 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -635,6 +635,7 @@ const inventorySchema = new Schema( DailyAffiliationZariman: Number, DailyAffiliationKahl: Number, DailyAffiliationCavia: Number, + DailyAffiliationHex: Number, //Daily Focus limit DailyFocus: Number, diff --git a/src/models/loginModel.ts b/src/models/loginModel.ts index 03e52265..3048335c 100644 --- a/src/models/loginModel.ts +++ b/src/models/loginModel.ts @@ -33,7 +33,8 @@ const databaseAccountSchema = new Schema( AmazonRefreshToken: { type: String }, ConsentNeeded: { type: Boolean, required: true }, TrackedSettings: { type: [String], default: [] }, - Nonce: { type: Number, default: 0 } + Nonce: { type: Number, default: 0 }, + LastLoginDay: { type: Number } }, opts ); diff --git a/src/services/loginService.ts b/src/services/loginService.ts index 3ddb7982..36d4d57e 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -44,7 +44,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ await personalRooms.save(); }; -export const getAccountIdForRequest = async (req: Request): Promise => { +export const getAccountForRequest = async (req: Request) => { if (!req.query.accountId) { throw new Error("Request is missing accountId parameter"); } @@ -61,5 +61,9 @@ export const getAccountIdForRequest = async (req: Request): Promise => { if (!account) { throw new Error("Invalid accountId-nonce pair"); } - return account._id.toString(); + return account; +}; + +export const getAccountIdForRequest = async (req: Request): Promise => { + return (await getAccountForRequest(req))._id.toString(); }; diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index de502f11..b3259209 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -283,6 +283,7 @@ export interface IInventoryResponse { NemesisAbandonedRewards: string[]; DailyAffiliationKahl: number; DailyAffiliationCavia: number; + DailyAffiliationHex?: number; LastInventorySync: IOid; NextRefill: IMongoDate; // Next time argon crystals will have a decay tick FoundToday?: IMiscItem[]; // for Argon Crystals diff --git a/src/types/loginTypes.ts b/src/types/loginTypes.ts index f5dcfaf6..cfec7ad9 100644 --- a/src/types/loginTypes.ts +++ b/src/types/loginTypes.ts @@ -32,6 +32,7 @@ export interface IDatabaseAccount { ConsentNeeded: boolean; TrackedSettings: string[]; Nonce: number; + LastLoginDay?: number; } export interface ILoginRequest {