Skip to Content
IssuesService Layer Adoption — Completed 2026-05-07

Service Layer Adoption — Completed 2026-05-07

Overview

All API routes and Next.js API routes now delegate data access to service classes. The migration is complete. This document is kept for historical reference.


Pattern

Services (apps/api/src/services/, apps/dashboard/src/services/, apps/manage/src/services/):

  • Import db directly: import { db } from "../db" (API) or import { db } from "@/lib/db" (Next.js apps)
  • Export plain async functions containing all Prisma queries and business logic

Routes / handlers:

  • Import service functions only — no import { db }
  • Responsible for: auth checks, request/response mapping, writeAuditLog, queue enqueue calls

Exception: apps/api/src/routers/auth.ts and apps/api/src/routers/tenant/credits.ts retain import { db } because @leadmetrics/billing external functions (getOrCreateCreditBalance, createTopupOrder, applyTopupPayment) require db passed as a parameter. Those signatures cannot be changed.


Coverage

Fastify API (apps/api/src/routers/) — 88 routers, all clean

Service files under apps/api/src/services/:

Service FileUsed By
auth.service.tsauth.ts
blog.service.tsblog.ts, dm/blog.ts
landing-page.service.tslanding-pages.ts, dm/landing-pages.ts
social.service.tssocial.ts, dm/social.ts
strategy.service.tsdm/strategy.ts, tenant/main.ts
channels.service.tschannels.ts, channel-connect.ts, blog.ts
channel-connect.service.tschannel-connect.ts
connected-channel.service.tschannels.ts, channel-connect.ts, blog.ts
campaign.service.tscampaigns.ts
campaigns.service.tscampaigns.ts
lead.service.tsleads.ts
baseline-sync.service.tsbaseline.ts
billing.service.tsadmin/billing.ts
admin-billing.service.tsadmin/billing.ts
zoho-books-sync.tsadmin/tenants.ts
tenants.service.tsadmin/tenants.ts
admin-tenants.service.tsadmin/tenants.ts
activities.service.tsdm/activities.ts
contacts.service.tsdm/contacts.ts
keywords.service.tsdm/keywords.ts
search-terms.service.tsdm/search-terms.ts
content-briefs.service.tsdm/content-briefs.ts
context.service.tsdm/context.ts
costs.service.tsdm/costs.ts
credits.service.tsdm/credits.ts
newsletters.service.tsdm/newsletters.ts, newsletters.ts
action-items.service.tsdm/action-items.ts, admin/action-items.ts, tenant/action-items.ts
important-days.service.tsdm/important-days.ts, admin/important-days.ts, tenant/important-days.ts
channel-action-items.service.tsdm/channel-action-items.ts, tenant/channel-action-items.ts
pipeline.service.tsdm/pipeline.ts
reports.service.tsdm/reports.ts
agents.service.tsdm/agents.ts, admin/agents.ts
ai-visibility.service.tsdm/ai-visibility.ts, ai-visibility.ts
ai-chat.service.tsai-chat.ts
calendar.service.tsdm/calendar.ts
dm-media.service.tsdm/media.ts
root-media.service.tsmedia.ts, media-library.ts
dm-campaigns.service.tsdm/campaigns.ts
dm-tenant.service.tsdm/tenant.ts
dm-users.service.tsdm/users.ts
users.service.tsadmin/users.ts, admin/agents.ts
templates.service.tsadmin/templates.ts
notifications.service.tsadmin/notifications.ts
push.service.tsadmin/push.ts
audit.service.tsadmin/audit.ts
tenant-billing.service.tstenant/billing.ts
goals.service.tsadmin/goals.ts, tenant/goals.ts
admin-content.service.tsadmin/content.ts
deliverable-settings.service.tsadmin/deliverable-settings.ts
design-defaults.service.tsadmin/design-defaults.ts
backlink-directories.service.tsadmin/backlink-directories.ts
tenant-data.service.tsadmin/tenant-data.ts
tenant-deletions.service.tsadmin/tenant-deletions.ts
channel-health.service.tschannel-health.ts
insights.service.tsinsights.ts
website-insights.service.tswebsite-insights.ts
website-issues.service.tswebsite-issues.ts
brand.service.tsbrand-assets.ts, brand-voice.ts
competitors.service.tscompetitors.ts
knowledge.service.tsknowledge.ts
help.service.tshelp.ts
docs.service.tsdocs.ts
mobile.service.tsmobile.ts
pgcallbacks.service.tspgcallbacks.ts
rag-config.service.tsrag-config.ts
source-maps.service.tssource-maps.ts
tenant-backlinks.service.tstenant-backlinks.ts

Dashboard Next.js (apps/dashboard/src/app/api/) — 26 routes, all clean

Service files under apps/dashboard/src/services/:

  • activities.service.ts — activities/*, calendar/
  • calendar.service.ts — calendar/
  • leads.service.ts — leads/*
  • backlinks.service.ts — backlinks/*
  • notifications.service.ts — notifications/*
  • stats.service.ts — dashboard/stats
  • agent-progress.service.ts — internal/agent-progress
  • reports.service.ts — reports/generate
  • search.service.ts — search/
  • socket-token.service.ts — socket-token/
  • media.service.ts — tenant/media/*

Manage Next.js (apps/manage/src/app/api/) — 2 routes, all clean

Service files under apps/manage/src/services/:

  • billing.service.ts — admin/billing/*

DM Next.js (apps/dm/src/app/api/) — Clean (delegates to Fastify API)


Known Quirks

  • auth.ts and tenant/credits.ts import db only to satisfy @leadmetrics/billing function signatures — this is intentional and not a violation.
  • tenants.service.ts was previously unused; it is now wired into admin/tenants.ts alongside admin-tenants.service.ts.

© 2026 Leadmetrics — Internal use only