Esempio n. 1
0
        public async Task <YnabResponse <ICollection <Transaction> > > GetTransactionsAsync(string budgetId, string categoryId, DateTime month)
        {
            var url = BuildUrl("budgets", budgetId, "categories", categoryId, "transactions");

            url += $"?since_date={month:yyyy-MM-01}";

            var apiResponse = await GetAsync(url);

            var response = new YnabResponse <ICollection <Transaction> >
            {
                StatusCode = apiResponse.StatusCode
            };

            if (apiResponse.Success)
            {
                var prop = apiResponse.ResultObject.GetProperty("data").GetProperty("transactions");
                response.Value = JsonSerializer.Deserialize <ICollection <Transaction> >(prop.GetRawText(), _serializerOptions);
            }
            else
            {
                response.Error = JsonSerializer.Deserialize <Error>(apiResponse.ResultObject.GetProperty("error").GetRawText(), _serializerOptions);
            }

            return(response);
        }
Esempio n. 2
0
        private IActionResult CreateApiResponse <T>(YnabResponse <T> response)
        {
            if (response.Success)
            {
                return(StatusCode(response.StatusCode, response.Value));
            }

            return(StatusCode(response.StatusCode, response.Error));
        }
Esempio n. 3
0
        public void CanGetUser()
        {
            var client = new YnabClient(AccessToken);
            YnabResponse <UserData> response = client.GetUser();

            Assert.IsTrue(response.Data.User.Id.Length > 0);

            Console.WriteLine($"id: {response.Data.User.Id}");
        }
Esempio n. 4
0
        public void CanGetBudgets()
        {
            var client = new YnabClient(AccessToken);
            YnabResponse <BudgetsData> response = client.GetBudgets();

            Assert.IsTrue(response.Data.Budgets.Count() > 0);

            Console.WriteLine($"count: {response.Data.Budgets.Count()}");

            var list = response.Data.Budgets.ToList();

            for (var b = 0; b < list.Count; b++)
            {
                Console.WriteLine($"[{b}] name: {list[b].Name}");
            }
        }
Esempio n. 5
0
        public async Task <IEnumerable <Transaction> > GetTransactions(string budgetId, string?startDate)
        {
            YnabResponse result = await this.ynabService.GetTransactions(budgetId, startDate);

            if (result?.Data?.Transactions is null)
            {
                throw new YnabResponseException("The response from the YNAB API does not contain any transactions");
            }

            IEnumerable <YnabTransaction> ynabTransactions = result.Data.Transactions;

            IEnumerable <Transaction> transactions = this.GetSingleTransactions(ynabTransactions)
                                                     .Concat(this.GetSplitTransactions(ynabTransactions));

            return(transactions);
        }
Esempio n. 6
0
        public async Task <YnabResponse <ICollection <Budget> > > GetBudgetsAsync()
        {
            var apiResponse = await GetAsync(BuildUrl("budgets"));

            var response = new YnabResponse <ICollection <Budget> >
            {
                StatusCode = apiResponse.StatusCode
            };

            if (apiResponse.Success)
            {
                var prop = apiResponse.ResultObject.GetProperty("data").GetProperty("budgets");
                response.Value = JsonSerializer.Deserialize <List <Budget> >(prop.GetRawText(), _serializerOptions);
            }
            else
            {
                response.Error = JsonSerializer.Deserialize <Error>(apiResponse.ResultObject.GetProperty("error").GetRawText(), _serializerOptions);
            }

            return(response);
        }
Esempio n. 7
0
        public async Task <YnabResponse <Month> > GetMonthAsync(string budgetId, DateTime month)
        {
            var url         = BuildUrl("budgets", budgetId, "months", month.ToString("yyyy-MM-01"));
            var apiResponse = await GetAsync(url);

            var response = new YnabResponse <Month>
            {
                StatusCode = apiResponse.StatusCode
            };

            if (apiResponse.Success)
            {
                var prop = apiResponse.ResultObject.GetProperty("data").GetProperty("month");
                response.Value = MapMonth(prop);
            }
            else
            {
                response.Error = JsonSerializer.Deserialize <Error>(apiResponse.ResultObject.GetProperty("error").GetRawText(), _serializerOptions);
            }

            return(response);
        }
Esempio n. 8
0
        public async Task <YnabResponse <ICollection <CategoryGroup> > > GetCategoriesAsync(string budgetId, bool includeHidden, bool includeDeleted)
        {
            var url         = BuildUrl("budgets", budgetId, "categories");
            var apiResponse = await GetAsync(url);

            var response = new YnabResponse <ICollection <CategoryGroup> >
            {
                StatusCode = apiResponse.StatusCode
            };

            if (apiResponse.Success)
            {
                var prop = apiResponse.ResultObject.GetProperty("data").GetProperty("category_groups");
                response.Value = FilterCategories(JsonSerializer.Deserialize <ICollection <CategoryGroup> >(prop.GetRawText(), _serializerOptions), includeHidden, includeDeleted).ToList();
            }
            else
            {
                response.Error = JsonSerializer.Deserialize <Error>(apiResponse.ResultObject.GetProperty("error").GetRawText(), _serializerOptions);
            }

            return(response);
        }