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); }
private IActionResult CreateApiResponse <T>(YnabResponse <T> response) { if (response.Success) { return(StatusCode(response.StatusCode, response.Value)); } return(StatusCode(response.StatusCode, response.Error)); }
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}"); }
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}"); } }
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); }
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); }
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); }
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); }