Skip to main content

Backend API

The Xylem backend is a NestJS 10 application that serves as the central API for the platform. It handles authentication, project management, file processing, AI integration, and regulatory analysis.

Project Structure

xylem-backend/
├── src/
│ ├── main.ts # Application bootstrap
│ ├── app.module.ts # Root module (imports all feature modules)
│ ├── auth/ # Authentication & authorization
│ ├── users/ # User CRUD
│ ├── organizations/ # Organization management
│ ├── roles/ # Role & permission management
│ ├── projects/ # Project CRUD & sharing
│ ├── project-variant/ # Project variant management
│ ├── survey-maps/ # DWG/DXF file processing
│ ├── catalog/ # Floorplan unit catalog
│ ├── regulatory/ # Regulatory rules engine
│ ├── gemini/ # Google Gemini AI integration
│ ├── openai/ # OpenAI integration
│ ├── prisma/ # Prisma service provider
│ ├── config/ # App configuration
│ ├── shared/ # Shared utilities
│ └── admin/ # Admin-specific endpoints
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── migrations/ # Migration history
│ └── seed.ts # Database seeder
├── assets/ # Static GIS data files
├── scripts/ # Python helper scripts
├── templates/ # Email templates (Handlebars)
├── uploads/ # User file uploads directory
└── static/ # Served static files

Module Overview

ModulePrimary EndpointsDescription
Auth/auth/*Login, register, refresh tokens, email verification, password reset
Users/users/*User profile CRUD, avatar upload
Organizations/organizations/*Org CRUD, invitations, join requests
Roles/roles/*Role management, permission assignment
Projects/projects/*Project CRUD, sharing, cover images
Project Variant/project-variants/*Variant CRUD, product mix, solutions
Survey Maps/survey-maps/*DWG upload, conversion pipeline
Catalog/catalog/*Floorplan unit management, DXF parsing
Regulatory/regulatory/*Rules CRUD, variable registry, evaluation
GeminiInternal serviceAI metadata extraction from PDFs
Admin/admin/*Admin-only operations

Environment Variables

VariableRequiredDescription
PORTNoServer port (default: 4000)
DATABASE_URLYesPostgreSQL connection string
SHADOW_DATABASE_URLNoPrisma shadow database for migrations
UPLOAD_PATHYesDirectory for file uploads
JWT_SECRETYesJWT signing secret
JWT_EXPIRATION_TIMEYesJWT token expiration duration
JWT_REFRESH_SECRETYesJWT refresh token secret
JWT_VERIFICATION_SECRETYesJWT email verification secret
GEMINI_API_KEYYesGoogle Gemini API key
GOOGLE_GEOCODE_API_KEYYesGoogle Maps Geocoding API key
OPENAI_API_KEYNoOpenAI API key
MAIL_USERYesEmail sender address
MAIL_CLIENT_IDYesOAuth2 client ID for email
MAIL_CLIENT_SECRETYesOAuth2 client secret for email
MAIL_REFRESH_TOKENYesOAuth2 refresh token for email
MAIL_FROMYesFrom address for outgoing emails

External Dependencies

System Packages

These must be installed at the OS level:

ToolPackagePurpose
ODAFileConverterODAPrimary DWG → DXF conversion
dwgreadLibreDWGFallback DWG converter
xvfb-runxvfbVirtual framebuffer for headless ODA
ogr2ogrGDALDXF → GeoJSON conversion
gdalwarpGDALGeoTIFF raster clipping
gdal2xyz.pyGDALPixel data extraction
python3python3Floorplan processing script

External APIs

APIPurposeEnv Variable
Google GeminiAI metadata extraction from survey PDFsGEMINI_API_KEY
Google GeocodingAddress → lat/lon coordinatesGOOGLE_GEOCODE_API_KEY
Open-Meteo ElevationGround elevation lookup (free)
SME ConverterDXF → PDF conversion

Static Asset Files

These must be present in the assets/ directory:

FilePurpose
CCZM_BANGALORE_WGS84.tifAAI Color-Zone Map GeoTIFF for elevation zone analysis
authorities.geojsonAuthority boundary polygons (BDA, BBMP, etc.)
blr_roadWidth.geojsonBangalore road network with width data

Development

# Install dependencies
npm install

# Generate Prisma client
npx prisma generate

# Run migrations
npx prisma migrate dev

# Start development server (hot reload)
npm run start:dev

# Build for production
npm run build

# Run tests
npm test