/
iezhelev
/
cppsh_micro
Обзор
Документация
Войти
/
iezhelev
/
cppsh_micro
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
pkg/query/handler.go
69 строк
2 KB
iezhelev
first commit
24 фев 2025, 13:52
24 фев 2025, 13:52
7ac2ca6
Код
Авторство
О чём код?
package query import ( //"context" "encoding/json" "log" "net/http" "strings" "github.com/elastic/go-elasticsearch/v8" ) type QueryHandler struct { es *elasticsearch.Client } func NewQueryHandler(es *elasticsearch.Client) *QueryHandler { return &QueryHandler{es: es} } // GetUser возвращает данные пользователя из Elasticsearch func (h *QueryHandler) GetUser(w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get("id") // Поиск пользователя в Elasticsearch res, err := h.es.Get("users", id) if err != nil { http.Error(w, "Failed to fetch user", http.StatusInternalServerError) return } defer res.Body.Close() if res.IsError() { http.Error(w, "User not found", http.StatusNotFound) return } var result map[string]interface{} if err := json.NewDecoder(res.Body).Decode(&result); err != nil { http.Error(w, "Failed to decode response", http.StatusInternalServerError) return } // Возвращаем данные пользователя w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(result["_source"]) } // HandleEvent обновляет данные в Elasticsearch на основе события func HandleEvent(es *elasticsearch.Client, body []byte) { var event map[string]interface{} if err := json.Unmarshal(body, &event); err != nil { log.Printf("Failed to unmarshal event: %s", err) return } switch event["type"] { case "UserCreated": user := event["data"].(map[string]interface{}) _, err := es.Index( "users", // Индекс strings.NewReader(string(body)), // Тело документа es.Index.WithDocumentID(user["id"].(string)), ) if err != nil { log.Printf("Failed to index user: %s", err) } } }