From 4d531b2f2d88b0cab6ec9c4666161a93770dd123 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 2 Feb 2026 23:12:35 -0500 Subject: [PATCH] feat: auto-populate auvik_tenants and rmm_sites tables when fetching mappings When includeUnmapped=true, the mapping APIs now populate the auvik_tenants and rmm_sites tables with all fetched data. This ensures accurate mapped/unmapped counts on the dashboard. --- app/api/auvik/tenant-mappings/route.ts | 18 ++++++++++++++++++ app/api/rmm/site-mappings/route.ts | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/api/auvik/tenant-mappings/route.ts b/app/api/auvik/tenant-mappings/route.ts index 188a20e..60deea0 100644 --- a/app/api/auvik/tenant-mappings/route.ts +++ b/app/api/auvik/tenant-mappings/route.ts @@ -42,6 +42,24 @@ export async function GET(request: NextRequest) { const auvikClient = getAuvikClient(); const allTenants = await auvikClient.getTenants(); + // Populate auvik_tenants table with all tenants + for (const tenant of allTenants) { + try { + await pool.query( + `INSERT INTO auvik_tenants (tenant_id, tenant_name, domain_prefix, last_sync_at) + VALUES ($1, $2, $3, CURRENT_TIMESTAMP) + ON CONFLICT (tenant_id) DO UPDATE SET + tenant_name = EXCLUDED.tenant_name, + domain_prefix = EXCLUDED.domain_prefix, + last_sync_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP`, + [tenant.id, tenant.domainPrefix, tenant.domainPrefix] + ); + } catch (err) { + console.error(`Failed to upsert tenant ${tenant.id}:`, err); + } + } + const mappedTenantIds = new Set(mappings.map((m) => m.auvikTenantId)); const unmappedTenants = allTenants diff --git a/app/api/rmm/site-mappings/route.ts b/app/api/rmm/site-mappings/route.ts index d2e979e..ae41d6e 100644 --- a/app/api/rmm/site-mappings/route.ts +++ b/app/api/rmm/site-mappings/route.ts @@ -73,6 +73,23 @@ export async function GET(request: NextRequest) { const rmmClient = getDattoRMMClient(); const allSites = await rmmClient.getSites(); + // Populate rmm_sites table with all sites + for (const site of allSites) { + try { + await pool.query( + `INSERT INTO rmm_sites (site_uid, site_name, last_sync_at) + VALUES ($1, $2, CURRENT_TIMESTAMP) + ON CONFLICT (site_uid) DO UPDATE SET + site_name = EXCLUDED.site_name, + last_sync_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP`, + [site.uid, site.name] + ); + } catch (err) { + console.error(`Failed to upsert site ${site.uid}:`, err); + } + } + // Get list of already mapped site UIDs const mappedSiteUids = new Set(mappings.map((m: any) => m.rmm_site_uid));