import {PageParams} from "@/types/next"; import {Page, PageContent, PageHeader, PageTitle} from "@/features/layout/page"; import {Card, CardContent, CardHeader, CardTitle} from "@/components/ui/card"; import {Building2, Database, DatabaseBackup, Folder, RefreshCcw, Server, Workflow} from "lucide-react"; import {currentUser} from "@/lib/auth/current-user"; import {notFound} from "next/navigation"; import {db} from "@/db"; import {asc, inArray} from "drizzle-orm"; import * as drizzleDb from "@/db"; import {listOrganizations} from "@/lib/auth/auth"; import {Metadata} from "next"; export const metadata: Metadata = { title: "Home", }; export default async function RoutePage(props: PageParams<{}>) { const user = await currentUser(); const organizations = await listOrganizations() if (!user || !organizations) notFound(); const organizationIds = organizations.map(project => project.id); const agents = await db.query.agent.findMany({}); const projects = await db.query.project.findMany({ where: inArray(drizzleDb.schemas.project.organizationId, organizationIds), }); const projectIds = projects.map(project => project.id); const databasesOfAllProjects = await db.query.database.findMany({ where: inArray(drizzleDb.schemas.database.projectId, projectIds), }) const databaseIds = databasesOfAllProjects.map((database) => database.id); const backupsEvolution = await db.query.backup.findMany({ columns: { id: true, createdAt: true, deletedAt: true, }, orderBy: [asc(drizzleDb.schemas.backup.id)], where: inArray(drizzleDb.schemas.backup.databaseId, databaseIds), }); const availableBackups = backupsEvolution.filter(backup => backup.deletedAt == null); return ( Dashboard
Organizations
{organizations.length}

Number of organizations

Projects
{projects.length}

Number of projects

Databases
{databasesOfAllProjects.length}

Databases across all projects

Agents
{agents.length}

Registered agents

Total Backups
{backupsEvolution.length}

All backups recorded

Available Backups
{availableBackups.length}

Currently active backups

{/*Do not delete*/} {/*
*/} {/*
*/} {/*
*/} {/*
*/} {/*
*/} {/*
*/} {/*
*/} ); }