grain/events/events.go

71 lines
1.9 KiB
Go

package events
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Event struct {
CreatedAt int64 `json:"created_at"`
Kind int `json:"kind"`
Content string `json:"content"`
Tags []string `json:"tags"`
PubKey string `json:"pubkey"`
ID string `json:"id"`
Sig string `json:"sig"`
}
var eventKind0Collection *mongo.Collection
var eventKind1Collection *mongo.Collection
func InitCollections(client *mongo.Client, eventKind0, eventKind1 string) {
eventKind0Collection = client.Database("grain").Collection(eventKind0)
eventKind1Collection = client.Database("grain").Collection(eventKind1)
indexModel := mongo.IndexModel{
Keys: bson.D{{Key: "id", Value: 1}},
Options: options.Index().SetUnique(true),
}
_, err := eventKind0Collection.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
fmt.Println("Failed to create index on event-kind0: ", err)
}
_, err = eventKind1Collection.Indexes().CreateOne(context.TODO(), indexModel)
if err != nil {
fmt.Println("Failed to create index on event-kind1: ", err)
}
}
func HandleEvent(ctx context.Context, evt Event) error {
var collection *mongo.Collection
switch evt.Kind {
case 0:
collection = eventKind0Collection
case 1:
return HandleEventKind1(ctx, evt, eventKind1Collection)
default:
fmt.Println("Unknown event kind:", evt.Kind)
return fmt.Errorf("unknown event kind: %d", evt.Kind)
}
_, err := collection.InsertOne(ctx, evt)
if err != nil {
fmt.Println("Error inserting event into MongoDB:", err)
return err
}
fmt.Println("Inserted event into MongoDB:", evt.ID)
return nil
}
func GetCollections() map[string]*mongo.Collection {
return map[string]*mongo.Collection{
"eventKind0": eventKind0Collection,
"eventKind1": eventKind1Collection,
}
}