diff --git a/logger-service/data/models.go b/logger-service/data/models.go index cc178ac..b6f7e17 100644 --- a/logger-service/data/models.go +++ b/logger-service/data/models.go @@ -6,6 +6,7 @@ import ( "time" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) @@ -76,3 +77,62 @@ func (l *LogEntry) All() ([]*LogEntry, error) { } return logs, nil } + +func (l *LogEntry) GetOne(id string) (*LogEntry, error) { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + collection := client.Database("logs").Collection("logs") + + docID, err := primitive.ObjectIDFromHex(id) + if err != nil { + return nil, err + } + + var entry LogEntry + err = collection.FindOne(ctx, bson.M{"_id": docID}).Decode(&entry) + if err != nil { + return nil, err + } + return &entry, nil +} + +func (l *LogEntry) DropCollection() error { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + collection := client.Database("logs").Collection("logs") + + if err := collection.Drop(ctx); err != nil { + return err + } + + return nil +} + +func (l *LogEntry) Update() (*mongo.UpdateResult, error) { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + collection := client.Database("logs").Collection("logs") + + docID, err := primitive.ObjectIDFromHex(l.ID) + if err != nil { + return nil, err + } + + result, err := collection.UpdateOne( + ctx, + bson.M{"_id": docID}, + bson.D{ + {Key: "$set", Value: bson.D{ + {Key: "name", Value: l.Name}, + {Key: "data", Value: l.Data}, + {Key: "updated_at", Value: time.Now()}, + }}, + }) + if err != nil { + return nil, err + } + return result, nil +}