forked from OpenWF/SpaceNinjaServer
		
	feat: daily reset for syndicate standing (#582)
This commit is contained in:
		
							parent
							
								
									8a43eae230
								
							
						
					
					
						commit
						d9c94664c3
					
				@ -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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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,
 | 
				
			||||||
 | 
				
			|||||||
@ -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,
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
				
			|||||||
@ -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();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user