Update an object Possible Responder status codes are: - 200 OK: Update successful, however some field(s) were changed, returns updates source - 202 Accepted: Processing is delayed, return nothing - 204 No Content: Update was successful, no fields were changed by the server, return nothing
(obj interface{}, req api2go.Request, updateTransaction *sqlx.Tx)
| 30 | // - 202 Accepted: Processing is delayed, return nothing |
| 31 | // - 204 No Content: Update was successful, no fields were changed by the server, return nothing |
| 32 | func (dbResource *DbResource) UpdateWithoutFilters(obj interface{}, req api2go.Request, updateTransaction *sqlx.Tx) (map[string]interface{}, error) { |
| 33 | |
| 34 | data, ok := obj.(api2go.Api2GoModel) |
| 35 | |
| 36 | if !ok { |
| 37 | log.Errorf("Request data is not api2go model: %v", data) |
| 38 | return nil, errors.New("invalid request") |
| 39 | } |
| 40 | |
| 41 | updateObjectReferenceId := uuid.MustParse(data.GetID()) |
| 42 | |
| 43 | var err error |
| 44 | idInt := data.GetColumnOriginalValue("id") |
| 45 | |
| 46 | if idInt == nil { |
| 47 | idInt, err = GetReferenceIdToIdWithTransaction(dbResource.model.GetName(), daptinid.DaptinReferenceId(updateObjectReferenceId), updateTransaction) |
| 48 | if err != nil { |
| 49 | return nil, err |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | user := req.PlainRequest.Context().Value("user") |
| 54 | sessionUser := &auth.SessionUser{} |
| 55 | |
| 56 | if user != nil { |
| 57 | sessionUser = user.(*auth.SessionUser) |
| 58 | } |
| 59 | isAdmin := IsAdminWithTransaction(sessionUser, updateTransaction) |
| 60 | |
| 61 | attrs := data.GetAllAsAttributes() |
| 62 | |
| 63 | if !data.HasVersion() { |
| 64 | originalData, err := dbResource.GetReferenceIdToObjectWithTransaction(dbResource.model.GetTableName(), |
| 65 | daptinid.DaptinReferenceId(updateObjectReferenceId), updateTransaction) |
| 66 | if err != nil { |
| 67 | return nil, err |
| 68 | } |
| 69 | data = api2go.NewApi2GoModelWithData(dbResource.model.GetTableName(), nil, 0, nil, originalData) |
| 70 | data.SetAttributes(attrs) |
| 71 | } |
| 72 | |
| 73 | allChanges := data.GetChanges() |
| 74 | allColumns := dbResource.model.GetColumns() |
| 75 | //log.Printf("Update object request with changes: %v", allChanges) |
| 76 | |
| 77 | //dataToInsert := make(map[string]interface{}) |
| 78 | |
| 79 | languagePreferences := make([]string, 0) |
| 80 | if dbResource.tableInfo.TranslationsEnabled { |
| 81 | prefs := req.PlainRequest.Context().Value("language_preference") |
| 82 | if prefs != nil { |
| 83 | languagePreferences = prefs.([]string) |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | var colsList []string |
| 88 | var valsList []interface{} |
| 89 | passwordChanged := false |