zurri / src /controllers /adminController.ts
nexusbert's picture
add features
2fe81ea
import { Request, Response } from 'express';
import { AppDataSource } from '../config/database';
import { User } from '../entities/User';
import { Agent, AgentStatus } from '../entities/Agent';
import { ChatMessage } from '../entities/ChatMessage';
import { Transaction } from '../entities/Transaction';
const userRepository = AppDataSource.getRepository(User);
const agentRepository = AppDataSource.getRepository(Agent);
const messageRepository = AppDataSource.getRepository(ChatMessage);
const txRepository = AppDataSource.getRepository(Transaction);
export class AdminController {
async overview(req: Request, res: Response) {
try {
const { from, to } = req.query as any;
const [users, agents, messages] = await Promise.all([
userRepository.count(),
agentRepository.count(),
messageRepository.count(),
]);
const pendingAgents = await agentRepository.count({ where: { status: AgentStatus.PENDING } });
let pvQb = txRepository
.createQueryBuilder('t')
.select('SUM(ABS(t.amount))', 'sum');
if (from) pvQb = pvQb.where('t.createdAt >= :from', { from });
if (to) pvQb = pvQb.andWhere('t.createdAt <= :to', { to });
const totalPointsVolumeRow = await pvQb.getRawOne();
res.json({
totals: {
users,
agents,
messages,
pendingAgents,
pointsVolume: Number(totalPointsVolumeRow?.sum || 0),
},
});
} catch (error) {
console.error('Admin overview error:', error);
res.status(500).json({ error: 'Failed to get overview' });
}
}
}