|
|
@ -235,18 +235,6 @@ func _make_put_or_patch_handle(table *xql.Table, entity interface{}, updatefunc |
|
|
|
entityMap[k] = true |
|
|
|
} |
|
|
|
} |
|
|
|
//for i, _ := range pks {
|
|
|
|
// pk, _ := table.Columns[table.PrimaryKey[i]]
|
|
|
|
// if _, ok := entityMap[pk.FieldName]; ok {
|
|
|
|
// return Failure_Response(ERROR_FORBIDDEN, "Not Allowed to Change Primary Key(s).")
|
|
|
|
// }
|
|
|
|
// if _, ok := entityMap[pk.JTAG]; ok {
|
|
|
|
// return Failure_Response(ERROR_FORBIDDEN, "Not Allowed to Change Primary Key(s).")
|
|
|
|
// }
|
|
|
|
// if _, ok := entityMap[pk.PropertyName]; ok {
|
|
|
|
// return Failure_Response(ERROR_FORBIDDEN, "Not Allowed to Change Primary Key(s).")
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
var updateCols []xql.UpdateColumn |
|
|
|
for _, c := range table.Columns { |
|
|
|
if _, ok := entityMap[c.FieldName]; ok { |
|
|
@ -317,9 +305,22 @@ func _make_post_handle(table *xql.Table, entity interface{}, inertfunc InsertEnt |
|
|
|
if nil == post_data || len(post_data) < 1 { |
|
|
|
return Failure_Response(ERROR_INVALID_DATA, "Empty Data!") |
|
|
|
} |
|
|
|
entityObj := reflect.New(entityType) |
|
|
|
err = json.Unmarshal(post_data, entityObj.Elem().Addr().Interface()) |
|
|
|
if nil != err { |
|
|
|
//entityObj := reflect.New(entityType)
|
|
|
|
entityObjs := reflect.MakeSlice(reflect.SliceOf(entityType), 1,2) |
|
|
|
//p := reflect.PtrTo(reflect.SliceOf(entityType))
|
|
|
|
//reflect.Indirect(entityObjs).Addr().Interface()
|
|
|
|
//err = json.Unmarshal(post_data, entityObj.Elem().Addr().Interface())
|
|
|
|
//if nil != err {
|
|
|
|
// return Failure_Response(ERROR_INVALID_DATA, "Invalid Data!")
|
|
|
|
//}
|
|
|
|
p := reflect.New(reflect.SliceOf(entityType)) |
|
|
|
reflect.Indirect(p).Set(entityObjs) |
|
|
|
if err = json.Unmarshal(post_data, entityObjs.Index(0).Addr().Interface()); nil == err { |
|
|
|
log.Debugln("_make_post_handle>>>: Single Object") |
|
|
|
}else if err = json.Unmarshal(post_data, p.Interface()); nil == err { |
|
|
|
log.Debugln("_make_post_handle>>>: Slice Objects") |
|
|
|
}else{ |
|
|
|
log.Warnln("Invalid Data:", err) |
|
|
|
return Failure_Response(ERROR_INVALID_DATA, "Invalid Data!") |
|
|
|
} |
|
|
|
var pk_mapping map[string]interface{} = _build_params_map(table, url_params, pks...) |
|
|
@ -333,15 +334,6 @@ func _make_post_handle(table *xql.Table, entity interface{}, inertfunc InsertEnt |
|
|
|
pk_mapping[k] = _build_column_query_value(table, k, "=", v) |
|
|
|
} |
|
|
|
} |
|
|
|
if nil != pk_mapping { |
|
|
|
_assign_entity_from_map(entityObj.Elem().Addr().Interface(), pk_mapping, false) |
|
|
|
} |
|
|
|
if nil != inertfunc { |
|
|
|
e := inertfunc(entityObj.Elem().Addr().Interface()) |
|
|
|
if nil != e { |
|
|
|
return Failure_Response(ERROR_INVALID_DATA, fmt.Sprint(e)) |
|
|
|
} |
|
|
|
} |
|
|
|
session := xql.MakeSession(ctx.SQL(), "postgres", true) |
|
|
|
defer session.Close() |
|
|
|
result = &RestletResult{} |
|
|
@ -350,12 +342,25 @@ func _make_post_handle(table *xql.Table, entity interface{}, inertfunc InsertEnt |
|
|
|
log.Errorln("_make_post_handle:> failure:", err) |
|
|
|
return Failure_Response(FATAL_DB_WRITE_FAILED, fmt.Sprintf("%s", err)) |
|
|
|
} |
|
|
|
log.Debugln("_make_post_handle:> Inserting :", entityObj.Elem().Addr().Interface()) |
|
|
|
_, err = session.Query(table).Insert(entityObj.Elem().Addr().Interface()) |
|
|
|
if nil != err { |
|
|
|
log.Errorln("_make_post_handle:> failure:", err) |
|
|
|
session.Rollback() |
|
|
|
return Failure_Response(FATAL_DB_WRITE_FAILED, fmt.Sprintf("%s", err)) |
|
|
|
//n := 0
|
|
|
|
for i := 0; i < entityObjs.Len(); i++ { |
|
|
|
obj := entityObjs.Index(i) |
|
|
|
if nil != pk_mapping { |
|
|
|
_assign_entity_from_map(obj.Addr().Interface(), pk_mapping, false) |
|
|
|
} |
|
|
|
if nil != inertfunc { |
|
|
|
e := inertfunc(obj.Addr().Interface()) |
|
|
|
if nil != e { |
|
|
|
return Failure_Response(ERROR_INVALID_DATA, fmt.Sprint(e)) |
|
|
|
} |
|
|
|
} |
|
|
|
log.Debugln("_make_post_handle:> Inserting :", obj.Addr().Interface()) |
|
|
|
_, err = session.Query(table).Insert(obj.Addr().Interface()) |
|
|
|
if nil != err { |
|
|
|
log.Errorln("_make_post_handle:> failure:", err) |
|
|
|
session.Rollback() |
|
|
|
return Failure_Response(FATAL_DB_WRITE_FAILED, fmt.Sprintf("%s", err)) |
|
|
|
} |
|
|
|
} |
|
|
|
err = session.Commit() |
|
|
|
if nil != err { |
|
|
@ -363,7 +368,7 @@ func _make_post_handle(table *xql.Table, entity interface{}, inertfunc InsertEnt |
|
|
|
session.Rollback() |
|
|
|
return Failure_Response(FATAL_DB_WRITE_FAILED, fmt.Sprintf("%s", err)) |
|
|
|
} |
|
|
|
result.Data = entityObj.Elem().Addr().Interface() |
|
|
|
result.Data = entityObjs.Interface() |
|
|
|
result.Code = SUCCESS_CREATED |
|
|
|
return result, nil |
|
|
|
} |
|
|
|