package logs import ( "context" "encoding/json" "errors" "git.aiterp.net/rpdata/logbot3/internal/api" "git.aiterp.net/rpdata/logbot3/internal/models" ) // ErrNoneOpen is returned by FindOpen if no logs are open, but the query did succeed. var ErrNoneOpen = errors.New("No open logs") // FindOpen lists all changes according to the filter. func FindOpen(ctx context.Context, channelName string) (models.Log, error) { data, err := api.Global().Query(ctx, findOpenGQL, map[string]interface{}{"channel": channelName}, nil) if err != nil { return models.Log{}, err } res := findOpenResult{} err = json.Unmarshal(data, &res) if err != nil { return models.Log{}, err } if len(res.Logs) == 0 { return models.Log{}, ErrNoneOpen } // This shouldn't happen, but if there are more than one // open logs for a channel, select the most recent one. selected := res.Logs[0] for _, log := range res.Logs[1:] { if log.Date.After(selected.Date) { selected = log } } return selected, nil } type findOpenResult struct { Logs []models.Log `json:"logs"` } var findOpenGQL = ` query FindOpen($channel:String!) { logs(filter:{open:true, channels:[$channel]}) { id date channelName title eventName description open posts { id time kind nick text } } } `