diff --git a/internal/backend/db/mongo_crash.go b/internal/backend/db/mongo_crash.go index 95defce..46e8b8c 100644 --- a/internal/backend/db/mongo_crash.go +++ b/internal/backend/db/mongo_crash.go @@ -2,11 +2,10 @@ package db import ( "context" - "errors" - "fmt" "strings" "github.com/CalebQ42/darkstorm-server/internal/backend" + "github.com/google/uuid" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) @@ -40,42 +39,39 @@ func (m *MongoCrashTable) IsArchived(ind backend.IndividualCrash) bool { func (m *MongoCrashTable) InsertCrash(ind backend.IndividualCrash) error { first, _, _ := strings.Cut(ind.Stack, "\n") - findRes := m.col.FindOne(context.Background(), + res, err := m.col.UpdateOne(context.Background(), bson.M{"error": ind.Error, "firstLine": first, //filter main report - "individual.stack": ind.Stack, "individual.platform": ind.Platform}, //filter individual - // bson.M{"$inc": bson.M{"individual.count": 1}}, //increment count + "individual": bson.M{"$elemMatch": bson.M{"stack": ind.Stack, "platform": ind.Platform}}}, //filter individual + bson.M{"$inc": bson.M{"individual.$.count": 1}}, //increment count ) - var out map[string]any - findRes.Decode(&out) - fmt.Println(out) - return errors.New("STUFF") - // if err != nil && err != mongo.ErrNoDocuments { - // return err - // } - // if err == mongo.ErrNoDocuments || res.MatchedCount == 0 { - // ind.Count = 1 - // res, err = m.col.UpdateMany(context.Background(), - // bson.M{"error": ind.Error, "firstLine": first}, //filter - // bson.M{"$push": bson.M{"individual": ind}}, //Add new individual report - // ) - // if err != nil && err != mongo.ErrNoDocuments { - // return err - // } - // if err == mongo.ErrNoDocuments || res.MatchedCount == 0 { - // var id uuid.UUID - // id, err = uuid.NewV7() - // if err != nil { - // return err - // } - // _, err = m.col.InsertOne(context.Background(), - // backend.CrashReport{ - // ID: id.String(), - // Error: ind.Error, - // FirstLine: first, - // Individual: []backend.IndividualCrash{ind}, - // }, - // ) - // } - // } - // return err + if err != nil && err != mongo.ErrNoDocuments { + return err + } + if err == mongo.ErrNoDocuments || res.MatchedCount == 0 { + ind.Count = 1 + res, err = m.col.UpdateMany(context.Background(), + bson.M{"error": ind.Error, "firstLine": first}, //filter + bson.M{"$push": bson.M{"individual": ind}}, //Add new individual report + ) + if err != nil && err != mongo.ErrNoDocuments { + return err + } + if err == mongo.ErrNoDocuments || res.MatchedCount == 0 { + var id uuid.UUID + id, err = uuid.NewV7() + if err != nil { + return err + } + ind.Count = 1 + _, err = m.col.InsertOne(context.Background(), + backend.CrashReport{ + ID: id.String(), + Error: ind.Error, + FirstLine: first, + Individual: []backend.IndividualCrash{ind}, + }, + ) + } + } + return err }