Skip to content

Commit f6867d8

Browse files
Implemented missing DTOs related to Finance services.
1 parent c1df038 commit f6867d8

8 files changed

+244
-23
lines changed

src/Asaas.Sdk.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2020
<NoWarn>CS1591;CS1584</NoWarn>
2121
<PackageReleaseNotes>
22-
* 1.0.8 - Implemented missing DTOs related to Transfer services.
22+
* 1.0.8 - Implemented missing DTOs related to Transfer and Finance services.
2323
* 1.0.7 - Implemented missing DTOs related to Webhook services.
2424
* 1.0.6 - Refactored Subaccount service to use newly created DTOs.
2525
* 1.0.5 - Implemented missing DTOs related to Account services.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Asaas.Sdk.Models;
4+
5+
/// <summary>
6+
/// Finance balance response
7+
/// </summary>
8+
public class FinanceBalanceResponseDto
9+
{
10+
/// <summary>
11+
/// Account balance
12+
/// </summary>
13+
[JsonPropertyName("balance")]
14+
public double? Balance { get; set; }
15+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Asaas.Sdk.Models;
4+
5+
/// <summary>
6+
/// Finance payment statistics response
7+
/// </summary>
8+
public class FinanceGetPaymentStatisticsResponseDto
9+
{
10+
/// <summary>
11+
/// Number of charges
12+
/// </summary>
13+
[JsonPropertyName("quantity")]
14+
public long? Quantity { get; set; }
15+
16+
/// <summary>
17+
/// Amount
18+
/// </summary>
19+
[JsonPropertyName("value")]
20+
public double? Value { get; set; }
21+
22+
/// <summary>
23+
/// Total net worth
24+
/// </summary>
25+
[JsonPropertyName("netValue")]
26+
public double? NetValue { get; set; }
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Asaas.Sdk.Models;
4+
5+
/// <summary>
6+
/// Finance split statistics response
7+
/// </summary>
8+
public class FinanceGetSplitStatisticsResponseDto
9+
{
10+
/// <summary>
11+
/// Amounts receivable
12+
/// </summary>
13+
[JsonPropertyName("income")]
14+
public double? Income { get; set; }
15+
16+
/// <summary>
17+
/// Values to be sent
18+
/// </summary>
19+
[JsonPropertyName("value")]
20+
public double? Value { get; set; }
21+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace Asaas.Sdk.Models;
4+
5+
/// <summary>
6+
/// Financial transaction response
7+
/// </summary>
8+
public class FinancialTransactionGetResponseDto
9+
{
10+
/// <summary>
11+
/// Object type
12+
/// </summary>
13+
[JsonPropertyName("object")]
14+
public string? Object { get; set; }
15+
16+
/// <summary>
17+
/// Unique transaction identifier in Asaas
18+
/// </summary>
19+
[JsonPropertyName("id")]
20+
public string? Id { get; set; }
21+
22+
/// <summary>
23+
/// Transaction value
24+
/// </summary>
25+
[JsonPropertyName("value")]
26+
public double? Value { get; set; }
27+
28+
/// <summary>
29+
/// Value in account at the time of the transaction
30+
/// </summary>
31+
[JsonPropertyName("balance")]
32+
public double? Balance { get; set; }
33+
34+
/// <summary>
35+
/// Transaction type (PAYMENT, PAYMENT_FEE, TRANSFER, TRANSFER_FEE, etc.)
36+
/// </summary>
37+
[JsonPropertyName("type")]
38+
public string? Type { get; set; }
39+
40+
/// <summary>
41+
/// Transaction date
42+
/// </summary>
43+
[JsonPropertyName("date")]
44+
public string? Date { get; set; }
45+
46+
/// <summary>
47+
/// Transaction description
48+
/// </summary>
49+
[JsonPropertyName("description")]
50+
public string? Description { get; set; }
51+
52+
/// <summary>
53+
/// Payment identifier (if any)
54+
/// </summary>
55+
[JsonPropertyName("paymentId")]
56+
public string? PaymentId { get; set; }
57+
58+
/// <summary>
59+
/// Split identifier (if any)
60+
/// </summary>
61+
[JsonPropertyName("splitId")]
62+
public string? SplitId { get; set; }
63+
64+
/// <summary>
65+
/// Transfer identifier (if any)
66+
/// </summary>
67+
[JsonPropertyName("transferId")]
68+
public string? TransferId { get; set; }
69+
70+
/// <summary>
71+
/// Anticipation identifier (if any)
72+
/// </summary>
73+
[JsonPropertyName("anticipationId")]
74+
public string? AnticipationId { get; set; }
75+
76+
/// <summary>
77+
/// Bill payment identifier (if any)
78+
/// </summary>
79+
[JsonPropertyName("billId")]
80+
public string? BillId { get; set; }
81+
82+
/// <summary>
83+
/// Invoice identifier (if any)
84+
/// </summary>
85+
[JsonPropertyName("invoiceId")]
86+
public string? InvoiceId { get; set; }
87+
88+
/// <summary>
89+
/// Payment dunning identifier (if any)
90+
/// </summary>
91+
[JsonPropertyName("paymentDunningId")]
92+
public string? PaymentDunningId { get; set; }
93+
94+
/// <summary>
95+
/// Serasa consultation identifier (if any)
96+
/// </summary>
97+
[JsonPropertyName("creditBureauReportId")]
98+
public string? CreditBureauReportId { get; set; }
99+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Asaas.Sdk.Models;
2+
3+
/// <summary>
4+
/// Financial transaction list response
5+
/// </summary>
6+
public class FinancialTransactionListResponseDto : ListResponseDto<FinancialTransactionGetResponseDto>
7+
{
8+
}

src/Services/FinanceService.cs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Asaas.Sdk.Config;
22
using Asaas.Sdk.Http;
3+
using Asaas.Sdk.Models;
34

45
namespace Asaas.Sdk.Services;
56

@@ -8,52 +9,65 @@ namespace Asaas.Sdk.Services;
89
/// </summary>
910
public class FinanceService : BaseService
1011
{
12+
/// <summary>
13+
/// Initializes a new instance of the <see cref="FinanceService"/> class.
14+
/// </summary>
15+
/// <param name="httpClient">HTTP client instance</param>
16+
/// <param name="config">SDK configuration</param>
1117
public FinanceService(HttpClient httpClient, AsaasSdkConfig config)
1218
: base(httpClient, config)
1319
{
1420
}
1521

1622
/// <summary>
17-
/// Get balance
23+
/// Get account balance
1824
/// </summary>
19-
public async Task<dynamic> GetBalanceAsync(
25+
/// <param name="cancellationToken">Cancellation token</param>
26+
/// <returns>Current account balance</returns>
27+
public async Task<FinanceBalanceResponseDto> GetBalanceAsync(
2028
CancellationToken cancellationToken = default)
2129
{
2230
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/finance/balance");
2331
var request = requestBuilder.Build(GetBaseUrl());
24-
return await ExecuteAsync<dynamic>(request);
32+
return await ExecuteAsync<FinanceBalanceResponseDto>(request);
2533
}
2634

2735
/// <summary>
28-
/// Get current balance
36+
/// Get current account balance
2937
/// </summary>
30-
public async Task<dynamic> GetCurrentBalanceAsync(
38+
/// <param name="cancellationToken">Cancellation token</param>
39+
/// <returns>Current account balance</returns>
40+
public async Task<FinanceBalanceResponseDto> GetCurrentBalanceAsync(
3141
CancellationToken cancellationToken = default)
3242
{
3343
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/finance/getCurrentBalance");
3444
var request = requestBuilder.Build(GetBaseUrl());
35-
return await ExecuteAsync<dynamic>(request);
45+
return await ExecuteAsync<FinanceBalanceResponseDto>(request);
3646
}
3747

3848
/// <summary>
39-
/// Get statistics
49+
/// Get payment statistics
4050
/// </summary>
41-
public async Task<dynamic> GetStatisticsAsync(
51+
/// <param name="cancellationToken">Cancellation token</param>
52+
/// <returns>Payment statistics including quantity, value, and net value</returns>
53+
public async Task<FinanceGetPaymentStatisticsResponseDto> GetStatisticsAsync(
4254
CancellationToken cancellationToken = default)
4355
{
4456
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/finance/payment/statistics");
4557
var request = requestBuilder.Build(GetBaseUrl());
46-
return await ExecuteAsync<dynamic>(request);
58+
return await ExecuteAsync<FinanceGetPaymentStatisticsResponseDto>(request);
4759
}
4860

4961
/// <summary>
5062
/// Get split statistics
5163
/// </summary>
52-
public async Task<dynamic> GetSplitStatisticsAsync(
64+
/// <param name="cancellationToken">Cancellation token</param>
65+
/// <returns>Split statistics including income and values to be sent</returns>
66+
public async Task<FinanceGetSplitStatisticsResponseDto> GetSplitStatisticsAsync(
5367
CancellationToken cancellationToken = default)
5468
{
5569
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/finance/split/statistics");
5670
var request = requestBuilder.Build(GetBaseUrl());
57-
return await ExecuteAsync<dynamic>(request);
71+
return await ExecuteAsync<FinanceGetSplitStatisticsResponseDto>(request);
5872
}
5973
}
Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Asaas.Sdk.Config;
2+
using Asaas.Sdk.Exceptions;
23
using Asaas.Sdk.Http;
4+
using Asaas.Sdk.Models;
35

46
namespace Asaas.Sdk.Services;
57

@@ -8,15 +10,26 @@ namespace Asaas.Sdk.Services;
810
/// </summary>
911
public class FinancialTransactionService : BaseService
1012
{
13+
/// <summary>
14+
/// Initializes a new instance of the <see cref="FinancialTransactionService"/> class.
15+
/// </summary>
16+
/// <param name="httpClient">HTTP client instance</param>
17+
/// <param name="config">SDK configuration</param>
1118
public FinancialTransactionService(HttpClient httpClient, AsaasSdkConfig config)
1219
: base(httpClient, config)
1320
{
1421
}
1522

1623
/// <summary>
17-
/// List financial transactions
24+
/// List financial transactions with optional filters
1825
/// </summary>
19-
public async Task<dynamic> ListFinancialTransactionsAsync(
26+
/// <param name="startDate">Start date for filtering transactions</param>
27+
/// <param name="endDate">End date for filtering transactions</param>
28+
/// <param name="offset">Offset for pagination</param>
29+
/// <param name="limit">Limit for pagination</param>
30+
/// <param name="cancellationToken">Cancellation token</param>
31+
/// <returns>List of financial transactions</returns>
32+
public async Task<FinancialTransactionListResponseDto> ListFinancialTransactionsAsync(
2033
DateTime? startDate = null,
2134
DateTime? endDate = null,
2235
long? offset = null,
@@ -30,46 +43,70 @@ public async Task<dynamic> ListFinancialTransactionsAsync(
3043
.AddQueryParam("limit", limit);
3144

3245
var request = requestBuilder.Build(GetBaseUrl());
33-
return await ExecuteAsync<dynamic>(request);
46+
return await ExecuteAsync<FinancialTransactionListResponseDto>(request);
3447
}
3548

3649
/// <summary>
3750
/// Get financial transaction by ID
3851
/// </summary>
39-
public async Task<dynamic> GetFinancialTransactionAsync(
52+
/// <param name="id">Financial transaction identifier</param>
53+
/// <param name="cancellationToken">Cancellation token</param>
54+
/// <returns>Financial transaction details</returns>
55+
public async Task<FinancialTransactionGetResponseDto> GetFinancialTransactionAsync(
4056
string id,
4157
CancellationToken cancellationToken = default)
4258
{
59+
if (string.IsNullOrEmpty(id))
60+
{
61+
throw new ValidationException("Financial transaction ID is required");
62+
}
63+
4364
var requestBuilder = new RequestBuilder(HttpMethod.Get, $"v3/financialTransactions/{id}");
4465
var request = requestBuilder.Build(GetBaseUrl());
45-
return await ExecuteAsync<dynamic>(request);
66+
return await ExecuteAsync<FinancialTransactionGetResponseDto>(request);
4667
}
4768

4869
/// <summary>
49-
/// Get payment anticipation financial transaction
70+
/// Get financial transactions related to a payment anticipation
5071
/// </summary>
51-
public async Task<dynamic> GetPaymentAnticipationFinancialTransactionAsync(
72+
/// <param name="anticipationId">Anticipation identifier</param>
73+
/// <param name="cancellationToken">Cancellation token</param>
74+
/// <returns>List of financial transactions related to the anticipation</returns>
75+
public async Task<FinancialTransactionListResponseDto> GetPaymentAnticipationFinancialTransactionAsync(
5276
string anticipationId,
5377
CancellationToken cancellationToken = default)
5478
{
79+
if (string.IsNullOrEmpty(anticipationId))
80+
{
81+
throw new ValidationException("Anticipation ID is required");
82+
}
83+
5584
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/financialTransactions")
5685
.AddQueryParam("anticipation", anticipationId);
5786

5887
var request = requestBuilder.Build(GetBaseUrl());
59-
return await ExecuteAsync<dynamic>(request);
88+
return await ExecuteAsync<FinancialTransactionListResponseDto>(request);
6089
}
6190

6291
/// <summary>
63-
/// Get payment financial transaction
92+
/// Get financial transactions related to a payment
6493
/// </summary>
65-
public async Task<dynamic> GetPaymentFinancialTransactionAsync(
94+
/// <param name="paymentId">Payment identifier</param>
95+
/// <param name="cancellationToken">Cancellation token</param>
96+
/// <returns>List of financial transactions related to the payment</returns>
97+
public async Task<FinancialTransactionListResponseDto> GetPaymentFinancialTransactionAsync(
6698
string paymentId,
6799
CancellationToken cancellationToken = default)
68100
{
101+
if (string.IsNullOrEmpty(paymentId))
102+
{
103+
throw new ValidationException("Payment ID is required");
104+
}
105+
69106
var requestBuilder = new RequestBuilder(HttpMethod.Get, "v3/financialTransactions")
70107
.AddQueryParam("payment", paymentId);
71108

72109
var request = requestBuilder.Build(GetBaseUrl());
73-
return await ExecuteAsync<dynamic>(request);
110+
return await ExecuteAsync<FinancialTransactionListResponseDto>(request);
74111
}
75112
}

0 commit comments

Comments
 (0)