l_ai_knowledge/internal/handler/test_data.go

85 lines
2.5 KiB
Go

package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"knowlege-lsxd/internal/config"
"knowlege-lsxd/internal/logger"
"knowlege-lsxd/internal/types"
"knowlege-lsxd/internal/types/interfaces"
)
// TestDataHandler handles HTTP requests related to test data operations
// Used for development and testing purposes to provide sample data
type TestDataHandler struct {
config *config.Config
kbService interfaces.KnowledgeBaseService
tenantService interfaces.TenantService
}
// NewTestDataHandler creates a new instance of the test data handler
// Parameters:
// - config: Application configuration instance
// - kbService: Knowledge base service for accessing knowledge base data
// - tenantService: Tenant service for accessing tenant data
//
// Returns a pointer to the new TestDataHandler instance
func NewTestDataHandler(
config *config.Config,
kbService interfaces.KnowledgeBaseService,
tenantService interfaces.TenantService,
) *TestDataHandler {
return &TestDataHandler{
config: config,
kbService: kbService,
tenantService: tenantService,
}
}
// GetTestData handles the HTTP request to retrieve test data for development purposes
// It returns predefined test tenant and knowledge base information
// This endpoint is only available in non-production environments
// Parameters:
// - c: Gin context for the HTTP request
func (h *TestDataHandler) GetTestData(c *gin.Context) {
ctx := c.Request.Context()
logger.Info(ctx, "Start retrieving test data")
tenantID := uint(types.InitDefaultTenantID)
logger.Debugf(ctx, "Test tenant ID environment variable: %d", tenantID)
// Retrieve the test tenant data
logger.Infof(ctx, "Retrieving test tenant, ID: %d", tenantID)
tenant, err := h.tenantService.GetTenantByID(ctx, tenantID)
if err != nil {
logger.ErrorWithFields(ctx, err, nil)
c.Error(err)
return
}
knowledgeBaseID := types.InitDefaultKnowledgeBaseID
logger.Debugf(ctx, "Test knowledge base ID environment variable: %s", knowledgeBaseID)
// Retrieve the test knowledge base data
logger.Infof(ctx, "Retrieving test knowledge base, ID: %s", knowledgeBaseID)
knowledgeBase, err := h.kbService.GetKnowledgeBaseByID(ctx, knowledgeBaseID)
if err != nil {
logger.ErrorWithFields(ctx, err, nil)
c.Error(err)
return
}
logger.Info(ctx, "Test data retrieved successfully")
// Return the test data in the response
c.JSON(http.StatusOK, gin.H{
"data": gin.H{
"tenant": tenant,
"knowledge_bases": []types.KnowledgeBase{*knowledgeBase},
},
"success": true,
})
}