# Template Knowledge Graph (TKG) Migration System

## Overview

The Template Knowledge Graph (TKG) migration system migrates data from PostgreSQL to Neo4j to create a comprehensive knowledge graph that maps:

- **Templates** → **Features** → **Technologies**
- **Tech Stack Recommendations** → **Technologies by Category**
- **Feature Dependencies** and **Technology Synergies**

## Architecture

### 1. Neo4j Graph Structure

```
Template → HAS_FEATURE → Feature → REQUIRES_TECHNOLOGY → Technology
    ↓
HAS_TECH_STACK → TechStack → RECOMMENDS_TECHNOLOGY → Technology
```

### 2. Node Types

- **Template**: Application templates (e-commerce, SaaS, etc.)
- **Feature**: Individual features (authentication, payment, etc.)
- **Technology**: Tech stack components (React, Node.js, etc.)
- **TechStack**: AI-generated tech stack recommendations

### 3. Relationship Types

- **HAS_FEATURE**: Template contains feature
- **REQUIRES_TECHNOLOGY**: Feature needs technology
- **RECOMMENDS_TECHNOLOGY**: Tech stack recommends technology
- **HAS_TECH_STACK**: Template has tech stack

## API Endpoints

### Migration Endpoints

- `POST /api/tkg-migration/migrate` - Migrate all data to TKG
- `GET /api/tkg-migration/stats` - Get migration statistics
- `POST /api/tkg-migration/clear` - Clear TKG data
- `GET /api/tkg-migration/health` - Health check

### Template Endpoints

- `POST /api/tkg-migration/template/:id` - Migrate single template
- `GET /api/tkg-migration/template/:id/tech-stack` - Get template tech stack
- `GET /api/tkg-migration/template/:id/features` - Get template features

## Usage

### 1. Start the Service

```bash
cd services/template-manager
npm start
```

### 2. Run Migration

```bash
# Full migration
curl -X POST http://localhost:8009/api/tkg-migration/migrate

# Get stats
curl http://localhost:8009/api/tkg-migration/stats

# Health check
curl http://localhost:8009/api/tkg-migration/health
```

### 3. Test Migration

```bash
node test/test-tkg-migration.js
```

## Configuration

### Environment Variables

```bash
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password

# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=template_manager
DB_USER=postgres
DB_PASSWORD=password
```

## Migration Process

### 1. Data Sources

- **Templates**: From `templates` and `custom_templates` tables
- **Features**: From `features` and `custom_features` tables
- **Tech Stack**: From `tech_stack_recommendations` table

### 2. Migration Steps

1. **Clear existing Neo4j data**
2. **Migrate default templates** with features
3. **Migrate custom templates** with features
4. **Migrate tech stack recommendations**
5. **Create technology relationships**
6. **Generate migration statistics**

### 3. AI-Powered Analysis

The system uses Claude AI to:
- Extract technologies from feature descriptions
- Analyze business rules for tech requirements
- Generate technology confidence scores
- Identify feature dependencies

## Neo4j Queries

### Get Template Tech Stack

```cypher
MATCH (t:Template {id: $templateId})
MATCH (t)-[:HAS_TECH_STACK]->(ts)
MATCH (ts)-[r:RECOMMENDS_TECHNOLOGY]->(tech)
RETURN ts, tech, r.category, r.confidence
ORDER BY r.category, r.confidence DESC
```

### Get Template Features

```cypher
MATCH (t:Template {id: $templateId})
MATCH (t)-[:HAS_FEATURE]->(f)
MATCH (f)-[:REQUIRES_TECHNOLOGY]->(tech)
RETURN f, tech
ORDER BY f.display_order, f.name
```

### Get Technology Synergies

```cypher
MATCH (tech1:Technology)-[:SYNERGY]->(tech2:Technology)
RETURN tech1.name, tech2.name, synergy_score
ORDER BY synergy_score DESC
```

## Error Handling

The migration system includes comprehensive error handling:

- **Connection failures**: Graceful fallback to PostgreSQL
- **Data validation**: Skip invalid records with logging
- **Partial failures**: Continue migration with error reporting
- **Rollback support**: Clear and retry functionality

## Performance Considerations

- **Batch processing**: Migrate templates in batches
- **Connection pooling**: Reuse Neo4j connections
- **Indexing**: Create indexes on frequently queried properties
- **Memory management**: Close connections properly

## Monitoring

### Migration Statistics

- Templates migrated
- Features migrated
- Technologies created
- Tech stacks migrated
- Relationships created

### Health Monitoring

- Neo4j connection status
- Migration progress
- Error rates
- Performance metrics

## Troubleshooting

### Common Issues

1. **Neo4j connection failed**
   - Check Neo4j service status
   - Verify connection credentials
   - Ensure Neo4j is running on correct port

2. **Migration timeout**
   - Increase timeout settings
   - Check Neo4j memory settings
   - Monitor system resources

3. **Data validation errors**
   - Check PostgreSQL data integrity
   - Verify required fields are present
   - Review migration logs

### Debug Commands

```bash
# Check Neo4j status
docker ps | grep neo4j

# View Neo4j logs
docker logs neo4j-container

# Test Neo4j connection
cypher-shell -u neo4j -p password "RETURN 1"
```

## Future Enhancements

1. **Incremental Migration**: Only migrate changed data
2. **Real-time Sync**: Keep Neo4j in sync with PostgreSQL
3. **Advanced Analytics**: Technology trend analysis
4. **Recommendation Engine**: AI-powered tech stack suggestions
5. **Visualization**: Graph visualization tools

## Support

For issues or questions:
1. Check the logs for error messages
2. Verify Neo4j and PostgreSQL connections
3. Review migration statistics
4. Test with single template migration first
