(obj interface{}, req api2go.Request, transaction *sqlx.Tx)
| 1238 | } |
| 1239 | |
| 1240 | func (dbResource *DbResource) UpdateWithTransaction(obj interface{}, req api2go.Request, transaction *sqlx.Tx) (api2go.Responder, error) { |
| 1241 | data, _ := obj.(api2go.Api2GoModel) |
| 1242 | //log.Printf("Update object request: [%v][%v]", dbResource.model.GetTableName(), data.GetID()) |
| 1243 | |
| 1244 | updateRequest := &http.Request{ |
| 1245 | Method: "PATCH", |
| 1246 | URL: req.PlainRequest.URL, |
| 1247 | } |
| 1248 | updateRequest = updateRequest.WithContext(req.PlainRequest.Context()) |
| 1249 | |
| 1250 | data.SetType(dbResource.model.GetName()) |
| 1251 | |
| 1252 | for _, bf := range dbResource.ms.BeforeUpdate { |
| 1253 | //log.Printf("Invoke BeforeUpdate [%v][%v] on FindAll Request", bf.String(), dbResource.model.GetName()) |
| 1254 | |
| 1255 | finalData, err := bf.InterceptBefore(dbResource, &api2go.Request{ |
| 1256 | PlainRequest: updateRequest, |
| 1257 | QueryParams: req.QueryParams, |
| 1258 | Header: req.Header, |
| 1259 | Pagination: req.Pagination, |
| 1260 | }, []map[string]interface{}{ |
| 1261 | data.GetAllAsAttributes(), |
| 1262 | }, transaction) |
| 1263 | if err != nil { |
| 1264 | log.Errorf("Error From BeforeUpdate middleware: %v", err) |
| 1265 | return nil, err |
| 1266 | } |
| 1267 | if len(finalData) == 0 { |
| 1268 | return nil, fmt.Errorf("failed to updated this object because of [%v]", bf.String()) |
| 1269 | } |
| 1270 | res := finalData[0] |
| 1271 | data.SetAttributes(res) |
| 1272 | } |
| 1273 | |
| 1274 | updatedResource, err := dbResource.UpdateWithoutFilters(obj, req, transaction) |
| 1275 | log.Tracef("Completed UpdateWithoutFilters in UpdateWithTransaction") |
| 1276 | |
| 1277 | if err != nil { |
| 1278 | return NewResponse(nil, nil, 500, nil), err |
| 1279 | } |
| 1280 | |
| 1281 | for _, bf := range dbResource.ms.AfterUpdate { |
| 1282 | log.Tracef("Invoke AfterUpdate [%v][%v] on FindAll Request", bf.String(), dbResource.model.GetName()) |
| 1283 | |
| 1284 | results, err := bf.InterceptAfter(dbResource, &api2go.Request{ |
| 1285 | PlainRequest: updateRequest, |
| 1286 | QueryParams: req.QueryParams, |
| 1287 | Header: req.Header, |
| 1288 | Pagination: req.Pagination, |
| 1289 | }, []map[string]interface{}{updatedResource}, transaction) |
| 1290 | if len(results) != 0 { |
| 1291 | updatedResource = results[0] |
| 1292 | |
| 1293 | } else { |
| 1294 | updatedResource = nil |
| 1295 | } |
| 1296 | |
| 1297 | if err != nil { |
no test coverage detected