ListProjectWebhooks lists a list of ProjectWebhook instances.
(ctx context.Context, find *FindProjectWebhookMessage)
| 82 | |
| 83 | // ListProjectWebhooks lists a list of ProjectWebhook instances. |
| 84 | func (s *Store) ListProjectWebhooks(ctx context.Context, find *FindProjectWebhookMessage) ([]*ProjectWebhookMessage, error) { |
| 85 | q := qb.Q().Space(` |
| 86 | SELECT |
| 87 | resource_id, |
| 88 | project, |
| 89 | payload |
| 90 | FROM project_webhook |
| 91 | WHERE TRUE |
| 92 | `) |
| 93 | |
| 94 | if v := find.ResourceID; v != nil { |
| 95 | q.And("resource_id = ?", *v) |
| 96 | } |
| 97 | if v := find.ProjectID; v != nil { |
| 98 | q.And("project = ?", *v) |
| 99 | } |
| 100 | if len(find.ProjectIDs) > 0 { |
| 101 | q.And("project = ANY(?)", find.ProjectIDs) |
| 102 | } |
| 103 | if v := find.URL; v != nil { |
| 104 | q.And("payload->>'url' = ?", *v) |
| 105 | } |
| 106 | |
| 107 | query, args, err := q.ToSQL() |
| 108 | if err != nil { |
| 109 | return nil, errors.Wrapf(err, "failed to build sql") |
| 110 | } |
| 111 | |
| 112 | rows, err := s.GetDB().QueryContext(ctx, query, args...) |
| 113 | if err != nil { |
| 114 | return nil, err |
| 115 | } |
| 116 | defer rows.Close() |
| 117 | |
| 118 | var projectWebhooks []*ProjectWebhookMessage |
| 119 | for rows.Next() { |
| 120 | projectWebhook := ProjectWebhookMessage{ |
| 121 | Payload: &storepb.ProjectWebhook{}, |
| 122 | } |
| 123 | var payload []byte |
| 124 | |
| 125 | if err := rows.Scan( |
| 126 | &projectWebhook.ResourceID, |
| 127 | &projectWebhook.ProjectID, |
| 128 | &payload, |
| 129 | ); err != nil { |
| 130 | return nil, err |
| 131 | } |
| 132 | |
| 133 | if err := common.ProtojsonUnmarshaler.Unmarshal(payload, projectWebhook.Payload); err != nil { |
| 134 | return nil, errors.Wrapf(err, "failed to unmarshal") |
| 135 | } |
| 136 | |
| 137 | if v := find.EventType; v != nil { |
| 138 | found := false |
| 139 | for _, activity := range projectWebhook.Payload.Activities { |
| 140 | if activity == *v { |
| 141 | found = true |