예제 #1
0
        public HttpResponseMessage Save(string entity)
        {
            var tableName = entity.ToUpper();
            var body      = Request.Content.ReadAsStringAsync().Result;
            var text      = HttpUtility.UrlDecode(body);
            var table     = TableManager.GetTable(tableName);

            text = text.IndexOf("data=") == 0 ? text.Remove(0, 5) : text;
            var obj = JsonConvert.DeserializeObject(text) as JObject;

            if (obj != null && CheckEntityForEdit(entity))
            {
                var newRow = ParseResponse(obj, table.NewRow());
                var isNew  = false;
                if (isNew = newRow[NameDict.ID] == DBNull.Value)
                {
                    newRow[NameDict.ID] = TableManager.GetNewId(tableName);
                }
                var    id      = newRow[NameDict.ID];
                string message = null;
                try {
                    if (isNew)
                    {
                        TableManager.InsertRow(newRow);
                    }
                    else
                    {
                        TableManager.UpdateRecord(TableManager.SelectRowByPrimaryKey(tableName, id), newRow);
                    }
                    message = AfterSave(newRow, obj, isNew);
                } catch (FbException ex) {
                    if (ex.ErrorCode == 335544349)
                    {
                        var uniqColumns = TableKeys.GetUniqColumns(tableName).Select(t => TableKeys.GetColumnComment(tableName, t)).ToList();
                        message = "Violation of uniqueness by " + string.Join(", ", uniqColumns);
                    }
                }
                if (message != null)
                {
                    return(CreateResponse(HttpStatusCode.Conflict, message));
                }
                return(CreateResponse(HttpStatusCode.OK, id));
            }
            return(PrepareResponce(null));
        }