Как сделать запрос функции comman для обновления в golang - PullRequest
0 голосов
/ 30 октября 2018

Предположим, что есть структура, и я сохраняю эту структуру в базе данных mongodb. Пример: -

type Booking struct {
  Id                          int                 `json:"_id,omitempty" bson:"_id,omitempty"`
  Uid                         int                 `json:"uid,omitempty" bson:"uid,omitempty"`
  IndustryId                  int                 `json:"industry_id,omitempty" bson:"industry_id,omitempty"`
  PricingParameter []BookingParams `json:"pricing_parameter,omitempty" bson:"pricing_parameter,omitempty"`
  AreaParameter    BookingParams   `json:"area_parameter,omitempty" bson:"area_parameter,omitempty"`
  PartialCleaning  []BookingParams `json:"partial_cleaning,omitempty" bson:"partial_cleaning,omitempty"`
  Extras           []BookingParams `json:"extras" bson:"extras"`
}

type BookingParams struct {
  Id                  int    `json:"id" bson:"id,omitempty"`
  Name                string `json:"name,omitempty" bson:"name,omitempty"`
  Quantity            int    `json:"quantity,omitempty" bson:"quantity,omitempty"`
}

Эта структура бронирования сохраняется в базе данных. Предположим, есть 10 бронирований с полями extras и pricing_parameters, когда я обновлю значение любого из этих двух полей, тогда мои пять бронирований будут обновлены с помощью одной функции. Теперь я использую следующую функцию для этого: -

func (MerchantDb *MerchantDatabase) UpdateBulkBookingsDb(Id int, updator map[string]interface{}) (err error) {
   condition := bson.M{
    "status":    bson.M{"$in": []int{0, 1, 6, 7, 8}},
    "extras.id": Id}
  fmt.Println(bson.M{updator["field"].(string): updator["value"]})
  fmt.Println(condition)
  _, err = MerchantDb.DbUpdateAll(config.BookingsCollection, condition, bson.M{"$set": bson.M{updator["field"].(string): updator["value"]}})
  fmt.Println(err)
  return err
} 

Controller.go

func SaveExtra(c *gin.Context) {
  var extraData models.Extras
  var err error
  dataErr := json.NewDecoder(c.Request.Body).Decode(&extraData)
  if dataErr != nil {
    GetErrResponse(c, config.DataFormatErrMsg, dataErr)
    return
  }

  if extraData.Id != 0 {
    savedExtra, _ := merchantDb.GetExtraById(extraData.Id)
    err = merchantDb.UpdateExtraById(extraData.Id, extraData)
    updator := make(map[string]interface{})
    if savedExtra.TimeSA != extraData.TimeSA || savedExtra.TimeML != extraData.TimeML {
        updator["field"] = "is_length_updated"
        updator["value"] = 1
        err = merchantDb.UpdateBulkBookingsDb(extraData.Id, updator)
    }
    if savedExtra.PriceSA != extraData.PriceSA || savedExtra.PriceML != extraData.PriceML {
        updator["field"] = "is_price_updated"
        updator["value"] = 1
        err = merchantDb.UpdateBulkBookingsDb(extraData.Id, updator)
    }
    SuccessMsg = "Extra updated successfully."
  }
}

Как я буду использовать одну функцию для этого. Любая помощь, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...