Beispiel #1
0
        private static object NamedItemAPI <T>(dynamic requestObj, NamedItemCollection <T> collection, Action saveCollection = null) where T : NamedItem, new()
        {
            if (saveCollection == null)
            {
                saveCollection = (Action)(() => { ServiceWrapper.config.Save(); });
            }
            string cmd           = requestObj.cmd;
            int    idxUnderscore = cmd.LastIndexOf('_');

            if (idxUnderscore > -1 && idxUnderscore + 1 < cmd.Length)
            {
                cmd = cmd.Substring(idxUnderscore + 1);
            }
            switch (cmd)
            {
            case "reorder":
            {
                return(new ResultWithData(collection.Reorder(requestObj.ids.ToObject <List <int> >())));
            }

            case "names":
            {
                return(new ResultWithData(collection.Names()));
            }

            case "list":
            {
                return(new ResultWithData(collection.List()));
            }

            case "new":
            {
                object result = collection.New();
                if (result != null)
                {
                    saveCollection();
                    return(new ResultWithData(result));
                }
                else
                {
                    return(new ResultFailWithReason("unable to create new item"));
                }
            }

            case "get":
            {
                T item = collection.Get((int)requestObj.id);
                if (item != null)
                {
                    return(new ResultWithData(item));
                }
                else
                {
                    return(new ResultFailWithReason("the item was not found"));
                }
            }

            case "update":
            {
                string itemReserialized = JsonConvert.SerializeObject(requestObj.item);
                T      item             = JsonConvert.DeserializeObject <T>(itemReserialized);
                if (collection.Update(item))
                {
                    saveCollection();
                    return(new ResultWithData(item));
                }
                else
                {
                    item = collection.Get(item.id);
                    if (item != null)
                    {
                        return(new ResultFailWithData("the name was already taken", item));
                    }
                    else
                    {
                        return(new ResultFailWithReason("the item was not found"));
                    }
                }
            }

            case "delete":
            {
                collection.Delete((int)requestObj.id);
                saveCollection();
                return(new ResultSuccess());
            }

            default:
                return(null);
            }
        }