39 lines
818 B
Go
39 lines
818 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
type MessageToPersistence struct {
|
|
pipeline Pipeline
|
|
}
|
|
|
|
func NewMessageToPersistencePipeline(ctx context.Context, cfg Config) (Pipeline, error) {
|
|
reader, err := NewQueue(ctx, "new_message", cfg.driver)
|
|
if err != nil {
|
|
return Pipeline{}, err
|
|
}
|
|
writer, err := NewQueue(ctx, "new_persistence", cfg.driver)
|
|
if err != nil {
|
|
return Pipeline{}, err
|
|
}
|
|
return Pipeline{
|
|
writer: writer,
|
|
reader: reader,
|
|
process: newMessageToPersistenceProcess(cfg.storage),
|
|
}, nil
|
|
}
|
|
|
|
func newMessageToPersistenceProcess(storage Storage) processFunc {
|
|
return func(ctx context.Context, msg []byte) ([]byte, error) {
|
|
m, err := Deserialize(msg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := storage.UpsertMessage(ctx, m); err != nil {
|
|
return nil, err
|
|
}
|
|
return msg, nil
|
|
}
|
|
}
|