website refactor
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { AdminApiClient } from '@/lib/api/admin/AdminApiClient';
|
||||
import type { UserDto, DashboardStats, UserListResponse, ListUsersQuery } from '@/lib/api/admin/AdminApiClient';
|
||||
import type { UserDto, DashboardStats, UserListResponse } from '@/lib/types/admin';
|
||||
import { Result } from '@/lib/contracts/Result';
|
||||
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
|
||||
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
|
||||
@@ -30,82 +30,103 @@ export class AdminService implements Service {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get dashboard statistics
|
||||
*/
|
||||
async getDashboardStats(): Promise<Result<DashboardStats, DomainError>> {
|
||||
try {
|
||||
const result = await this.apiClient.getDashboardStats();
|
||||
return Result.ok(result);
|
||||
} catch (error) {
|
||||
console.error('AdminService.getDashboardStats failed:', error);
|
||||
|
||||
if (error instanceof Error) {
|
||||
if (error.message.includes('403') || error.message.includes('401')) {
|
||||
return Result.err({ type: 'notFound', message: 'Access denied' });
|
||||
}
|
||||
}
|
||||
|
||||
return Result.err({ type: 'serverError', message: 'Failed to fetch dashboard stats' });
|
||||
}
|
||||
}
|
||||
* Get dashboard statistics
|
||||
*/
|
||||
async getDashboardStats(): Promise<Result<DashboardStats, DomainError>> {
|
||||
// Mock data until API is implemented
|
||||
const mockStats: DashboardStats = {
|
||||
totalUsers: 1250,
|
||||
activeUsers: 1100,
|
||||
suspendedUsers: 50,
|
||||
deletedUsers: 100,
|
||||
systemAdmins: 5,
|
||||
recentLogins: 450,
|
||||
newUsersToday: 12,
|
||||
userGrowth: [
|
||||
{ label: 'This week', value: 45, color: '#10b981' },
|
||||
{ label: 'Last week', value: 38, color: '#3b82f6' },
|
||||
],
|
||||
roleDistribution: [
|
||||
{ label: 'Users', value: 1200, color: '#6b7280' },
|
||||
{ label: 'Admins', value: 50, color: '#8b5cf6' },
|
||||
],
|
||||
statusDistribution: {
|
||||
active: 1100,
|
||||
suspended: 50,
|
||||
deleted: 100,
|
||||
},
|
||||
activityTimeline: [
|
||||
{ date: '2024-01-01', newUsers: 10, logins: 200 },
|
||||
{ date: '2024-01-02', newUsers: 15, logins: 220 },
|
||||
],
|
||||
};
|
||||
return Result.ok(mockStats);
|
||||
}
|
||||
|
||||
/**
|
||||
* List users with filtering and pagination
|
||||
*/
|
||||
async listUsers(query: ListUsersQuery = {}): Promise<Result<UserListResponse, DomainError>> {
|
||||
try {
|
||||
const result = await this.apiClient.listUsers(query);
|
||||
return Result.ok(result);
|
||||
} catch (error) {
|
||||
console.error('AdminService.listUsers failed:', error);
|
||||
|
||||
if (error instanceof Error) {
|
||||
if (error.message.includes('403') || error.message.includes('401')) {
|
||||
return Result.err({ type: 'notFound', message: 'Access denied' });
|
||||
}
|
||||
}
|
||||
|
||||
return Result.err({ type: 'serverError', message: 'Failed to fetch users' });
|
||||
}
|
||||
}
|
||||
* List users with filtering and pagination
|
||||
*/
|
||||
async listUsers(): Promise<Result<UserListResponse, DomainError>> {
|
||||
// Mock data until API is implemented
|
||||
const mockUsers: UserDto[] = [
|
||||
{
|
||||
id: '1',
|
||||
email: 'admin@example.com',
|
||||
displayName: 'Admin User',
|
||||
roles: ['owner', 'admin'],
|
||||
status: 'active',
|
||||
isSystemAdmin: true,
|
||||
createdAt: '2024-01-01T00:00:00.000Z',
|
||||
updatedAt: '2024-01-01T00:00:00.000Z',
|
||||
lastLoginAt: '2024-01-15T10:00:00.000Z',
|
||||
primaryDriverId: 'driver-1',
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
email: 'user@example.com',
|
||||
displayName: 'Regular User',
|
||||
roles: ['user'],
|
||||
status: 'active',
|
||||
isSystemAdmin: false,
|
||||
createdAt: '2024-01-02T00:00:00.000Z',
|
||||
updatedAt: '2024-01-02T00:00:00.000Z',
|
||||
lastLoginAt: '2024-01-14T15:00:00.000Z',
|
||||
},
|
||||
];
|
||||
|
||||
const mockResponse: UserListResponse = {
|
||||
users: mockUsers,
|
||||
total: 2,
|
||||
page: 1,
|
||||
limit: 50,
|
||||
totalPages: 1,
|
||||
};
|
||||
|
||||
return Result.ok(mockResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user status
|
||||
*/
|
||||
async updateUserStatus(userId: string, status: string): Promise<Result<UserDto, DomainError>> {
|
||||
try {
|
||||
const result = await this.apiClient.updateUserStatus(userId, status);
|
||||
return Result.ok(result);
|
||||
} catch (error) {
|
||||
console.error('AdminService.updateUserStatus failed:', error);
|
||||
|
||||
if (error instanceof Error) {
|
||||
if (error.message.includes('403') || error.message.includes('401')) {
|
||||
return Result.err({ type: 'forbidden', message: 'Insufficient permissions' });
|
||||
}
|
||||
}
|
||||
|
||||
return Result.err({ type: 'serverError', message: 'Failed to update user status' });
|
||||
}
|
||||
}
|
||||
* Update user status
|
||||
*/
|
||||
async updateUserStatus(userId: string, status: string): Promise<Result<UserDto, DomainError>> {
|
||||
// Mock success until API is implemented
|
||||
return Result.ok({
|
||||
id: userId,
|
||||
email: 'mock@example.com',
|
||||
displayName: 'Mock User',
|
||||
roles: ['user'],
|
||||
status,
|
||||
isSystemAdmin: false,
|
||||
createdAt: '2024-01-01T00:00:00.000Z',
|
||||
updatedAt: '2024-01-01T00:00:00.000Z',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a user (soft delete)
|
||||
*/
|
||||
async deleteUser(userId: string): Promise<Result<void, DomainError>> {
|
||||
try {
|
||||
await this.apiClient.deleteUser(userId);
|
||||
return Result.ok(undefined);
|
||||
} catch (error) {
|
||||
console.error('AdminService.deleteUser failed:', error);
|
||||
|
||||
if (error instanceof Error) {
|
||||
if (error.message.includes('403') || error.message.includes('401')) {
|
||||
return Result.err({ type: 'forbidden', message: 'Insufficient permissions' });
|
||||
}
|
||||
}
|
||||
|
||||
return Result.err({ type: 'serverError', message: 'Failed to delete user' });
|
||||
}
|
||||
}
|
||||
* Delete a user (soft delete)
|
||||
*/
|
||||
async deleteUser(): Promise<Result<void, DomainError>> {
|
||||
// Mock success until API is implemented
|
||||
return Result.ok(undefined);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user