Предположим, что есть структура, и я сохраняю эту структуру в базе данных 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."
}
}
Как я буду использовать одну функцию для этого. Любая помощь, пожалуйста.