website refactor
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { ListUsersUseCase } from '@core/admin/application/use-cases/ListUsersUseCase';
|
||||
import type { IAdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import type { AdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import type { Provider } from '@nestjs/common';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { InMemoryAdminPersistenceModule } from '../../persistence/inmemory/InMemoryAdminPersistenceModule';
|
||||
@@ -18,14 +18,14 @@ const adminProviders: Provider[] = [
|
||||
{
|
||||
provide: ListUsersUseCase,
|
||||
useFactory: (
|
||||
repository: IAdminUserRepository,
|
||||
repository: AdminUserRepository,
|
||||
) => new ListUsersUseCase(repository),
|
||||
inject: [ADMIN_USER_REPOSITORY_TOKEN],
|
||||
},
|
||||
{
|
||||
provide: GetDashboardStatsUseCase,
|
||||
useFactory: (
|
||||
repository: IAdminUserRepository,
|
||||
repository: AdminUserRepository,
|
||||
) => new GetDashboardStatsUseCase(repository),
|
||||
inject: [ADMIN_USER_REPOSITORY_TOKEN],
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
|
||||
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort/UseCaseOutputPort/UseCaseOutputPort_TEMP_TEMP';
|
||||
import type { DashboardStatsResult } from '../use-cases/GetDashboardStatsUseCase';
|
||||
|
||||
export interface DashboardStatsResponse {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ListUsersResult } from '@core/admin/application/use-cases/ListUsersUseCase';
|
||||
import type { AdminUser } from '@core/admin/domain/entities/AdminUser';
|
||||
import { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
|
||||
import { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort/UseCaseOutputPort/UseCaseOutputPort_TEMP_TEMP';
|
||||
import { UserListResponseDto, UserResponseDto } from '../dtos/UserResponseDto';
|
||||
|
||||
export type ListUsersViewModel = UserListResponseDto;
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import type { IAdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import type { AdminUserRepository } from '@core/admin/domain/repositories/AdminUserRepository';
|
||||
import { AuthorizationService } from '@core/admin/domain/services/AuthorizationService';
|
||||
import { UserId } from '@core/admin/domain/value-objects/UserId';
|
||||
import { Result } from '@core/shared/domain/Result';
|
||||
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
||||
import type { AdminUser } from '@core/admin/domain/entities/AdminUser';
|
||||
import type { UserRole } from '@core/admin/domain/value-objects/UserRole';
|
||||
|
||||
export interface DashboardStatsResult {
|
||||
totalUsers: number;
|
||||
@@ -44,7 +46,7 @@ export type GetDashboardStatsApplicationError = ApplicationErrorCode<GetDashboar
|
||||
|
||||
export class GetDashboardStatsUseCase {
|
||||
constructor(
|
||||
private readonly adminUserRepo: IAdminUserRepository,
|
||||
private readonly adminUserRepo: AdminUserRepository,
|
||||
) {}
|
||||
|
||||
async execute(input: GetDashboardStatsInput): Promise<Result<DashboardStatsResult, GetDashboardStatsApplicationError>> {
|
||||
@@ -73,25 +75,25 @@ export class GetDashboardStatsUseCase {
|
||||
|
||||
// Calculate basic stats
|
||||
const totalUsers = allUsers.length;
|
||||
const activeUsers = allUsers.filter(u => u.status.value === 'active').length;
|
||||
const suspendedUsers = allUsers.filter(u => u.status.value === 'suspended').length;
|
||||
const deletedUsers = allUsers.filter(u => u.status.value === 'deleted').length;
|
||||
const systemAdmins = allUsers.filter(u => u.isSystemAdmin()).length;
|
||||
const activeUsers = allUsers.filter((u: AdminUser) => u.status.value === 'active').length;
|
||||
const suspendedUsers = allUsers.filter((u: AdminUser) => u.status.value === 'suspended').length;
|
||||
const deletedUsers = allUsers.filter((u: AdminUser) => u.status.value === 'deleted').length;
|
||||
const systemAdmins = allUsers.filter((u: AdminUser) => u.isSystemAdmin()).length;
|
||||
|
||||
// Recent logins (last 24 hours)
|
||||
const oneDayAgo = new Date();
|
||||
oneDayAgo.setDate(oneDayAgo.getDate() - 1);
|
||||
const recentLogins = allUsers.filter(u => u.lastLoginAt && u.lastLoginAt > oneDayAgo).length;
|
||||
const recentLogins = allUsers.filter((u: AdminUser) => u.lastLoginAt && u.lastLoginAt > oneDayAgo).length;
|
||||
|
||||
// New users today
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const newUsersToday = allUsers.filter(u => u.createdAt > today).length;
|
||||
const newUsersToday = allUsers.filter((u: AdminUser) => u.createdAt > today).length;
|
||||
|
||||
// Role distribution
|
||||
const roleCounts: Record<string, number> = {};
|
||||
allUsers.forEach(user => {
|
||||
user.roles.forEach(role => {
|
||||
allUsers.forEach((user: AdminUser) => {
|
||||
user.roles.forEach((role: UserRole) => {
|
||||
const roleValue = role.value;
|
||||
roleCounts[roleValue] = (roleCounts[roleValue] || 0) + 1;
|
||||
});
|
||||
@@ -110,7 +112,7 @@ export class GetDashboardStatsUseCase {
|
||||
date.setDate(date.getDate() - i);
|
||||
const dateStr = date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
||||
|
||||
const count = allUsers.filter(u => {
|
||||
const count = allUsers.filter((u: AdminUser) => {
|
||||
const userDate = new Date(u.createdAt);
|
||||
return userDate.toDateString() === date.toDateString();
|
||||
}).length;
|
||||
@@ -129,12 +131,12 @@ export class GetDashboardStatsUseCase {
|
||||
date.setDate(date.getDate() - i);
|
||||
const dateStr = date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
||||
|
||||
const newUsers = allUsers.filter(u => {
|
||||
const newUsers = allUsers.filter((u: AdminUser) => {
|
||||
const userDate = new Date(u.createdAt);
|
||||
return userDate.toDateString() === date.toDateString();
|
||||
}).length;
|
||||
|
||||
const logins = allUsers.filter(u => {
|
||||
const logins = allUsers.filter((u: AdminUser) => {
|
||||
const loginDate = u.lastLoginAt;
|
||||
return loginDate && loginDate.toDateString() === date.toDateString();
|
||||
}).length;
|
||||
|
||||
Reference in New Issue
Block a user