From 9f72d3cbf01b48d381c183f00239ef6f9f0a356c Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 21 Mar 2013 16:13:43 -0400 Subject: [PATCH 1/4] Fixed the FilterItems class --- Podio.API/Services/ItemService.cs | 451 +++++++++++++++--------------- 1 file changed, 227 insertions(+), 224 deletions(-) diff --git a/Podio.API/Services/ItemService.cs b/Podio.API/Services/ItemService.cs index 990a0e5..89b2590 100644 --- a/Podio.API/Services/ItemService.cs +++ b/Podio.API/Services/ItemService.cs @@ -1,224 +1,227 @@ -using Podio.API.Model; -using Podio.API.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; - - -namespace Podio.API.Services -{ - public class ItemService - { - private Client _client; - /// - /// Add a client and you can use this as a shortcut to the Podio REST API - /// - public ItemService(Client client) - { - _client = client; - } - - /// - /// https://developers.podio.com/doc/items/get-item-22360 - /// - public Item GetItem(int itemId, bool markAsViewed = true) - { - Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; - return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; - } - - /// - /// https://developers.podio.com/doc/items/get-items-27803 - /// - public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) - { - Dictionary args = new Dictionary(); - - args.Add("limit", limit.ToString()); - args.Add("offset", offset.ToString()); - - if (key.HasValue) - args.Add(key.Value.Key, key.Value.Value); - - if (remembered != null) - args.Add("remembered", remembered.ToString()); - - if (!string.IsNullOrEmpty(sortBy)) - args.Add("sort_by", sortBy); - if (sortDesc != null) - args.Add("sort_desc", sortDesc.ToString()); - if (viewId != null) - args.Add("view_id", viewId.ToString()); - - return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; - } - - [DataContract] - public struct FilterRequest - { - [DataMember(IsRequired = false, Name = "filters")] - public IDictionary Filters { get; set; } - - [DataMember(IsRequired = false, Name = "sort_by")] - public string SortBy { get; set; } - - [DataMember(IsRequired = false, Name = "sort_desc")] - public bool? SortDesc { get; set; } - - [DataMember(IsRequired = false, Name = "limit")] - public int? Limit { get; set; } - - [DataMember(IsRequired = false, Name = "offset")] - public int? Offset { get; set; } - - [DataMember(IsRequired = false, Name = "remember")] - public bool? Remember { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/filter-items-4496747 - /// - public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - { - var requestData = new FilterRequest() - { - Filters = filters, - SortBy = sortBy, - SortDesc = sortDesc, - Limit = limit, - Offset = offset, - Remember = remembered - }; - return FilterItems(appId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public PodioCollection FilterItems(int appId, FilterRequest requestData) - { - return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - [DataContract] - public struct CreateUpdateRequest - { - [DataMember(IsRequired = false, Name = "fields")] - public IEnumerable> Fields { get; set; } - - [DataMember(IsRequired = false, Name = "file_ids")] - public IEnumerable FileIds { get; set; } - - [DataMember(IsRequired = false, Name = "tags")] - public IEnumerable Tags { get; set; } - - [DataMember(IsRequired = false, Name = "reminder")] - public Reminder Reminder { get; set; } - - [DataMember(IsRequired = false, Name = "recurrence")] - public Recurrence Recurrence { get; set; } - - [DataMember(IsRequired = false, Name = "linked_account_id")] - public int? LinkedAccountId { get; set; } - - [DataMember(IsRequired = false, Name = "ref")] - public Ref Ref { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public int AddNewItem(int appId, Item item) { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text) - }; - var newItem = AddNewItem(appId, requestData); - item.ItemId = newItem.ItemId; - item.Title = newItem.Title; - return (int)item.ItemId; - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public Item AddNewItem(int appId, CreateUpdateRequest requestData) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(Item item) - { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text), - - }; - UpdateItem((int)item.ItemId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(int itemId, CreateUpdateRequest requestData) - { - PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); - } - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); - } - - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) - { - return DeleteItems(new int[] { itemId }, silent); - } - - /* - * -Calculate -Delete item reference -Export items -Filter items -Filter items by view -Find items by field and title -Get app values -Get item basic -Get item field values -Get item preview for field reference -Get item references -Get item revision -Get item revision difference -Get item revisions -Get item values -Get items -Get items as Xlsx -Get meeting URL -Get references to item by field -Get top values for field -Revert item revision -Set participation -Update item -Update item field values -Update item reference -Update item values - */ - } -} +using Podio.API.Model; +using Podio.API.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; + + +namespace Podio.API.Services +{ + public class ItemService + { + private Client _client; + /// + /// Add a client and you can use this as a shortcut to the Podio REST API + /// + public ItemService(Client client) + { + _client = client; + } + + /// + /// https://developers.podio.com/doc/items/get-item-22360 + /// + public Item GetItem(int itemId, bool markAsViewed = true) + { + Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; + return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; + } + + /// + /// https://developers.podio.com/doc/items/get-items-27803 + /// + public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) + { + Dictionary args = new Dictionary(); + + args.Add("limit", limit.ToString()); + args.Add("offset", offset.ToString()); + + if (key.HasValue) + args.Add(key.Value.Key, key.Value.Value); + + if (remembered != null) + args.Add("remembered", remembered.ToString()); + + if (!string.IsNullOrEmpty(sortBy)) + args.Add("sort_by", sortBy); + if (sortDesc != null) + args.Add("sort_desc", sortDesc.ToString()); + if (viewId != null) + args.Add("view_id", viewId.ToString()); + + return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; + } + + [DataContract] + public struct FilterRequest + { + [DataMember(IsRequired = false, Name = "filters")] + //public IDictionary Filters { get; set; } // Changed to below to fix FilterItem for category/question field type + public IDictionary Filters { get; set; } + + [DataMember(IsRequired = false, Name = "sort_by")] + public string SortBy { get; set; } + + [DataMember(IsRequired = false, Name = "sort_desc")] + public bool? SortDesc { get; set; } + + [DataMember(IsRequired = false, Name = "limit")] + public int? Limit { get; set; } + + [DataMember(IsRequired = false, Name = "offset")] + public int? Offset { get; set; } + + [DataMember(IsRequired = false, Name = "remember")] + public bool? Remember { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/filter-items-4496747 + /// + //public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + // Changed to below to fix FilterItem for category/question field type + public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + { + var requestData = new FilterRequest() + { + Filters = filters, + SortBy = sortBy, + SortDesc = sortDesc, + Limit = limit, + Offset = offset, + Remember = remembered + }; + return FilterItems(appId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public PodioCollection FilterItems(int appId, FilterRequest requestData) + { + return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + [DataContract] + public struct CreateUpdateRequest + { + [DataMember(IsRequired = false, Name = "fields")] + public IEnumerable> Fields { get; set; } + + [DataMember(IsRequired = false, Name = "file_ids")] + public IEnumerable FileIds { get; set; } + + [DataMember(IsRequired = false, Name = "tags")] + public IEnumerable Tags { get; set; } + + [DataMember(IsRequired = false, Name = "reminder")] + public Reminder Reminder { get; set; } + + [DataMember(IsRequired = false, Name = "recurrence")] + public Recurrence Recurrence { get; set; } + + [DataMember(IsRequired = false, Name = "linked_account_id")] + public int? LinkedAccountId { get; set; } + + [DataMember(IsRequired = false, Name = "ref")] + public Ref Ref { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public int AddNewItem(int appId, Item item) { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text) + }; + var newItem = AddNewItem(appId, requestData); + item.ItemId = newItem.ItemId; + item.Title = newItem.Title; + return (int)item.ItemId; + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public Item AddNewItem(int appId, CreateUpdateRequest requestData) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(Item item) + { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text), + + }; + UpdateItem((int)item.ItemId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(int itemId, CreateUpdateRequest requestData) + { + PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); + } + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); + } + + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) + { + return DeleteItems(new int[] { itemId }, silent); + } + + /* + * +Calculate +Delete item reference +Export items +Filter items +Filter items by view +Find items by field and title +Get app values +Get item basic +Get item field values +Get item preview for field reference +Get item references +Get item revision +Get item revision difference +Get item revisions +Get item values +Get items +Get items as Xlsx +Get meeting URL +Get references to item by field +Get top values for field +Revert item revision +Set participation +Update item +Update item field values +Update item reference +Update item values + */ + } +} From 0794743b8abe2e919f7d86cb59a2e34562ea67d7 Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 21 Mar 2013 17:14:32 -0400 Subject: [PATCH 2/4] Revert "Fixed the FilterItems class" This reverts commit 9f72d3cbf01b48d381c183f00239ef6f9f0a356c. --- Podio.API/Services/ItemService.cs | 451 +++++++++++++++--------------- 1 file changed, 224 insertions(+), 227 deletions(-) diff --git a/Podio.API/Services/ItemService.cs b/Podio.API/Services/ItemService.cs index 89b2590..990a0e5 100644 --- a/Podio.API/Services/ItemService.cs +++ b/Podio.API/Services/ItemService.cs @@ -1,227 +1,224 @@ -using Podio.API.Model; -using Podio.API.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; - - -namespace Podio.API.Services -{ - public class ItemService - { - private Client _client; - /// - /// Add a client and you can use this as a shortcut to the Podio REST API - /// - public ItemService(Client client) - { - _client = client; - } - - /// - /// https://developers.podio.com/doc/items/get-item-22360 - /// - public Item GetItem(int itemId, bool markAsViewed = true) - { - Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; - return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; - } - - /// - /// https://developers.podio.com/doc/items/get-items-27803 - /// - public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) - { - Dictionary args = new Dictionary(); - - args.Add("limit", limit.ToString()); - args.Add("offset", offset.ToString()); - - if (key.HasValue) - args.Add(key.Value.Key, key.Value.Value); - - if (remembered != null) - args.Add("remembered", remembered.ToString()); - - if (!string.IsNullOrEmpty(sortBy)) - args.Add("sort_by", sortBy); - if (sortDesc != null) - args.Add("sort_desc", sortDesc.ToString()); - if (viewId != null) - args.Add("view_id", viewId.ToString()); - - return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; - } - - [DataContract] - public struct FilterRequest - { - [DataMember(IsRequired = false, Name = "filters")] - //public IDictionary Filters { get; set; } // Changed to below to fix FilterItem for category/question field type - public IDictionary Filters { get; set; } - - [DataMember(IsRequired = false, Name = "sort_by")] - public string SortBy { get; set; } - - [DataMember(IsRequired = false, Name = "sort_desc")] - public bool? SortDesc { get; set; } - - [DataMember(IsRequired = false, Name = "limit")] - public int? Limit { get; set; } - - [DataMember(IsRequired = false, Name = "offset")] - public int? Offset { get; set; } - - [DataMember(IsRequired = false, Name = "remember")] - public bool? Remember { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/filter-items-4496747 - /// - //public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - // Changed to below to fix FilterItem for category/question field type - public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - { - var requestData = new FilterRequest() - { - Filters = filters, - SortBy = sortBy, - SortDesc = sortDesc, - Limit = limit, - Offset = offset, - Remember = remembered - }; - return FilterItems(appId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public PodioCollection FilterItems(int appId, FilterRequest requestData) - { - return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - [DataContract] - public struct CreateUpdateRequest - { - [DataMember(IsRequired = false, Name = "fields")] - public IEnumerable> Fields { get; set; } - - [DataMember(IsRequired = false, Name = "file_ids")] - public IEnumerable FileIds { get; set; } - - [DataMember(IsRequired = false, Name = "tags")] - public IEnumerable Tags { get; set; } - - [DataMember(IsRequired = false, Name = "reminder")] - public Reminder Reminder { get; set; } - - [DataMember(IsRequired = false, Name = "recurrence")] - public Recurrence Recurrence { get; set; } - - [DataMember(IsRequired = false, Name = "linked_account_id")] - public int? LinkedAccountId { get; set; } - - [DataMember(IsRequired = false, Name = "ref")] - public Ref Ref { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public int AddNewItem(int appId, Item item) { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text) - }; - var newItem = AddNewItem(appId, requestData); - item.ItemId = newItem.ItemId; - item.Title = newItem.Title; - return (int)item.ItemId; - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public Item AddNewItem(int appId, CreateUpdateRequest requestData) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(Item item) - { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text), - - }; - UpdateItem((int)item.ItemId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(int itemId, CreateUpdateRequest requestData) - { - PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); - } - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); - } - - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) - { - return DeleteItems(new int[] { itemId }, silent); - } - - /* - * -Calculate -Delete item reference -Export items -Filter items -Filter items by view -Find items by field and title -Get app values -Get item basic -Get item field values -Get item preview for field reference -Get item references -Get item revision -Get item revision difference -Get item revisions -Get item values -Get items -Get items as Xlsx -Get meeting URL -Get references to item by field -Get top values for field -Revert item revision -Set participation -Update item -Update item field values -Update item reference -Update item values - */ - } -} +using Podio.API.Model; +using Podio.API.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; + + +namespace Podio.API.Services +{ + public class ItemService + { + private Client _client; + /// + /// Add a client and you can use this as a shortcut to the Podio REST API + /// + public ItemService(Client client) + { + _client = client; + } + + /// + /// https://developers.podio.com/doc/items/get-item-22360 + /// + public Item GetItem(int itemId, bool markAsViewed = true) + { + Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; + return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; + } + + /// + /// https://developers.podio.com/doc/items/get-items-27803 + /// + public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) + { + Dictionary args = new Dictionary(); + + args.Add("limit", limit.ToString()); + args.Add("offset", offset.ToString()); + + if (key.HasValue) + args.Add(key.Value.Key, key.Value.Value); + + if (remembered != null) + args.Add("remembered", remembered.ToString()); + + if (!string.IsNullOrEmpty(sortBy)) + args.Add("sort_by", sortBy); + if (sortDesc != null) + args.Add("sort_desc", sortDesc.ToString()); + if (viewId != null) + args.Add("view_id", viewId.ToString()); + + return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; + } + + [DataContract] + public struct FilterRequest + { + [DataMember(IsRequired = false, Name = "filters")] + public IDictionary Filters { get; set; } + + [DataMember(IsRequired = false, Name = "sort_by")] + public string SortBy { get; set; } + + [DataMember(IsRequired = false, Name = "sort_desc")] + public bool? SortDesc { get; set; } + + [DataMember(IsRequired = false, Name = "limit")] + public int? Limit { get; set; } + + [DataMember(IsRequired = false, Name = "offset")] + public int? Offset { get; set; } + + [DataMember(IsRequired = false, Name = "remember")] + public bool? Remember { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/filter-items-4496747 + /// + public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + { + var requestData = new FilterRequest() + { + Filters = filters, + SortBy = sortBy, + SortDesc = sortDesc, + Limit = limit, + Offset = offset, + Remember = remembered + }; + return FilterItems(appId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public PodioCollection FilterItems(int appId, FilterRequest requestData) + { + return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + [DataContract] + public struct CreateUpdateRequest + { + [DataMember(IsRequired = false, Name = "fields")] + public IEnumerable> Fields { get; set; } + + [DataMember(IsRequired = false, Name = "file_ids")] + public IEnumerable FileIds { get; set; } + + [DataMember(IsRequired = false, Name = "tags")] + public IEnumerable Tags { get; set; } + + [DataMember(IsRequired = false, Name = "reminder")] + public Reminder Reminder { get; set; } + + [DataMember(IsRequired = false, Name = "recurrence")] + public Recurrence Recurrence { get; set; } + + [DataMember(IsRequired = false, Name = "linked_account_id")] + public int? LinkedAccountId { get; set; } + + [DataMember(IsRequired = false, Name = "ref")] + public Ref Ref { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public int AddNewItem(int appId, Item item) { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text) + }; + var newItem = AddNewItem(appId, requestData); + item.ItemId = newItem.ItemId; + item.Title = newItem.Title; + return (int)item.ItemId; + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public Item AddNewItem(int appId, CreateUpdateRequest requestData) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(Item item) + { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text), + + }; + UpdateItem((int)item.ItemId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(int itemId, CreateUpdateRequest requestData) + { + PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); + } + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); + } + + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) + { + return DeleteItems(new int[] { itemId }, silent); + } + + /* + * +Calculate +Delete item reference +Export items +Filter items +Filter items by view +Find items by field and title +Get app values +Get item basic +Get item field values +Get item preview for field reference +Get item references +Get item revision +Get item revision difference +Get item revisions +Get item values +Get items +Get items as Xlsx +Get meeting URL +Get references to item by field +Get top values for field +Revert item revision +Set participation +Update item +Update item field values +Update item reference +Update item values + */ + } +} From f52566b4eab141d86372f8a9ac6fe31b3f97205d Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 21 Mar 2013 17:19:48 -0400 Subject: [PATCH 3/4] Revert "Revert "Fixed the FilterItems class"" This reverts commit 0794743b8abe2e919f7d86cb59a2e34562ea67d7. --- Podio.API/Services/ItemService.cs | 451 +++++++++++++++--------------- 1 file changed, 227 insertions(+), 224 deletions(-) diff --git a/Podio.API/Services/ItemService.cs b/Podio.API/Services/ItemService.cs index 990a0e5..89b2590 100644 --- a/Podio.API/Services/ItemService.cs +++ b/Podio.API/Services/ItemService.cs @@ -1,224 +1,227 @@ -using Podio.API.Model; -using Podio.API.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; - - -namespace Podio.API.Services -{ - public class ItemService - { - private Client _client; - /// - /// Add a client and you can use this as a shortcut to the Podio REST API - /// - public ItemService(Client client) - { - _client = client; - } - - /// - /// https://developers.podio.com/doc/items/get-item-22360 - /// - public Item GetItem(int itemId, bool markAsViewed = true) - { - Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; - return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; - } - - /// - /// https://developers.podio.com/doc/items/get-items-27803 - /// - public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) - { - Dictionary args = new Dictionary(); - - args.Add("limit", limit.ToString()); - args.Add("offset", offset.ToString()); - - if (key.HasValue) - args.Add(key.Value.Key, key.Value.Value); - - if (remembered != null) - args.Add("remembered", remembered.ToString()); - - if (!string.IsNullOrEmpty(sortBy)) - args.Add("sort_by", sortBy); - if (sortDesc != null) - args.Add("sort_desc", sortDesc.ToString()); - if (viewId != null) - args.Add("view_id", viewId.ToString()); - - return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; - } - - [DataContract] - public struct FilterRequest - { - [DataMember(IsRequired = false, Name = "filters")] - public IDictionary Filters { get; set; } - - [DataMember(IsRequired = false, Name = "sort_by")] - public string SortBy { get; set; } - - [DataMember(IsRequired = false, Name = "sort_desc")] - public bool? SortDesc { get; set; } - - [DataMember(IsRequired = false, Name = "limit")] - public int? Limit { get; set; } - - [DataMember(IsRequired = false, Name = "offset")] - public int? Offset { get; set; } - - [DataMember(IsRequired = false, Name = "remember")] - public bool? Remember { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/filter-items-4496747 - /// - public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - { - var requestData = new FilterRequest() - { - Filters = filters, - SortBy = sortBy, - SortDesc = sortDesc, - Limit = limit, - Offset = offset, - Remember = remembered - }; - return FilterItems(appId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public PodioCollection FilterItems(int appId, FilterRequest requestData) - { - return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - [DataContract] - public struct CreateUpdateRequest - { - [DataMember(IsRequired = false, Name = "fields")] - public IEnumerable> Fields { get; set; } - - [DataMember(IsRequired = false, Name = "file_ids")] - public IEnumerable FileIds { get; set; } - - [DataMember(IsRequired = false, Name = "tags")] - public IEnumerable Tags { get; set; } - - [DataMember(IsRequired = false, Name = "reminder")] - public Reminder Reminder { get; set; } - - [DataMember(IsRequired = false, Name = "recurrence")] - public Recurrence Recurrence { get; set; } - - [DataMember(IsRequired = false, Name = "linked_account_id")] - public int? LinkedAccountId { get; set; } - - [DataMember(IsRequired = false, Name = "ref")] - public Ref Ref { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public int AddNewItem(int appId, Item item) { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text) - }; - var newItem = AddNewItem(appId, requestData); - item.ItemId = newItem.ItemId; - item.Title = newItem.Title; - return (int)item.ItemId; - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public Item AddNewItem(int appId, CreateUpdateRequest requestData) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(Item item) - { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text), - - }; - UpdateItem((int)item.ItemId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(int itemId, CreateUpdateRequest requestData) - { - PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); - } - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); - } - - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) - { - return DeleteItems(new int[] { itemId }, silent); - } - - /* - * -Calculate -Delete item reference -Export items -Filter items -Filter items by view -Find items by field and title -Get app values -Get item basic -Get item field values -Get item preview for field reference -Get item references -Get item revision -Get item revision difference -Get item revisions -Get item values -Get items -Get items as Xlsx -Get meeting URL -Get references to item by field -Get top values for field -Revert item revision -Set participation -Update item -Update item field values -Update item reference -Update item values - */ - } -} +using Podio.API.Model; +using Podio.API.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; + + +namespace Podio.API.Services +{ + public class ItemService + { + private Client _client; + /// + /// Add a client and you can use this as a shortcut to the Podio REST API + /// + public ItemService(Client client) + { + _client = client; + } + + /// + /// https://developers.podio.com/doc/items/get-item-22360 + /// + public Item GetItem(int itemId, bool markAsViewed = true) + { + Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; + return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; + } + + /// + /// https://developers.podio.com/doc/items/get-items-27803 + /// + public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) + { + Dictionary args = new Dictionary(); + + args.Add("limit", limit.ToString()); + args.Add("offset", offset.ToString()); + + if (key.HasValue) + args.Add(key.Value.Key, key.Value.Value); + + if (remembered != null) + args.Add("remembered", remembered.ToString()); + + if (!string.IsNullOrEmpty(sortBy)) + args.Add("sort_by", sortBy); + if (sortDesc != null) + args.Add("sort_desc", sortDesc.ToString()); + if (viewId != null) + args.Add("view_id", viewId.ToString()); + + return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; + } + + [DataContract] + public struct FilterRequest + { + [DataMember(IsRequired = false, Name = "filters")] + //public IDictionary Filters { get; set; } // Changed to below to fix FilterItem for category/question field type + public IDictionary Filters { get; set; } + + [DataMember(IsRequired = false, Name = "sort_by")] + public string SortBy { get; set; } + + [DataMember(IsRequired = false, Name = "sort_desc")] + public bool? SortDesc { get; set; } + + [DataMember(IsRequired = false, Name = "limit")] + public int? Limit { get; set; } + + [DataMember(IsRequired = false, Name = "offset")] + public int? Offset { get; set; } + + [DataMember(IsRequired = false, Name = "remember")] + public bool? Remember { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/filter-items-4496747 + /// + //public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + // Changed to below to fix FilterItem for category/question field type + public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + { + var requestData = new FilterRequest() + { + Filters = filters, + SortBy = sortBy, + SortDesc = sortDesc, + Limit = limit, + Offset = offset, + Remember = remembered + }; + return FilterItems(appId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public PodioCollection FilterItems(int appId, FilterRequest requestData) + { + return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + [DataContract] + public struct CreateUpdateRequest + { + [DataMember(IsRequired = false, Name = "fields")] + public IEnumerable> Fields { get; set; } + + [DataMember(IsRequired = false, Name = "file_ids")] + public IEnumerable FileIds { get; set; } + + [DataMember(IsRequired = false, Name = "tags")] + public IEnumerable Tags { get; set; } + + [DataMember(IsRequired = false, Name = "reminder")] + public Reminder Reminder { get; set; } + + [DataMember(IsRequired = false, Name = "recurrence")] + public Recurrence Recurrence { get; set; } + + [DataMember(IsRequired = false, Name = "linked_account_id")] + public int? LinkedAccountId { get; set; } + + [DataMember(IsRequired = false, Name = "ref")] + public Ref Ref { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public int AddNewItem(int appId, Item item) { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text) + }; + var newItem = AddNewItem(appId, requestData); + item.ItemId = newItem.ItemId; + item.Title = newItem.Title; + return (int)item.ItemId; + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public Item AddNewItem(int appId, CreateUpdateRequest requestData) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(Item item) + { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text), + + }; + UpdateItem((int)item.ItemId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(int itemId, CreateUpdateRequest requestData) + { + PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); + } + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); + } + + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) + { + return DeleteItems(new int[] { itemId }, silent); + } + + /* + * +Calculate +Delete item reference +Export items +Filter items +Filter items by view +Find items by field and title +Get app values +Get item basic +Get item field values +Get item preview for field reference +Get item references +Get item revision +Get item revision difference +Get item revisions +Get item values +Get items +Get items as Xlsx +Get meeting URL +Get references to item by field +Get top values for field +Revert item revision +Set participation +Update item +Update item field values +Update item reference +Update item values + */ + } +} From aa2ab1a96b664ae905b6250311b709ea8db60d8b Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 21 Mar 2013 17:20:19 -0400 Subject: [PATCH 4/4] Revert "Revert "Revert "Fixed the FilterItems class""" This reverts commit f52566b4eab141d86372f8a9ac6fe31b3f97205d. --- Podio.API/Services/ItemService.cs | 451 +++++++++++++++--------------- 1 file changed, 224 insertions(+), 227 deletions(-) diff --git a/Podio.API/Services/ItemService.cs b/Podio.API/Services/ItemService.cs index 89b2590..990a0e5 100644 --- a/Podio.API/Services/ItemService.cs +++ b/Podio.API/Services/ItemService.cs @@ -1,227 +1,224 @@ -using Podio.API.Model; -using Podio.API.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; - - -namespace Podio.API.Services -{ - public class ItemService - { - private Client _client; - /// - /// Add a client and you can use this as a shortcut to the Podio REST API - /// - public ItemService(Client client) - { - _client = client; - } - - /// - /// https://developers.podio.com/doc/items/get-item-22360 - /// - public Item GetItem(int itemId, bool markAsViewed = true) - { - Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; - return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; - } - - /// - /// https://developers.podio.com/doc/items/get-items-27803 - /// - public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) - { - Dictionary args = new Dictionary(); - - args.Add("limit", limit.ToString()); - args.Add("offset", offset.ToString()); - - if (key.HasValue) - args.Add(key.Value.Key, key.Value.Value); - - if (remembered != null) - args.Add("remembered", remembered.ToString()); - - if (!string.IsNullOrEmpty(sortBy)) - args.Add("sort_by", sortBy); - if (sortDesc != null) - args.Add("sort_desc", sortDesc.ToString()); - if (viewId != null) - args.Add("view_id", viewId.ToString()); - - return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; - } - - [DataContract] - public struct FilterRequest - { - [DataMember(IsRequired = false, Name = "filters")] - //public IDictionary Filters { get; set; } // Changed to below to fix FilterItem for category/question field type - public IDictionary Filters { get; set; } - - [DataMember(IsRequired = false, Name = "sort_by")] - public string SortBy { get; set; } - - [DataMember(IsRequired = false, Name = "sort_desc")] - public bool? SortDesc { get; set; } - - [DataMember(IsRequired = false, Name = "limit")] - public int? Limit { get; set; } - - [DataMember(IsRequired = false, Name = "offset")] - public int? Offset { get; set; } - - [DataMember(IsRequired = false, Name = "remember")] - public bool? Remember { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/filter-items-4496747 - /// - //public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - // Changed to below to fix FilterItem for category/question field type - public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) - { - var requestData = new FilterRequest() - { - Filters = filters, - SortBy = sortBy, - SortDesc = sortDesc, - Limit = limit, - Offset = offset, - Remember = remembered - }; - return FilterItems(appId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public PodioCollection FilterItems(int appId, FilterRequest requestData) - { - return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - [DataContract] - public struct CreateUpdateRequest - { - [DataMember(IsRequired = false, Name = "fields")] - public IEnumerable> Fields { get; set; } - - [DataMember(IsRequired = false, Name = "file_ids")] - public IEnumerable FileIds { get; set; } - - [DataMember(IsRequired = false, Name = "tags")] - public IEnumerable Tags { get; set; } - - [DataMember(IsRequired = false, Name = "reminder")] - public Reminder Reminder { get; set; } - - [DataMember(IsRequired = false, Name = "recurrence")] - public Recurrence Recurrence { get; set; } - - [DataMember(IsRequired = false, Name = "linked_account_id")] - public int? LinkedAccountId { get; set; } - - [DataMember(IsRequired = false, Name = "ref")] - public Ref Ref { get; set; } - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public int AddNewItem(int appId, Item item) { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text) - }; - var newItem = AddNewItem(appId, requestData); - item.ItemId = newItem.ItemId; - item.Title = newItem.Title; - return (int)item.ItemId; - } - - /// - /// https://developers.podio.com/doc/items/add-new-item-22362 - /// - public Item AddNewItem(int appId, CreateUpdateRequest requestData) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(Item item) - { - var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); - var requestData = new CreateUpdateRequest() - { - Fields = fieldValues, - FileIds = item.FileIds, - Tags = item.Tags.Select(tag => tag.Text), - - }; - UpdateItem((int)item.ItemId, requestData); - } - - /// - /// https://developers.podio.com/doc/items/update-item-22363 - /// - public void UpdateItem(int itemId, CreateUpdateRequest requestData) - { - PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); - } - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) - { - return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); - } - - /// - /// https://developers.podio.com/doc/items/delete-item-s-22364 - /// - public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) - { - return DeleteItems(new int[] { itemId }, silent); - } - - /* - * -Calculate -Delete item reference -Export items -Filter items -Filter items by view -Find items by field and title -Get app values -Get item basic -Get item field values -Get item preview for field reference -Get item references -Get item revision -Get item revision difference -Get item revisions -Get item values -Get items -Get items as Xlsx -Get meeting URL -Get references to item by field -Get top values for field -Revert item revision -Set participation -Update item -Update item field values -Update item reference -Update item values - */ - } -} +using Podio.API.Model; +using Podio.API.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; + + +namespace Podio.API.Services +{ + public class ItemService + { + private Client _client; + /// + /// Add a client and you can use this as a shortcut to the Podio REST API + /// + public ItemService(Client client) + { + _client = client; + } + + /// + /// https://developers.podio.com/doc/items/get-item-22360 + /// + public Item GetItem(int itemId, bool markAsViewed = true) + { + Dictionary args = new Dictionary() { { "mark_as_viewed", markAsViewed.ToString() } }; + return PodioRestHelper.Request(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, args).Data; + } + + /// + /// https://developers.podio.com/doc/items/get-items-27803 + /// + public PodioCollection GetItems(int appId, int limit, int offset, KeyValuePair? key = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null, int? viewId = null) + { + Dictionary args = new Dictionary(); + + args.Add("limit", limit.ToString()); + args.Add("offset", offset.ToString()); + + if (key.HasValue) + args.Add(key.Value.Key, key.Value.Value); + + if (remembered != null) + args.Add("remembered", remembered.ToString()); + + if (!string.IsNullOrEmpty(sortBy)) + args.Add("sort_by", sortBy); + if (sortDesc != null) + args.Add("sort_desc", sortDesc.ToString()); + if (viewId != null) + args.Add("view_id", viewId.ToString()); + + return PodioRestHelper.Request>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken,args).Data; + } + + [DataContract] + public struct FilterRequest + { + [DataMember(IsRequired = false, Name = "filters")] + public IDictionary Filters { get; set; } + + [DataMember(IsRequired = false, Name = "sort_by")] + public string SortBy { get; set; } + + [DataMember(IsRequired = false, Name = "sort_desc")] + public bool? SortDesc { get; set; } + + [DataMember(IsRequired = false, Name = "limit")] + public int? Limit { get; set; } + + [DataMember(IsRequired = false, Name = "offset")] + public int? Offset { get; set; } + + [DataMember(IsRequired = false, Name = "remember")] + public bool? Remember { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/filter-items-4496747 + /// + public PodioCollection FilterItems(int appId, int limit, int offset, Dictionary filters = null, bool? remembered = null, string sortBy = null, bool? sortDesc = null) + { + var requestData = new FilterRequest() + { + Filters = filters, + SortBy = sortBy, + SortDesc = sortDesc, + Limit = limit, + Offset = offset, + Remember = remembered + }; + return FilterItems(appId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public PodioCollection FilterItems(int appId, FilterRequest requestData) + { + return PodioRestHelper.JSONRequest>(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/filter/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + [DataContract] + public struct CreateUpdateRequest + { + [DataMember(IsRequired = false, Name = "fields")] + public IEnumerable> Fields { get; set; } + + [DataMember(IsRequired = false, Name = "file_ids")] + public IEnumerable FileIds { get; set; } + + [DataMember(IsRequired = false, Name = "tags")] + public IEnumerable Tags { get; set; } + + [DataMember(IsRequired = false, Name = "reminder")] + public Reminder Reminder { get; set; } + + [DataMember(IsRequired = false, Name = "recurrence")] + public Recurrence Recurrence { get; set; } + + [DataMember(IsRequired = false, Name = "linked_account_id")] + public int? LinkedAccountId { get; set; } + + [DataMember(IsRequired = false, Name = "ref")] + public Ref Ref { get; set; } + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public int AddNewItem(int appId, Item item) { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text) + }; + var newItem = AddNewItem(appId, requestData); + item.ItemId = newItem.ItemId; + item.Title = newItem.Title; + return (int)item.ItemId; + } + + /// + /// https://developers.podio.com/doc/items/add-new-item-22362 + /// + public Item AddNewItem(int appId, CreateUpdateRequest requestData) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/app/" + appId + "/", _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.POST).Data; + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(Item item) + { + var fieldValues = item.Fields.Select(f => f.Values == null ? null : new { external_id = f.ExternalId, values = f.Values }.AsDictionary()).Where(f => f != null); + var requestData = new CreateUpdateRequest() + { + Fields = fieldValues, + FileIds = item.FileIds, + Tags = item.Tags.Select(tag => tag.Text), + + }; + UpdateItem((int)item.ItemId, requestData); + } + + /// + /// https://developers.podio.com/doc/items/update-item-22363 + /// + public void UpdateItem(int itemId, CreateUpdateRequest requestData) + { + PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + itemId, _client.AuthInfo.AccessToken, requestData, PodioRestHelper.RequestMethod.PUT); + } + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItems(IEnumerable itemIds, bool silent = false) + { + return PodioRestHelper.JSONRequest(Constants.PODIOAPI_BASEURL + "/item/" + String.Join(",", itemIds.Select(id => id.ToString()).ToArray()), _client.AuthInfo.AccessToken, new { silent = silent }, PodioRestHelper.RequestMethod.DELETE); + } + + /// + /// https://developers.podio.com/doc/items/delete-item-s-22364 + /// + public PodioRestHelper.PodioResponse DeleteItem(int itemId, bool silent = false) + { + return DeleteItems(new int[] { itemId }, silent); + } + + /* + * +Calculate +Delete item reference +Export items +Filter items +Filter items by view +Find items by field and title +Get app values +Get item basic +Get item field values +Get item preview for field reference +Get item references +Get item revision +Get item revision difference +Get item revisions +Get item values +Get items +Get items as Xlsx +Get meeting URL +Get references to item by field +Get top values for field +Revert item revision +Set participation +Update item +Update item field values +Update item reference +Update item values + */ + } +}