> ## Documentation Index
> Fetch the complete documentation index at: https://twigz.arqqin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Seeding Overview

> Database seeding system for development and testing

## Overview

The Seeding API provides comprehensive database initialization and test data generation for development, testing, and demo environments. This system ensures consistent data setup across different environments with UAE-specific content.

**Location:** `convex/seed.ts`

## Seeding Process

<Steps>
  <Step title="Clear Existing Data">
    Optional: Clear all existing data for fresh start
  </Step>

  <Step title="Seed Core Data">
    Add cities, areas, banks, categories, and platform configuration
  </Step>

  <Step title="Seed Test Data">
    Add test customers, stores, products, and orders for development
  </Step>

  <Step title="Verify Setup">
    Check seeding status and data integrity
  </Step>
</Steps>

## Quick Setup

For immediate development environment setup:

<CodeGroup>
  ```typescript TypeScript theme={null}
  // Complete database setup in one call
  const result = await convex.mutation(api.seed.seedAllData);
  console.log('Database seeded:', result);

  // Add test data for development
  await convex.mutation(api.seed.seedTestCustomers);
  await convex.mutation(api.seed.seedTestOrders);
  ```

  ```javascript JavaScript theme={null}
  // Quick development setup
  const seedResult = await convex.mutation("seed.seedAllData");
  console.log('Seeding complete:', seedResult);
  ```

  ```bash Development Script theme={null}
  # Create a seeding script for quick setup
  cat > seed-dev.js << 'EOF'
  import { ConvexHttpClient } from "convex/node";

  const convex = new ConvexHttpClient(process.env.CONVEX_URL);

  async function seedDevelopment() {
    console.log('🌱 Starting development database seeding...');
    
    // Seed core data
    const coreResult = await convex.mutation("seed.seedAllData");
    console.log('✅ Core data seeded:', coreResult);
    
    // Add test customers
    const customersResult = await convex.mutation("seed.seedTestCustomers");
    console.log('✅ Test customers added:', customersResult);
    
    // Add test orders
    const ordersResult = await convex.mutation("seed.seedTestOrders");
    console.log('✅ Test orders created:', ordersResult);
    
    console.log('🎉 Development environment ready!');
  }

  seedDevelopment().catch(console.error);
  EOF

  node seed-dev.js
  ```
</CodeGroup>

## Seed All Data

Seeds all essential data types in the correct dependency order.

<CodeGroup>
  ```typescript TypeScript theme={null}
  const result = await convex.mutation(api.seed.seedAllData);
  ```

  ```javascript JavaScript theme={null}
  const result = await convex.mutation("seed.seedAllData");
  ```
</CodeGroup>

<ResponseExample>
  ```json Response theme={null}
  {
    "success": true,
    "message": "All data seeded successfully",
    "results": {
      "cities": 7,
      "areas": 156,
      "banks": 15,
      "categories": 25,
      "platformConfig": "pc123456789"
    }
  }
  ```
</ResponseExample>

## Get Seeding Status

Check the current seeding status of the database.

<CodeGroup>
  ```typescript TypeScript theme={null}
  const status = await convex.query(api.seed.getSeedingStatus);
  ```

  ```javascript JavaScript theme={null}
  const status = await convex.query("seed.getSeedingStatus");
  ```
</CodeGroup>

<ResponseExample>
  ```json Response theme={null}
  {
    "isSeeded": true,
    "counts": {
      "cities": 7,
      "areas": 156,
      "banks": 15,
      "categories": 25,
      "platformConfig": 1
    }
  }
  ```
</ResponseExample>

## Individual Seeding Functions

<CardGroup cols={2}>
  <Card title="Cities" icon="city">
    **Function**: `seedCities`\
    **Data**: 7 major UAE cities with Arabic names
  </Card>

  <Card title="Areas" icon="map">
    **Function**: `seedAreas`\
    **Data**: 150+ areas across all UAE cities
  </Card>

  <Card title="Banks" icon="building-columns">
    **Function**: `seedBanks`\
    **Data**: 15 major UAE banks with SWIFT codes
  </Card>

  <Card title="Categories" icon="tags">
    **Function**: `seedCategories`\
    **Data**: Hierarchical product categories
  </Card>
</CardGroup>

## Test Data Generation

<CodeGroup>
  ```typescript Test Customers theme={null}
  const customersResult = await convex.mutation(api.seed.seedTestCustomers);
  // Creates 10 test customers with realistic profiles
  ```

  ```typescript Test Orders theme={null}
  const ordersResult = await convex.mutation(api.seed.seedTestOrders);
  // Creates 50 test orders across different stores and customers
  ```

  ```typescript Bulk Orders theme={null}
  const bulkResult = await convex.mutation(api.seed.seedBulkOrders);
  // Creates 500+ orders for performance testing
  ```
</CodeGroup>

## Development Workflow

<AccordionGroup>
  <Accordion title="Fresh Environment Setup">
    Setting up a completely fresh development environment:

    ```typescript theme={null}
    // 1. Clear existing data (optional)
    await convex.mutation(api.seed.clearAllData);

    // 2. Seed core data
    await convex.mutation(api.seed.seedAllData);

    // 3. Add test data
    await convex.mutation(api.seed.seedTestCustomers);
    await convex.mutation(api.seed.seedTestOrders);

    // 4. Verify setup
    const status = await convex.query(api.seed.getSeedingStatus);
    console.log('Environment ready:', status);
    ```
  </Accordion>

  <Accordion title="Incremental Updates">
    Adding specific data types:

    ```typescript theme={null}
    // Add more areas to existing cities
    await convex.mutation(api.seed.seedAreas);

    // Update platform configuration
    await convex.mutation(api.seed.seedPlatformConfig);

    // Add more test customers
    await convex.mutation(api.seed.seedTestCustomers);
    ```
  </Accordion>

  <Accordion title="Performance Testing">
    Generate large datasets for testing:

    ```typescript theme={null}
    // Generate bulk test data
    await convex.mutation(api.seed.seedBulkOrders);

    // Check database performance
    const analytics = await convex.query(api.shared.analytics.getProductCountsByGlobalCategory);
    ```
  </Accordion>
</AccordionGroup>

## UAE-Specific Data

The seeding system includes comprehensive UAE market data:

<CardGroup cols={2}>
  <Card title="UAE Cities" icon="flag">
    **Cities**: Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Fujairah, Umm Al Quwain\
    **Languages**: English and Arabic names
  </Card>

  <Card title="UAE Areas" icon="map-pin">
    **Coverage**: 150+ areas across all emirates\
    **Types**: Districts, neighborhoods, communities, sectors
  </Card>

  <Card title="UAE Banks" icon="university">
    **Banks**: All major UAE banking institutions\
    **Data**: SWIFT codes, Arabic names, regulatory compliance
  </Card>

  <Card title="Local Categories" icon="store">
    **Categories**: UAE market-specific business categories\
    **Structure**: Hierarchical organization for local businesses
  </Card>
</CardGroup>

<Note>
  Seeding functions are designed for development and testing environments. Use with caution in production and always backup data before clearing.
</Note>

<Tip>
  Use `getSeedingStatus` to check if your database is properly initialized before running your application in development.
</Tip>
