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.tsand related types
Route Mounting
- Example:
app.use('/api/google-ads', googleAdsRoutes)insrc/index.ts
Google Ads Flow
- Route:
src/routes/googleAdsRoutes.ts- GET
/auth/url,/auth/connect,/auth/available-accounts,/auth/callback - POST
/accounts/create - Connection/campaign routes
- GET
- Controller:
src/controllers/googleAdsController.tsgetAvailableAccounts: readsaccessTokenfrom query, delegates to servicecreateAccountFromOAuth: creates account and stores tokens
- Service:
src/services/googleAdsService.tsgetAvailableGoogleAdsAccounts: calls Google Ads APIcustomers:listAccessibleCustomers- Handles error cases (401/403/404/501) and returns fallbacks when necessary
Multi-Tenancy
tenantMiddlewarerequiresx-organization-idfor protected routes- Ensure frontend includes this header (handled by
apiClient)
Auth
- Controllers refer to
req.userandreq.organizationId(populated by auth/tenant middleware). Verify auth middleware configuration insrc/index.ts.