dld_backend/README.md
2025-10-30 12:13:02 +05:30

201 lines
4.8 KiB
Markdown

# Dubai Land Department Analytics API
A comprehensive Node.js API that processes natural language queries about Dubai real estate data and returns structured responses optimized for Chart.js visualization.
## Features
- **Natural Language Processing**: Parse complex queries using NLP libraries
- **Chart.js Integration**: Generate data formatted for frontend visualization
- **Multiple Query Types**: Support for trends, comparisons, summaries, and analytics
- **Dubai-Specific**: Tailored for Dubai real estate terminology and areas
- **RESTful API**: Clean, well-documented endpoints
## Quick Start
### Prerequisites
- Node.js 16+
- MySQL 8.0+
- Dubai Land Department database schema
### Installation
1. **Clone and install dependencies:**
```bash
npm install
```
2. **Set up environment variables:**
```bash
cp .env.example .env
# Edit .env with your database credentials
```
3. **Set up the database:**
```bash
# Import the provided SQL schema
mysql -u root -p < 2.sql
```
4. **Start the server:**
```bash
# Development
npm run dev
# Production
npm start
```
## API Endpoints
### Main Query Endpoint
```http
POST /api/query
Content-Type: application/json
{
"query": "Give me the last 6 months rental price trend for Business Bay"
}
```
### Predefined Queries
- `GET /api/queries/rental-trend/:area` - Rental trends for specific area
- `GET /api/queries/top-areas` - Top areas with most transactions
- `GET /api/queries/project-summary` - Project summaries
- `GET /api/queries/commercial-leasing` - Commercial leasing analysis
- `GET /api/queries/residential-leasing` - Residential leasing analysis
### Utility Endpoints
- `GET /health` - Health check
- `GET /api/database/info` - Database statistics
- `GET /api/queries/available` - Available query types
## Supported Query Types
### Rental Analysis
- "Give me the last 6 months rental price trend for Business Bay"
- "Summarise by week" (refinement)
- "Apartments only" (further refinement)
### Project Analysis
- "Brief about the Project"
- "List of fast moving projects in last 6 months"
- "Which area is seeing uptick in off-plan projects in last 6 months"
### Area Performance
- "Which area is having more rental transactions?"
- "Top 5 areas for Commercial leasing and why?"
- "Top 5 areas for Residential leasing and why?"
- "Avg price of 3BHK apartment by area in last 6 months"
## Response Format
```json
{
"success": true,
"data": {
"text": "Rental price trend for Business Bay over the last 6 months",
"visualizations": [
{
"type": "line",
"title": "Monthly Rental Price Trend",
"data": {
"labels": ["2024-01", "2024-02", "2024-03"],
"datasets": [{
"label": "Average Rental Price (AED)",
"data": [85000, 87000, 89000],
"borderColor": "rgb(75, 192, 192)",
"backgroundColor": "rgba(75, 192, 192, 0.2)"
}]
}
}
],
"cards": [
{
"title": "Average Price",
"value": "92,500 AED",
"subtitle": "Last 6 months",
"trend": "+15.3%"
}
],
"sql_queries": ["SELECT ..."],
"metadata": {
"query": "original query",
"intent": "trend",
"result_count": 6
}
}
}
```
## Chart.js Integration
The API returns data in Chart.js compatible format:
- **Line Charts**: For time series trends
- **Bar Charts**: For area comparisons
- **Pie Charts**: For distribution analysis
- **Cards**: For summary statistics
## Database Schema
The API works with these main tables:
- `transactions` - Real estate transactions
- `rents` - Rental contracts (Ejari)
- `projects` - Development projects
- `buildings` - Building registry
- `lands` - Land registry
- `valuations` - Property valuations
- `brokers` - Real estate brokers
## Development
### Project Structure
```
src/
├── controllers/ # Request handlers
├── services/ # Business logic
│ ├── nlpService.js # NLP processing
│ ├── sqlGenerator.js # SQL generation
│ └── chartFormatter.js # Chart.js formatting
├── models/ # Database models
├── middleware/ # Express middleware
├── routes/ # API routes
└── utils/ # Utility functions
```
### Testing
```bash
# Test predefined queries
curl http://localhost:3000/api/queries/top-areas
# Test custom query
curl -X POST http://localhost:3000/api/query \
-H "Content-Type: application/json" \
-d '{"query": "Give me the last 6 months rental price trend for Business Bay"}'
```
## Environment Variables
```env
# Server Configuration
PORT=3000
NODE_ENV=development
# Database Configuration
DB_HOST=localhost
DB_PORT=3306
DB_NAME=dubai_dld
DB_USER=root
DB_PASSWORD=your_password
# API Configuration
RATE_LIMIT=100
```
## License
MIT License - see LICENSE file for details.