feat: add user last seen field

This commit is contained in:
Sonny
2024-10-07 02:07:39 +02:00
parent 24cea2b0b2
commit c8fb5af44d
11 changed files with 103 additions and 36 deletions

View File

@@ -16,10 +16,9 @@ class UserWithRelationCountDto {
isAdmin: this.user.isAdmin,
createdAt: this.user.createdAt,
updatedAt: this.user.updatedAt,
count: {
link: Number(this.user.$extras.totalLinks),
collection: Number(this.user.$extras.totalCollections),
},
lastSeenAt: this.user.lastSeenAt,
linksCount: Number(this.user.$extras.totalLinks),
collectionsCount: Number(this.user.$extras.totalCollections),
});
}

View File

@@ -0,0 +1,9 @@
import type { HttpContext } from '@adonisjs/core/http';
import type { NextFn } from '@adonisjs/core/types/http';
export default class SilentAuthMiddleware {
async handle(ctx: HttpContext, next: NextFn) {
await ctx.auth.check();
return next();
}
}

View File

@@ -0,0 +1,16 @@
import type { HttpContext } from '@adonisjs/core/http';
import type { NextFn } from '@adonisjs/core/types/http';
import { DateTime } from 'luxon';
export default class UpdateUserLastSeenMiddleware {
async handle(ctx: HttpContext, next: NextFn) {
const user = ctx.auth.user;
if (user) {
user.lastSeenAt = DateTime.local();
await user.save();
}
const output = await next();
return output;
}
}

View File

@@ -4,6 +4,7 @@ import type { GoogleToken } from '@adonisjs/ally/types';
import { column, computed, hasMany } from '@adonisjs/lucid/orm';
import type { HasMany } from '@adonisjs/lucid/types/relations';
import AppBaseModel from './app_base_model.js';
import { DateTime } from 'luxon';
export default class User extends AppBaseModel {
@column()
@@ -44,4 +45,10 @@ export default class User extends AppBaseModel {
get fullname() {
return this.nickName || this.name;
}
@column.dateTime({
autoCreate: true,
autoUpdate: true,
})
declare lastSeenAt: DateTime;
}