package dashboard import ( "strings" "inbox/internal/domain/message" "inbox/internal/domain/topic" ) func previewText(value string) string { value = strings.TrimSpace(value) if value == "" { return "" } lines := strings.Split(value, "\n") if len(lines) == 0 { return value } return strings.TrimSpace(lines[0]) } func splitRecipients(value string) []string { parts := strings.Split(value, ",") out := make([]string, 0, len(parts)) seen := make(map[string]struct{}, len(parts)) for _, part := range parts { part = strings.TrimSpace(part) if part == "" { continue } if _, ok := seen[part]; ok { continue } seen[part] = struct{}{} out = append(out, part) } return out } func messageTargetsRole(expr, roleName string) bool { for _, item := range splitRecipients(expr) { if item == roleName { return true } } return false } func dashboardMessageItemFor(item message.Record, record topic.Record) dashboardMessageItem { out := dashboardMessageItem{ MessageID: item.ID, From: item.FromRoleName, To: item.ToExpr, Type: string(item.Type), Topic: record.Slug, Stage: item.Stage, BodyMarkdown: item.BodyMarkdown, } if item.ReplyToMessageID != "" { out.ReplyTo = item.ReplyToMessageID } return out }