main
bel 2024-04-13 10:28:55 -06:00
parent 6b962ea509
commit a3630a8fda
1 changed files with 16 additions and 38 deletions

View File

@ -25,55 +25,33 @@ func (s Storage) MessagesSince(ctx context.Context, t time.Time) ([]Message, err
}) })
} }
func (s Storage) EventNamesSince(ctx context.Context, t time.Time) ([]string, error) {
messages, err := s.MessagesSince(ctx, t)
if err != nil {
return nil, err
}
names := map[string]struct{}{}
for _, m := range messages {
names[m.EventName] = struct{}{}
}
result := make([]string, 0, len(names))
for k := range names {
result = append(result, k)
}
sort.Strings(result)
return result, nil
}
func (s Storage) EventsSince(ctx context.Context, t time.Time) ([]string, error) {
messages, err := s.MessagesSince(ctx, t)
if err != nil {
return nil, err
}
events := map[string]struct{}{}
for _, m := range messages {
events[m.Event] = struct{}{}
}
result := make([]string, 0, len(events))
for k := range events {
result = append(result, k)
}
sort.Strings(result)
return result, nil
}
func (s Storage) Threads(ctx context.Context) ([]string, error) { func (s Storage) Threads(ctx context.Context) ([]string, error) {
return s.ThreadsSince(ctx, time.Unix(0, 0)) return s.ThreadsSince(ctx, time.Unix(0, 0))
} }
func (s Storage) ThreadsSince(ctx context.Context, t time.Time) ([]string, error) { func (s Storage) ThreadsSince(ctx context.Context, t time.Time) ([]string, error) {
return s.fieldsSince(ctx, t, func(m Message) string { return m.Thread })
}
func (s Storage) EventNamesSince(ctx context.Context, t time.Time) ([]string, error) {
return s.fieldsSince(ctx, t, func(m Message) string { return m.EventName })
}
func (s Storage) EventsSince(ctx context.Context, t time.Time) ([]string, error) {
return s.fieldsSince(ctx, t, func(m Message) string { return m.Event })
}
func (s Storage) fieldsSince(ctx context.Context, t time.Time, fielder func(Message) string) ([]string, error) {
messages, err := s.MessagesSince(ctx, t) messages, err := s.MessagesSince(ctx, t)
if err != nil { if err != nil {
return nil, err return nil, err
} }
threads := map[string]struct{}{} values := map[string]struct{}{}
for _, m := range messages { for _, m := range messages {
threads[m.Thread] = struct{}{} values[fielder(m)] = struct{}{}
} }
result := make([]string, 0, len(threads)) result := make([]string, 0, len(values))
for k := range threads { for k := range values {
result = append(result, k) result = append(result, k)
} }
sort.Strings(result) sort.Strings(result)