(ctx context.Context, repoID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int)
| 819 | } |
| 820 | |
| 821 | func (s *sqlDatabase) addRepositoryEvent(ctx context.Context, repoID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error { |
| 822 | repo, err := s.getRepoByID(ctx, s.conn, repoID) |
| 823 | if err != nil { |
| 824 | return fmt.Errorf("error updating instance: %w", err) |
| 825 | } |
| 826 | |
| 827 | msg := RepositoryEvent{ |
| 828 | Message: statusMessage, |
| 829 | EventType: event, |
| 830 | EventLevel: eventLevel, |
| 831 | RepoID: repo.ID, |
| 832 | } |
| 833 | |
| 834 | // Use Create instead of Association.Append to avoid loading all existing events |
| 835 | if err := s.conn.Create(&msg).Error; err != nil { |
| 836 | return fmt.Errorf("error adding status message: %w", err) |
| 837 | } |
| 838 | |
| 839 | if maxEvents > 0 { |
| 840 | var count int64 |
| 841 | if err := s.conn.Model(&RepositoryEvent{}).Where("repo_id = ?", repo.ID).Count(&count).Error; err != nil { |
| 842 | return fmt.Errorf("error counting events: %w", err) |
| 843 | } |
| 844 | |
| 845 | if count > int64(maxEvents) { |
| 846 | // Get the ID of the Nth most recent event |
| 847 | var cutoffEvent RepositoryEvent |
| 848 | if err := s.conn.Model(&RepositoryEvent{}). |
| 849 | Select("id"). |
| 850 | Where("repo_id = ?", repo.ID). |
| 851 | Order("id desc"). |
| 852 | Offset(maxEvents - 1). |
| 853 | Limit(1). |
| 854 | First(&cutoffEvent).Error; err != nil { |
| 855 | return fmt.Errorf("error finding cutoff event: %w", err) |
| 856 | } |
| 857 | |
| 858 | // Delete all events older than the cutoff |
| 859 | if err := s.conn.Where("repo_id = ? and id < ?", repo.ID, cutoffEvent.ID).Unscoped().Delete(&RepositoryEvent{}).Error; err != nil { |
| 860 | return fmt.Errorf("error deleting old events: %w", err) |
| 861 | } |
| 862 | } |
| 863 | } |
| 864 | return nil |
| 865 | } |
| 866 | |
| 867 | func (s *sqlDatabase) addOrgEvent(ctx context.Context, orgID string, event params.EventType, eventLevel params.EventLevel, statusMessage string, maxEvents int) error { |
| 868 | org, err := s.getOrgByID(ctx, s.conn, orgID) |
no test coverage detected