Ctrl K
ComunidadGuías…

internal/adminapi/connector_event_diagnostic_handler.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package adminapi

import (
	"context"
	"net/http"
	"strconv"
	"strings"

	"github.com/yeomyeonggeori/blueclaw/internal/connectors"
)

type ConnectorEventDiagnosticRepository interface {
	ListConnectorEventDiagnostics(context.Context, connectors.EventDiagnosticFilter) ([]connectors.EventDiagnostic, error)
}

type ConnectorEventDiagnosticHandler struct {
	Repository ConnectorEventDiagnosticRepository
}

func (handler ConnectorEventDiagnosticHandler) HandleList(responseWriter http.ResponseWriter, request *http.Request) {
	if handler.Repository == nil {
		http.Error(responseWriter, "connector event diagnostics are unavailable", http.StatusServiceUnavailable)
		return
	}
	diagnostics, errorValue := handler.Repository.ListConnectorEventDiagnostics(request.Context(), connectorEventDiagnosticFilter(request))
	if errorValue != nil {
		http.Error(responseWriter, errorValue.Error(), http.StatusInternalServerError)
		return
	}
	writeJSON(responseWriter, http.StatusOK, diagnostics)
}

func connectorEventDiagnosticFilter(request *http.Request) connectors.EventDiagnosticFilter {
	query := request.URL.Query()
	return connectors.EventDiagnosticFilter{
		Platform:       strings.TrimSpace(query.Get("platform")),
		ConversationID: strings.TrimSpace(query.Get("conversationID")),
		MessageID:      strings.TrimSpace(query.Get("messageID")),
		Limit:          connectorEventDiagnosticLimit(query.Get("limit")),
	}
}

func connectorEventDiagnosticLimit(value string) int {
	limit, errorValue := strconv.Atoi(strings.TrimSpace(value))
	if errorValue != nil {
		return 20
	}
	if limit <= 0 {
		return 20
	}
	if limit > 50 {
		return 50
	}
	return limit
}