feat: daily reset for syndicate standing #582

Merged
Sainan merged 3 commits from daily-reset into main 2024-12-21 15:44:49 -08:00
7 changed files with 40 additions and 9 deletions

View File

@ -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";
@ -12,15 +12,15 @@ import { ExportCustoms, ExportFlavour, ExportKeys, ExportResources } from "warfr
// 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");
@ -29,6 +29,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();

View File

@ -36,7 +36,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,
@ -72,7 +72,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,

View File

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

View File

@ -33,7 +33,8 @@ const databaseAccountSchema = new Schema<IDatabaseAccountDocument>(
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 }
},
coderabbitai[bot] commented 2024-12-18 16:50:16 -08:00 (Migrated from github.com)
Review

🛠️ Refactor suggestion

Consider adding a default value for LastLoginDay.

While the schema addition matches the interface, consider setting a default value for new accounts to ensure consistency.

Apply this change:

-        LastLoginDay: { type: Number }
+        LastLoginDay: { type: Number, default: () => Math.floor(Date.now() / (24 * 60 * 60 * 1000)) }

This sets the default to the current day number (days since epoch) when creating new accounts.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

        Nonce: { type: Number, default: 0 },
        LastLoginDay: { type: Number, default: () => Math.floor(Date.now() / (24 * 60 * 60 * 1000)) }
_:hammer_and_wrench: Refactor suggestion_ **Consider adding a default value for LastLoginDay.** While the schema addition matches the interface, consider setting a default value for new accounts to ensure consistency. Apply this change: ```diff - LastLoginDay: { type: Number } + LastLoginDay: { type: Number, default: () => Math.floor(Date.now() / (24 * 60 * 60 * 1000)) } ``` This sets the default to the current day number (days since epoch) when creating new accounts. <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **IMPORTANT** > Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements. `````suggestion Nonce: { type: Number, default: 0 }, LastLoginDay: { type: Number, default: () => Math.floor(Date.now() / (24 * 60 * 60 * 1000)) } ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated reply by CodeRabbit -->
Review

Fuck off

Fuck off
coderabbitai[bot] commented 2024-12-18 16:52:05 -08:00 (Migrated from github.com)
Review

@Sainan I’m sorry to see you upset. Let me know if there’s anything I can do to help.

(_ _)( ; ; )

@Sainan I’m sorry to see you upset. Let me know if there’s anything I can do to help. (\_ _)( ; ; ) <!-- This is an auto-generated reply by CodeRabbit -->
opts
);

View File

@ -44,7 +44,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ
await personalRooms.save();
};
export const getAccountIdForRequest = async (req: Request): Promise<string> => {
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<string> => {
if (!account) {
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

@ -275,6 +275,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

View File

@ -32,6 +32,7 @@ export interface IDatabaseAccount {
ConsentNeeded: boolean;
TrackedSettings: string[];
Nonce: number;
LastLoginDay?: number;
coderabbitai[bot] commented 2024-12-18 16:50:16 -08:00 (Migrated from github.com)
Review

💡 Codebase verification

Potential backward compatibility issue found

The field is marked as optional in the interface (LastLoginDay?: number), but the MongoDB schema in loginModel.ts defines it as a required field without a default value (LastLoginDay: { type: Number }). This mismatch could cause runtime errors for existing accounts that don't have this field set.

  • src/models/loginModel.ts: Add a default value to the LastLoginDay schema field to maintain backward compatibility
  • src/controllers/api/inventoryController.ts: Add null check before comparing account.LastLoginDay with today
🔗 Analysis chain

LGTM! Verify backward compatibility.

The optional LastLoginDay field is properly typed and maintains backward compatibility with existing accounts.

Let's verify there are no required usages of this optional field:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for direct non-null assertions or required usages of LastLoginDay
rg -l "LastLoginDay!" || rg -l "LastLoginDay: number"

Length of output: 54


Script:

#!/bin/bash
# Search for any usage of LastLoginDay to verify it's treated as optional
rg "LastLoginDay" -A 2 -B 2

Length of output: 981

_:bulb: Codebase verification_ **Potential backward compatibility issue found** The field is marked as optional in the interface (`LastLoginDay?: number`), but the MongoDB schema in `loginModel.ts` defines it as a required field without a default value (`LastLoginDay: { type: Number }`). This mismatch could cause runtime errors for existing accounts that don't have this field set. - `src/models/loginModel.ts`: Add a default value to the `LastLoginDay` schema field to maintain backward compatibility - `src/controllers/api/inventoryController.ts`: Add null check before comparing `account.LastLoginDay` with `today` <details> <summary>🔗 Analysis chain</summary> **LGTM! Verify backward compatibility.** The optional `LastLoginDay` field is properly typed and maintains backward compatibility with existing accounts. Let's verify there are no required usages of this optional field: </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Search for direct non-null assertions or required usages of LastLoginDay rg -l "LastLoginDay!" || rg -l "LastLoginDay: number" ``` Length of output: 54 --- Script: ```shell #!/bin/bash # Search for any usage of LastLoginDay to verify it's treated as optional rg "LastLoginDay" -A 2 -B 2 ``` Length of output: 981 </details> <!-- This is an auto-generated reply by CodeRabbit -->
Review

Non-issue.

Non-issue.
coderabbitai[bot] commented 2024-12-18 16:51:51 -08:00 (Migrated from github.com)
Review

@Sainan, understood. Acknowledged your decision; no further action will be taken on this matter.

@Sainan, understood. Acknowledged your decision; no further action will be taken on this matter. <!-- This is an auto-generated reply by CodeRabbit -->
}
export interface ILoginRequest {