# ⚡ CLI Quick Reference: Database Commands

## TL;DR - No Special Database CLI Commands

**We did NOT create CLI flags like `--database sqlite` or `--surrealdb`**

Instead: **Use configuration files to switch databases**

---

## Quickest Setup

```bash
# 1️⃣ CHOOSE YOUR DATABASE BY COPYING CONFIG

# For SQLite (default):
cp configs/database-default.toml configs/database.toml

# OR for SurrealDB:
cp configs/database-surrealdb.toml configs/database.toml

# 2️⃣ RUN CLI COMMANDS NORMALLY (no special flags!)

workspace create                    # Create project
workspace status                    # Show status
workspace checklist show            # Show checklist
workspace config show               # Show configuration
```

That's it! No other steps needed.

---

## Available CLI Commands

### **Project Operations**
```bash
workspace init [PATH] --type TYPE        # Initialize project
workspace create                         # Create from config
workspace migrate PATH                   # Migrate project
workspace status                         # Show status
```

### **Checklist Management**
```bash
workspace checklist show [PHASE]         # Show checklist
workspace checklist complete ITEM_ID     # Mark complete
workspace checklist add DESCRIPTION      # Add item
workspace checklist types                # Show task types
```

### **Security**
```bash
workspace security profile TYPE          # Set security profile
workspace security assess [--detailed]   # Assess security
workspace audit [--audit-vulns]          # Run audit
```

### **Phase Management**
```bash
workspace phase current                  # Show current phase
workspace phase transition PHASE         # Move to phase
```

### **Database Operations** ⭐
```bash
workspace migrate-db PATH                # Migrate DB to global
workspace migrate-db --scan ROOT         # Scan for databases
workspace migrate-db --status            # Show migration status
```

### **Configuration**
```bash
workspace config show                    # Show configuration
workspace config validate                # Validate configuration
```

### **Tools**
```bash
workspace tool list                      # List tools
workspace tool enable TOOL               # Enable tool
workspace tool disable TOOL              # Disable tool
workspace tool status                    # Show tool status
```

### **Import/Export**
```bash
workspace export [--format FORMAT]       # Export data
workspace import FILE [--format FORMAT]  # Import data
```

### **Other**
```bash
workspace search QUERY [filters]         # Search projects
workspace sbom generate                  # Generate SBOM
workspace plugin install PATH            # Install plugin
workspace batch FILE                     # Batch operations
```

---

## Global Flags

Available with any command:

```bash
workspace --verbose COMMAND              # Verbose output
workspace -v COMMAND                     # Shorthand

workspace --project NAME COMMAND         # Specify project
workspace -p NAME COMMAND                # Shorthand

workspace --remote COMMAND               # Use remote API

workspace --api-url URL COMMAND          # API server URL
```

---

## Database Configuration Files

### **SQLite Config** (Recommended Default)
```toml
# File: configs/database-default.toml

[database]
engine = "sqlite"

[sqlite]
path = "~/.local/share/core/workspace.db"
max_connections = 5
```

### **SurrealDB Config** (Alternative)
```toml
# File: configs/database-surrealdb.toml

[database]
engine = "surrealdb"

[surrealdb]
# Choose one mode:
url = "mem://"                           # In-memory (fast, no server)
# url = "file:///tmp/surrealdb.db"     # File-based (persistent)
# url = "ws://localhost:8000"          # Server mode (remote)

namespace = "syntaxis"
database = "projects"
max_connections = 10
```

---

## How To Switch Databases

### **SQLite → SurrealDB**
```bash
# 1. Copy SurrealDB config
cp configs/database-surrealdb.toml configs/database.toml

# 2. If using server mode, start server:
surreal start --bind 127.0.0.1:8000 memory

# 3. Run CLI (uses SurrealDB automatically)
workspace create
```

### **SurrealDB → SQLite**
```bash
# 1. Copy SQLite config
cp configs/database-default.toml configs/database.toml

# 2. Run CLI (uses SQLite automatically)
workspace create
```

---

## Database Migration Command

Most relevant for databases:

```bash
# Migrate from local to global database
workspace migrate-db PATH

# Example:
workspace migrate-db ~/.local/share/core/old.db

# What it does:
# 1. Opens local database (at PATH)
# 2. Loads all projects from local database
# 3. Saves all projects to global database
# 4. Creates backup of local database
# 5. Reports success
```

This command works with **BOTH SQLite and SurrealDB!**

---

## Configuration Discovery

CLI automatically finds config in this order:

```
1. configs/database.toml                    ← PRIMARY (created by copying)
2. .project/database.toml
3. .vapora/database.toml
4. .coder/database.toml

Uses first one found ✅
```

---

## Real-World Examples

### **Example 1: Local Development with SurrealDB In-Memory**

```bash
# Step 1: Use SurrealDB config
cp configs/database-surrealdb.toml configs/database.toml

# Step 2: Ensure config has url = "mem://"

# Step 3: Run CLI (no server needed!)
workspace create              # Create project
workspace checklist show      # View checklist
workspace status              # Show status
workspace security assess     # Security assessment
```

### **Example 2: Production with SurrealDB Server**

```bash
# Step 1: Use SurrealDB config
cp configs/database-surrealdb.toml configs/database.toml

# Step 2: Update config:
# url = "ws://surrealdb.example.com:8000"
# username = "app-user"
# password = "secure-password"

# Step 3: Run CLI against remote server
workspace create              # Connects to remote SurrealDB
workspace status              # Fetches from remote
```

### **Example 3: Team Using SQLite**

```bash
# Step 1: Use SQLite config (already default)
cp configs/database-default.toml configs/database.toml

# Step 2: Share database file via Git LFS or cloud storage

# Step 3: All team members run same commands
workspace create              # Uses local SQLite
workspace checklist show      # Instant (no network)
```

---

## What Commands Support Databases?

| Command | Works with SQLite? | Works with SurrealDB? |
|---------|-------------------|----------------------|
| `workspace create` | ✅ Yes | ✅ Yes |
| `workspace status` | ✅ Yes | ✅ Yes |
| `workspace checklist` | ✅ Yes | ✅ Yes |
| `workspace security` | ✅ Yes | ✅ Yes |
| `workspace migrate-db` | ✅ Yes | ✅ Yes |
| `workspace export` | ✅ Yes | ✅ Yes |
| `workspace search` | ✅ Yes | ✅ Yes |
| All other commands | ✅ Yes | ✅ Yes |

**Every CLI command works with both databases!**

---

## Troubleshooting

### **"Database not found"**
```bash
# Make sure config exists:
ls -la configs/database.toml

# If missing, copy it:
cp configs/database-default.toml configs/database.toml
```

### **"SurrealDB server connection failed"**
```bash
# Make sure server is running:
surreal start --bind 127.0.0.1:8000 memory

# Check config URL:
workspace config show
```

### **"Wrong database being used"**
```bash
# Check which config is active:
workspace config show

# Copy the right config:
cp configs/database-{default|surrealdb}.toml configs/database.toml
```

---

## Summary

| Question | Answer |
|----------|--------|
| **Any `--database` flag?** | ❌ No - use config files |
| **How to switch databases?** | Copy different config file |
| **CLI code changes needed?** | ❌ No - all commands work both ways |
| **Server needed for SQLite?** | ❌ No - local file |
| **Server needed for SurrealDB in-memory?** | ❌ No - embedded |
| **Server needed for SurrealDB server mode?** | ✅ Yes - one command |
| **Which database is default?** | SQLite (in database-default.toml) |

---

## Files To Know

```
configs/database-default.toml          ← SQLite config template
configs/database-surrealdb.toml        ← SurrealDB config template
configs/database.toml                  ← Active config (created by copying)

syntaxis-core/src/persistence/
    ├─ mod.rs                          ← Database trait
    ├─ sqlite_impl.rs                  ← SQLite implementation
    └─ surrealdb_impl.rs               ← SurrealDB implementation (800+ lines)

syntaxis-cli/src/handlers/
    ├─ migrate_db.rs                   ← Database migration
    ├─ config.rs                       ← Configuration management
    ├─ create.rs                       ← Project creation
    ├─ checklist.rs                    ← Checklist operations
    ├─ security.rs                     ← Security operations
    └─ ... (all use Database trait)
```

---

## Key Insight

**The architecture is beautiful:**

```
One set of CLI commands
         ↓
Database trait (abstraction)
         ↓
    ┌──────────┬──────────┐
    ↓          ↓
 SQLite    SurrealDB

Same CLI code, different backends!
Database is selected via config, not code!
```

This is why no special CLI flags were needed - the design handles it elegantly through configuration.

---

**That's it! You're ready to use either SQLite or SurrealDB with the CLI! 🚀**
