9e6bea681f
Añade funciones Go stub para la API de Metabase en dominio infra: auth, CRUD de cards, dashboards y users, execute_query y execute_card. Incluye tipo MetabaseClient y helper HTTP compartido. Todas las funciones son impuras con stubs not-implemented.
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package infra
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// MetabaseAuth autentica con email y password contra una instancia Metabase.
|
|
// Retorna un MetabaseClient con el session token listo para usar.
|
|
// baseURL es la URL base sin trailing slash (ej: "http://localhost:3000").
|
|
func MetabaseAuth(baseURL, email, password string) (MetabaseClient, error) {
|
|
payload, _ := json.Marshal(map[string]string{
|
|
"username": email,
|
|
"password": password,
|
|
})
|
|
|
|
resp, err := http.Post(baseURL+"/api/session", "application/json", bytes.NewReader(payload))
|
|
if err != nil {
|
|
return MetabaseClient{}, fmt.Errorf("metabase auth: %w", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return MetabaseClient{}, fmt.Errorf("read auth response: %w", err)
|
|
}
|
|
|
|
if resp.StatusCode != 200 {
|
|
return MetabaseClient{}, fmt.Errorf("metabase auth: status %d: %s", resp.StatusCode, string(body))
|
|
}
|
|
|
|
var result struct {
|
|
ID string `json:"id"`
|
|
}
|
|
if err := json.Unmarshal(body, &result); err != nil {
|
|
return MetabaseClient{}, fmt.Errorf("parse auth response: %w", err)
|
|
}
|
|
|
|
return MetabaseClient{BaseURL: baseURL, Token: result.ID}, nil
|
|
}
|
|
|
|
// MetabaseNewClient crea un MetabaseClient usando una API key en lugar de session token.
|
|
// Las API keys se crean en Settings > Authentication > API Keys del admin de Metabase.
|
|
func MetabaseNewClient(baseURL, apiKey string) MetabaseClient {
|
|
return MetabaseClient{BaseURL: baseURL, Token: apiKey}
|
|
}
|