mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
227 lines
4.3 KiB
Markdown
227 lines
4.3 KiB
Markdown
# 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
|