| 127 | } |
| 128 | |
| 129 | func (p *Papi) handleEvent(ctx context.Context, event longpollclient.Event, sync bool) error { |
| 130 | logger := p.Logger.WithField("request-id", event.RequestId) |
| 131 | logger.Debugf("message received: %+v", event.Data) |
| 132 | |
| 133 | message := &Message{} |
| 134 | if err := json.Unmarshal([]byte(event.Data), message); err != nil { |
| 135 | return fmt.Errorf("polling papi message format is not compatible: %+v: %w", event.Data, err) |
| 136 | } |
| 137 | |
| 138 | if message.Header == nil { |
| 139 | return errors.New("no header in message, skipping") |
| 140 | } |
| 141 | |
| 142 | if message.Header.Source == nil { |
| 143 | return errors.New("no source user in header message, skipping") |
| 144 | } |
| 145 | |
| 146 | operationFunc, ok := operationMap[message.Header.OperationType] |
| 147 | if !ok { |
| 148 | return fmt.Errorf("operation '%s' unknown, continue", message.Header.OperationType) |
| 149 | } |
| 150 | |
| 151 | metrics.PapiOrdersReceived.WithLabelValues(message.Header.OperationType, message.Header.OperationCmd).Inc() |
| 152 | |
| 153 | logger.Debugf("Calling operation '%s'", message.Header.OperationType) |
| 154 | |
| 155 | err := operationFunc(ctx, message, p, sync) |
| 156 | if err != nil { |
| 157 | return fmt.Errorf("'%s %s failed: %w", message.Header.OperationType, message.Header.OperationCmd, err) |
| 158 | } |
| 159 | |
| 160 | return nil |
| 161 | } |
| 162 | |
| 163 | func (p *Papi) GetPermissions(ctx context.Context) (PapiPermCheckSuccess, error) { |
| 164 | httpClient := p.apiClient.GetClient() |