func()

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
}