in server/datasource/mongo/track/polling_detail_dao.go [40:64]
func (s *Dao) CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (*model.PollingDetail, error) {
collection := dmongo.GetClient().GetDB().Collection(mmodel.CollectionPollingDetail)
queryFilter := bson.M{"revision": detail.Revision, "domain": detail.Domain, "session_id": detail.SessionID}
res := collection.FindOne(ctx, queryFilter)
if res.Err() != nil {
if res.Err() == mongo.ErrNoDocuments {
id, err := uuid.NewV4()
if err != nil {
return nil, err
}
detail.ID = id.String()
_, err = collection.InsertOne(ctx, detail)
if err != nil {
return nil, err
}
return detail, nil
}
return nil, res.Err()
}
_, err := collection.UpdateOne(ctx, queryFilter, bson.D{{Key: "$set", Value: detail}})
if err != nil {
return nil, err
}
return detail, nil
}