feat: track LastLogin to provide it for friends & clan members #2013

Merged
OrdisPrime merged 1 commits from lastlogin into main 2025-05-08 08:20:46 -07:00
7 changed files with 15 additions and 4 deletions

View File

@ -1,4 +1,4 @@
import { toOid } from "@/src/helpers/inventoryHelpers";
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
import { getJSONfromString } from "@/src/helpers/stringHelpers";
import { Friendship } from "@/src/models/friendModel";
import { Account } from "@/src/models/loginModel";
@ -37,6 +37,7 @@ export const addPendingFriendController: RequestHandler = async (req, res) => {
const friendInfo: IFriendInfo = {
_id: toOid(account._id),
DisplayName: account.DisplayName,
LastLogin: toMongoDate(account.LastLogin),
Note: payload.message
};
await addInventoryDataToFriendInfo(friendInfo);

View File

@ -1,3 +1,4 @@
import { toMongoDate } from "@/src/helpers/inventoryHelpers";
import { Guild, GuildMember } from "@/src/models/guildModel";
import { Account } from "@/src/models/loginModel";
import { addInventoryDataToFriendInfo, areFriends } from "@/src/services/friendService";
@ -75,6 +76,7 @@ export const addToGuildController: RequestHandler = async (req, res) => {
const member: IGuildMemberClient = {
_id: { $oid: account._id.toString() },
DisplayName: account.DisplayName,
LastLogin: toMongoDate(account.LastLogin),
Rank: 7,
Status: 2
};

View File

@ -48,7 +48,8 @@ export const loginController: RequestHandler = async (request, response) => {
ConsentNeeded: false,
TrackedSettings: [],
Nonce: nonce,
BuildLabel: buildLabel
BuildLabel: buildLabel,
LastLogin: new Date()
});
logger.debug("created new account");
response.json(createLoginResponse(myAddress, newAccount, buildLabel));
@ -93,6 +94,7 @@ export const loginController: RequestHandler = async (request, response) => {
account.Nonce = nonce;
account.CountryCode = loginRequest.lang?.toUpperCase() ?? "EN";
account.BuildLabel = buildLabel;
account.LastLogin = new Date();
}
await account.save();

View File

@ -48,7 +48,8 @@ const toDatabaseAccount = (createAccount: IAccountCreation): IDatabaseAccountReq
CrossPlatformAllowed: true,
ForceLogoutVersion: 0,
TrackedSettings: [],
Nonce: 0
Nonce: 0,
LastLogin: new Date()
} satisfies IDatabaseAccountRequiredFields;
};

View File

@ -22,6 +22,7 @@ const databaseAccountSchema = new Schema<IDatabaseAccountJson>(
Nonce: { type: Number, default: 0 },
BuildLabel: String,
Dropped: Boolean,
LastLogin: { type: Date, default: 0 },
LatestEventMessageDate: { type: Date, default: 0 },
LastLoginRewardDate: { type: Number, default: 0 },
LoginDays: { type: Number, default: 1 }

View File

@ -4,9 +4,12 @@ import { config } from "./configService";
import { Account } from "../models/loginModel";
import { Types } from "mongoose";
import { Friendship } from "../models/friendModel";
import { toMongoDate } from "../helpers/inventoryHelpers";
export const addAccountDataToFriendInfo = async (info: IFriendInfo): Promise<void> => {
info.DisplayName = (await Account.findById(info._id.$oid, "DisplayName"))!.DisplayName;
const account = (await Account.findById(info._id.$oid, "DisplayName LastLogin"))!;
info.DisplayName = account.DisplayName;
info.LastLogin = toMongoDate(account.LastLogin);
};
export const addInventoryDataToFriendInfo = async (info: IFriendInfo): Promise<void> => {

View File

@ -17,6 +17,7 @@ export interface IDatabaseAccountRequiredFields extends IAccountAndLoginResponse
email: string;
password: string;
BuildLabel?: string;
LastLogin: Date;
}
export interface IDatabaseAccount extends IDatabaseAccountRequiredFields {