# Documentation API Routes

## Backend Routes Setup

Add these routes to your `main.go` or router setup:

```go
package main

import (
    "github.com/gin-gonic/gin"
    "your-app/internal/controllers"
    "your-app/internal/middleware"
)

func setupDocsRoutes(router *gin.Engine) {
    // Initialize docs controller
    docsController := controllers.NewDocsController("./DOCS")
    
    // Admin-only documentation routes
    adminDocs := router.Group("/api/v1/admin/docs")
    adminDocs.Use(middleware.RequireAuth())
    adminDocs.Use(middleware.RequireAdmin())
    {
        // Get specific doc file
        adminDocs.GET("/file/*filepath", docsController.GetDocFile)
        
        // List all documentation files
        adminDocs.GET("/list", docsController.ListDocFiles)
        
        // Search documentation
        adminDocs.GET("/search", docsController.SearchDocs)
    }
}
```

## API Endpoints

### 1. Get Documentation File

**GET** `/api/v1/admin/docs/file/:filepath`

Get the content of a specific documentation file.

**Parameters:**
- `filepath` (path) - Path to the markdown file relative to DOCS folder

**Example:**
```bash
GET /api/v1/admin/docs/file/MYUIBRIX_ELEMENTOR_FEATURES.md
```

**Response:**
```
Content-Type: text/markdown

# MyUIbrix Elementor Features
...markdown content...
```

---

### 2. List Documentation Files

**GET** `/api/v1/admin/docs/list`

Get a list of all available documentation files.

**Response:**
```json
{
  "files": [
    {
      "name": "MYUIBRIX_ELEMENTOR_FEATURES.md",
      "path": "/DOCS/MYUIBRIX_ELEMENTOR_FEATURES.md",
      "size": 52480,
      "modified_at": "2024-12-15T10:30:00Z"
    },
    ...
  ],
  "total": 9
}
```

---

### 3. Search Documentation

**GET** `/api/v1/admin/docs/search?q=query`

Search through all documentation files.

**Parameters:**
- `q` (query) - Search query string

**Example:**
```bash
GET /api/v1/admin/docs/search?q=inline editor
```

**Response:**
```json
{
  "results": [
    {
      "name": "MYUIBRIX_ELEMENTOR_FEATURES.md",
      "path": "/DOCS/MYUIBRIX_ELEMENTOR_FEATURES.md",
      "excerpt": "...inline editor activates...",
      "matches": 5
    }
  ],
  "total": 1,
  "query": "inline editor"
}
```

---

## Frontend Integration

Update your `DevDocsPage.tsx` to use the API:

```tsx
// Load document content from API
const loadDocument = async (docPath: string) => {
  setLoading(true);
  setSelectedDoc(docPath);
  
  try {
    const fileName = docPath.split('/').pop();
    const response = await fetch(`/api/v1/admin/docs/file/${fileName}`, {
      headers: {
        'Authorization': `Bearer ${getToken()}`,
      },
    });
    
    if (!response.ok) throw new Error('Failed to load document');
    
    const content = await response.text();
    setDocContent(content);
  } catch (error) {
    console.error('Error loading document:', error);
    toast({
      title: 'Error loading document',
      status: 'error',
    });
  } finally {
    setLoading(false);
  }
};
```

---

## Security Considerations

### Access Control
- All documentation routes require authentication
- Only admin users can access documentation
- Implements middleware checks

### Path Security
- Prevents directory traversal attacks (`..` in paths)
- Only allows `.md` files
- Validates file paths before serving

### Implementation
```go
// Prevent directory traversal
if strings.Contains(docPath, "..") {
    c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid file path"})
    return
}

// Only allow markdown files
if !strings.HasSuffix(fullPath, ".md") {
    c.JSON(http.StatusBadRequest, gin.H{"error": "Only markdown files are allowed"})
    return
}
```

---

## Testing

### Test Get File
```bash
curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://localhost:8080/api/v1/admin/docs/file/CSS_CLASSES_REFERENCE.md
```

### Test List Files
```bash
curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://localhost:8080/api/v1/admin/docs/list
```

### Test Search
```bash
curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://localhost:8080/api/v1/admin/docs/search?q=custom%20css"
```

---

## Add to Admin Navigation

Update your admin navigation to include the docs link:

```tsx
// In AdminLayout.tsx or similar
<NavItem to="/admin/docs" icon={FiBook}>
  Developer Docs
</NavItem>
```

And add the route:

```tsx
// In admin routes
<Route path="/admin/docs" element={<DevDocsPage />} />
```

---

**Status**: ✅ Complete API Implementation
