From c9b3d4775cee46341584763a5893907889002ecb Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 20 Apr 2026 18:57:55 +0200 Subject: [PATCH] feat(admin): add typed models for admin users and overview --- frontend/src/modelTypes/IAdminOverview.ts | 26 +++++++++++++++++++ frontend/src/modelTypes/IAdminUser.ts | 9 +++++++ frontend/src/models/adminOverview.ts | 31 +++++++++++++++++++++++ frontend/src/models/adminUser.ts | 14 ++++++++++ 4 files changed, 80 insertions(+) create mode 100644 frontend/src/modelTypes/IAdminOverview.ts create mode 100644 frontend/src/modelTypes/IAdminUser.ts create mode 100644 frontend/src/models/adminOverview.ts create mode 100644 frontend/src/models/adminUser.ts diff --git a/frontend/src/modelTypes/IAdminOverview.ts b/frontend/src/modelTypes/IAdminOverview.ts new file mode 100644 index 000000000..02202cbe6 --- /dev/null +++ b/frontend/src/modelTypes/IAdminOverview.ts @@ -0,0 +1,26 @@ +import type {IAbstract} from './IAbstract' + +export interface IAdminOverviewShares { + linkShares: number + teamShares: number + userShares: number +} + +export interface IAdminOverviewLicense { + licensed: boolean + instanceId: string + features: string[] + maxUsers: number + expiresAt: Date + validatedAt: Date + lastCheckFailed: boolean +} + +export interface IAdminOverview extends IAbstract { + users: number + projects: number + tasks: number + teams: number + shares: IAdminOverviewShares + license: IAdminOverviewLicense +} diff --git a/frontend/src/modelTypes/IAdminUser.ts b/frontend/src/modelTypes/IAdminUser.ts new file mode 100644 index 000000000..74475e6af --- /dev/null +++ b/frontend/src/modelTypes/IAdminUser.ts @@ -0,0 +1,9 @@ +import type {IUser} from './IUser' + +export interface IAdminUser extends IUser { + status: number + isAdmin: boolean + issuer: string + subject?: string + authProvider?: string +} diff --git a/frontend/src/models/adminOverview.ts b/frontend/src/models/adminOverview.ts new file mode 100644 index 000000000..7a3c8f7ef --- /dev/null +++ b/frontend/src/models/adminOverview.ts @@ -0,0 +1,31 @@ +import AbstractModel from './abstractModel' +import type {IAdminOverview, IAdminOverviewLicense, IAdminOverviewShares} from '@/modelTypes/IAdminOverview' + +export default class AdminOverviewModel extends AbstractModel implements IAdminOverview { + users = 0 + projects = 0 + tasks = 0 + teams = 0 + shares: IAdminOverviewShares = { + linkShares: 0, + teamShares: 0, + userShares: 0, + } + license: IAdminOverviewLicense = { + licensed: false, + instanceId: '', + features: [], + maxUsers: 0, + expiresAt: new Date(0), + validatedAt: new Date(0), + lastCheckFailed: false, + } + + constructor(data: Partial = {}) { + super() + this.assignData(data) + + this.license.expiresAt = new Date(this.license.expiresAt) + this.license.validatedAt = new Date(this.license.validatedAt) + } +} diff --git a/frontend/src/models/adminUser.ts b/frontend/src/models/adminUser.ts new file mode 100644 index 000000000..c993252ac --- /dev/null +++ b/frontend/src/models/adminUser.ts @@ -0,0 +1,14 @@ +import UserModel from '@/models/user' +import type {IAdminUser} from '@/modelTypes/IAdminUser' + +export default class AdminUserModel extends UserModel implements IAdminUser { + declare status: number + declare isAdmin: boolean + declare issuer: string + declare subject?: string + declare authProvider?: string + + constructor(data: Partial = {}) { + super(data) + } +}