From 24537681ed3cedfd4267d5a0cf2e6429305a08d2 Mon Sep 17 00:00:00 2001 From: vinchent Date: Wed, 28 Aug 2024 23:09:26 +0200 Subject: [PATCH] Setting up logger data models --- logger-service/cmd/api/main.go | 8 +++- logger-service/data/models.go | 78 ++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 logger-service/data/models.go diff --git a/logger-service/cmd/api/main.go b/logger-service/cmd/api/main.go index d9e485c..a9314bd 100644 --- a/logger-service/cmd/api/main.go +++ b/logger-service/cmd/api/main.go @@ -3,6 +3,7 @@ package main import ( "context" "log" + "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -25,8 +26,13 @@ func main() { if err != nil { log.Panic(err) } + // create a context in order to disconnect + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + // close connection defer func() { - if err = mongoClient.Disconnect(context.TODO()); err != nil { + if err = mongoClient.Disconnect(ctx); err != nil { panic(err) } }() diff --git a/logger-service/data/models.go b/logger-service/data/models.go new file mode 100644 index 0000000..cc178ac --- /dev/null +++ b/logger-service/data/models.go @@ -0,0 +1,78 @@ +package data + +import ( + "context" + "log" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +var client *mongo.Client + +func New(mongo *mongo.Client) Models { + client = mongo + return Models{ + LogEntry: LogEntry{}, + } +} + +type Models struct { + LogEntry LogEntry +} + +type LogEntry struct { + ID string `bson:"_id,omitempty" json:"id,omitempty"` + Name string `bson:"name" json:"name"` + Data string `bson:"data" json:"data"` + CreatedAt time.Time `bson:"created_at" json:"created_at"` + UpdatedAt time.Time `bson:"updated_at" json:"updated_at"` +} + +func (l *LogEntry) Insert(entry LogEntry) error { + collection := client.Database("logs").Collection("logs") + + _, err := collection.InsertOne(context.TODO(), LogEntry{ + Name: entry.Name, + Data: entry.Data, + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + }) + if err != nil { + return err + } + return nil +} + +func (l *LogEntry) All() ([]*LogEntry, error) { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + collection := client.Database("logs").Collection("logs") + + opts := options.Find() + opts.SetSort(bson.D{{Key: "created_at", Value: -1}}) + + cursor, err := collection.Find(ctx, bson.D{}, opts) + if err != nil { + log.Println("Finding all docs error:", err) + return nil, err + } + defer cursor.Close(ctx) + + var logs []*LogEntry + + for cursor.Next(ctx) { + var item LogEntry + + err := cursor.Decode(&item) + if err != nil { + log.Println("Error decoding log into slice:", err) + return nil, err + } + logs = append(logs, &item) + } + return logs, nil +}