/** * Admin Stats Actions * Server-side actions for core dashboard statistics * * Usage in your Next.js app: * * ```javascript * // app/(admin)/admin/[...admin]/page.js * import { protectAdmin } from '@zen/core/features/admin'; * import { getDashboardStats } from '@zen/core/features/admin/actions'; * import { AdminPagesClient } from '@zen/core/features/admin/pages'; * * export default async function AdminPage({ params }) { * const { user } = await protectAdmin(); * * const statsResult = await getDashboardStats(); * const dashboardStats = statsResult.success ? statsResult.stats : null; * * return ( * * ); * } * ``` */ 'use server'; import { query } from '@zen/core/database'; import { fail } from '@zen/core/shared/logger'; /** * Get total number of users * @returns {Promise} */ async function getTotalUsersCount() { try { const result = await query( `SELECT COUNT(*) as count FROM zen_auth_users` ); return parseInt(result.rows[0].count) || 0; } catch (error) { fail(`Error getting users count: ${error.message}`); return 0; } } /** * Get core dashboard statistics * @returns {Promise} */ export async function getDashboardStats() { try { const totalUsers = await getTotalUsersCount(); return { success: true, stats: { totalUsers, } }; } catch (error) { fail(`Error getting dashboard stats: ${error.message}`); return { success: false, error: error.message || 'Failed to get dashboard statistics' }; } }