Services: Admin-Compliance, Backend-Compliance, AI-Compliance-SDK, Consent-SDK, Developer-Portal, PCA-Platform, DSMS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
116 lines
2.9 KiB
Go
116 lines
2.9 KiB
Go
// Package api provides HTTP handlers for the API Gateway
|
|
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// =============================================================================
|
|
// RAG / Search
|
|
// =============================================================================
|
|
|
|
// SearchRequest represents a RAG search request
|
|
type SearchRequest struct {
|
|
Query string `json:"query" binding:"required"`
|
|
RegulationCodes []string `json:"regulation_codes,omitempty"`
|
|
Limit int `json:"limit,omitempty"`
|
|
}
|
|
|
|
// SearchRAG performs a semantic search
|
|
func SearchRAG(c *gin.Context) {
|
|
var req SearchRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
// In production, forward to RAG service
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"query": req.Query,
|
|
"results": []gin.H{
|
|
{
|
|
"content": "Art. 9 Abs. 1 DSGVO verbietet grundsätzlich die Verarbeitung besonderer Kategorien personenbezogener Daten...",
|
|
"regulationCode": "DSGVO",
|
|
"article": "9",
|
|
"score": 0.95,
|
|
},
|
|
},
|
|
"total": 1,
|
|
})
|
|
}
|
|
|
|
// AskRequest represents a RAG question request
|
|
type AskRequest struct {
|
|
Question string `json:"question" binding:"required"`
|
|
Context string `json:"context,omitempty"`
|
|
}
|
|
|
|
// AskRAG asks a question to the legal assistant
|
|
func AskRAG(c *gin.Context) {
|
|
var req AskRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
// In production, forward to RAG service
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"question": req.Question,
|
|
"answer": "Art. 9 DSGVO regelt die Verarbeitung besonderer Kategorien personenbezogener Daten...",
|
|
"citations": []gin.H{
|
|
{
|
|
"regulationCode": "DSGVO",
|
|
"article": "9",
|
|
"relevance": 0.95,
|
|
},
|
|
},
|
|
"confidence": 0.92,
|
|
})
|
|
}
|
|
|
|
// GetRegulations returns available regulations
|
|
func GetRegulations(c *gin.Context) {
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"regulations": []gin.H{
|
|
{
|
|
"code": "DSGVO",
|
|
"name": "Datenschutz-Grundverordnung",
|
|
"chunks": 99,
|
|
"lastUpdated": "2024-01-01",
|
|
},
|
|
{
|
|
"code": "AI_ACT",
|
|
"name": "EU AI Act",
|
|
"chunks": 85,
|
|
"lastUpdated": "2024-01-01",
|
|
},
|
|
{
|
|
"code": "NIS2",
|
|
"name": "NIS 2 Directive",
|
|
"chunks": 46,
|
|
"lastUpdated": "2024-01-01",
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
// UploadDocument uploads a custom document for RAG
|
|
func UploadDocument(c *gin.Context) {
|
|
file, err := c.FormFile("file")
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "No file provided"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusCreated, gin.H{
|
|
"id": uuid.New().String(),
|
|
"filename": file.Filename,
|
|
"size": file.Size,
|
|
"status": "PROCESSING",
|
|
"message": "Document uploaded and queued for processing",
|
|
})
|
|
}
|