'use server'; import { findDatacentersInRegion, findNearbyDatacenters, getAllDatacentersWithLocation, } from '@/generated/prisma/sql.js'; import { prisma } from '@/lib/db.js'; import { serialize } from '@/lib/superjson.js'; interface ActionSuccess { ok: true; data: ReturnType>; } interface ActionError { ok: false; error: string; } type ActionResult = ActionSuccess | ActionError; export async function fetchDatacenters(): Promise< ActionResult< Array<{ id: string; name: string; operator: string; capacityMw: number; status: string; yearOpened: number; regionId: string; createdAt: Date; }> > > { try { const rows = await prisma.datacenter.findMany({ orderBy: { capacityMw: 'desc' }, }); return { ok: true, data: serialize(rows) }; } catch (err) { return { ok: false, error: `Failed to fetch datacenters: ${err instanceof Error ? err.message : String(err)}`, }; } } export async function fetchDatacentersInRegion( regionCode: string, ): Promise> { try { const rows = await prisma.$queryRawTyped(findDatacentersInRegion(regionCode)); return { ok: true, data: serialize(rows) }; } catch (err) { return { ok: false, error: `Failed to fetch datacenters in region ${regionCode}: ${err instanceof Error ? err.message : String(err)}`, }; } } export async function fetchAllDatacentersWithLocation(): Promise> { try { const rows = await prisma.$queryRawTyped(getAllDatacentersWithLocation()); return { ok: true, data: serialize(rows) }; } catch (err) { return { ok: false, error: `Failed to fetch datacenters with locations: ${err instanceof Error ? err.message : String(err)}`, }; } } export async function fetchNearbyDatacenters( lat: number, lng: number, radiusKm: number, ): Promise> { try { const rows = await prisma.$queryRawTyped(findNearbyDatacenters(lat, lng, radiusKm)); return { ok: true, data: serialize(rows) }; } catch (err) { return { ok: false, error: `Failed to fetch nearby datacenters: ${err instanceof Error ? err.message : String(err)}`, }; } }