GetEvents 获取事件列表
(ctx context.Context, sessionID string, filter *EventFilter)
| 142 | |
| 143 | // GetEvents 获取事件列表 |
| 144 | func (s *InMemoryService) GetEvents(ctx context.Context, sessionID string, filter *EventFilter) ([]Event, error) { |
| 145 | s.mu.RLock() |
| 146 | defer s.mu.RUnlock() |
| 147 | |
| 148 | session, ok := s.sessions[sessionID] |
| 149 | if !ok { |
| 150 | return nil, ErrSessionNotFound |
| 151 | } |
| 152 | |
| 153 | events := session.events.filter(func(e *Event) bool { |
| 154 | if filter == nil { |
| 155 | return true |
| 156 | } |
| 157 | |
| 158 | if filter.AgentID != "" && e.AgentID != filter.AgentID { |
| 159 | return false |
| 160 | } |
| 161 | |
| 162 | if filter.Branch != "" && e.Branch != filter.Branch { |
| 163 | return false |
| 164 | } |
| 165 | |
| 166 | if filter.Author != "" && e.Author != filter.Author { |
| 167 | return false |
| 168 | } |
| 169 | |
| 170 | if filter.StartTime != nil && e.Timestamp.Before(*filter.StartTime) { |
| 171 | return false |
| 172 | } |
| 173 | |
| 174 | if filter.EndTime != nil && e.Timestamp.After(*filter.EndTime) { |
| 175 | return false |
| 176 | } |
| 177 | |
| 178 | return true |
| 179 | }) |
| 180 | |
| 181 | // 应用分页 |
| 182 | if filter != nil { |
| 183 | start := filter.Offset |
| 184 | if start > len(events) { |
| 185 | return []Event{}, nil |
| 186 | } |
| 187 | |
| 188 | end := len(events) |
| 189 | if filter.Limit > 0 && start+filter.Limit < end { |
| 190 | end = start + filter.Limit |
| 191 | } |
| 192 | |
| 193 | events = events[start:end] |
| 194 | } |
| 195 | |
| 196 | return events, nil |
| 197 | } |
| 198 | |
| 199 | // UpdateState 更新状态 |
| 200 | func (s *InMemoryService) UpdateState(ctx context.Context, sessionID string, delta map[string]any) error { |