Skip to main content

Backend Guide

Location: backend/

Structure

  • Entry: src/index.ts (Express app, route mounting)
  • Routes: src/routes/*.ts
  • Controllers: src/controllers/*.ts
  • Services: src/services/*.ts
  • Middleware: src/middleware/*.ts (e.g., tenantMiddleware)
  • DB: src/lib/database.ts and related types

Route Mounting

  • Example: app.use('/api/google-ads', googleAdsRoutes) in src/index.ts
  • Route: src/routes/googleAdsRoutes.ts
    • GET /auth/url, /auth/connect, /auth/available-accounts, /auth/callback
    • POST /accounts/create
    • Connection/campaign routes
  • Controller: src/controllers/googleAdsController.ts
    • getAvailableAccounts: reads accessToken from query, delegates to service
    • createAccountFromOAuth: creates account and stores tokens
  • Service: src/services/googleAdsService.ts
    • getAvailableGoogleAdsAccounts: calls Google Ads API customers:listAccessibleCustomers
    • Handles error cases (401/403/404/501) and returns fallbacks when necessary

Multi-Tenancy

  • tenantMiddleware requires x-organization-id for protected routes
  • Ensure frontend includes this header (handled by apiClient)

Auth

  • Controllers refer to req.user and req.organizationId (populated by auth/tenant middleware). Verify auth middleware configuration in src/index.ts.