50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/breel-render/spoc-bot-vr/model"
|
|
)
|
|
|
|
type SlackToModel struct {
|
|
pipeline Pipeline
|
|
}
|
|
|
|
type Models struct {
|
|
Event model.Event
|
|
Message model.Message
|
|
Thread model.Thread
|
|
}
|
|
|
|
func NewSlackToModelPipeline(ctx context.Context, cfg Config) (Pipeline, error) {
|
|
reader, err := NewQueue(ctx, "slack_event", cfg.driver)
|
|
if err != nil {
|
|
return Pipeline{}, err
|
|
}
|
|
writer, err := NewQueue(ctx, "new_message", cfg.driver)
|
|
if err != nil {
|
|
return Pipeline{}, err
|
|
}
|
|
return Pipeline{
|
|
writer: writer,
|
|
reader: reader,
|
|
process: newSlackToModelProcess(cfg),
|
|
}, nil
|
|
}
|
|
|
|
func newSlackToModelProcess(cfg Config) processFunc {
|
|
return func(ctx context.Context, slack []byte) ([]byte, error) {
|
|
m, err := ParseSlack(slack, cfg.AssetPattern, cfg.DatacenterPattern, cfg.EventNamePattern)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to deserialize slack %w: %s", err, slack)
|
|
}
|
|
return m.Serialize(), nil
|
|
}
|
|
}
|
|
|
|
func ParseSlack([]byte, string, string, string) (interface{ Serialize() []byte }, error) {
|
|
return nil, errors.New("not impl")
|
|
}
|