Skip to content

Commit 184f6e7

Browse files
authored
Make quick changes based on PR review (#55)
* 💻 Create SubaccountResponse (Single and Multiple) * 💻 Create request and response classes * 💻 Create client class and update other necessary classes * 🔧 fix my bug * 💄 refactor and clean up * 🔧 Fix issues from PR review
1 parent c9a3b33 commit 184f6e7

10 files changed

Lines changed: 129 additions & 125 deletions

File tree

paystack-clients-spring-boot-starter/src/main/java/com/chrisworks/paystackclient/definitions/reactive/SubAccountClient.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.chrisworks.paystackclient.definitions.Constants;
44
import com.chrisworks.paystackclient.domain.request.QueryParamConstants;
5-
import com.chrisworks.paystackclient.domain.subaccount.CreateSubaccountRequest;
6-
import com.chrisworks.paystackclient.domain.subaccount.SubaccountResponse;
7-
import com.chrisworks.paystackclient.domain.subaccount.UpdateSubaccountRequest;
5+
import com.chrisworks.paystackclient.domain.subaccount.CreateSubAccountRequest;
6+
import com.chrisworks.paystackclient.domain.subaccount.SubAccountResponse;
7+
import com.chrisworks.paystackclient.domain.subaccount.UpdateSubAccountRequest;
88
import com.maciejwalkowiak.spring.http.annotation.HttpClient;
99
import org.springframework.lang.NonNull;
1010
import org.springframework.web.bind.annotation.PathVariable;
@@ -22,19 +22,19 @@
2222
public interface SubAccountClient {
2323

2424
@PostExchange
25-
Mono<SubaccountResponse.Single> createSubAccount(@RequestBody CreateSubaccountRequest body);
25+
Mono<SubAccountResponse.Single> createSubAccount(@RequestBody CreateSubAccountRequest body);
2626

2727
@GetExchange
28-
Mono<SubaccountResponse.Multiple> listSubAccounts(
28+
Mono<SubAccountResponse.Multiple> listSubAccounts(
2929
@RequestParam(name = QueryParamConstants.PAGE) @NonNull BigInteger page,
3030
@RequestParam(name = QueryParamConstants.PER_PAGE) @NonNull BigInteger perPage,
3131
@RequestParam(name = QueryParamConstants.FROM, required = false) ZonedDateTime from,
3232
@RequestParam(name = QueryParamConstants.TO, required = false) ZonedDateTime to
3333
);
3434

3535
@GetExchange("/{idOrCode}")
36-
Mono<SubaccountResponse.Single> fetchSubAccount(@PathVariable String idOrCode);
36+
Mono<SubAccountResponse.Single> fetchSubAccount(@PathVariable String idOrCode);
3737

3838
@PutExchange("/{idOrCode}")
39-
Mono<SubaccountResponse.Single> updateSubAccount(@PathVariable String idOrCode, @RequestBody UpdateSubaccountRequest body);
39+
Mono<SubAccountResponse.Single> updateSubAccount(@PathVariable String idOrCode, @RequestBody UpdateSubAccountRequest body);
4040
}

paystack-clients-spring-boot-starter/src/main/java/com/chrisworks/paystackclient/definitions/simple/SubAccountClient.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.chrisworks.paystackclient.definitions.Constants;
44
import com.chrisworks.paystackclient.domain.request.QueryParamConstants;
5-
import com.chrisworks.paystackclient.domain.subaccount.CreateSubaccountRequest;
6-
import com.chrisworks.paystackclient.domain.subaccount.SubaccountResponse;
7-
import com.chrisworks.paystackclient.domain.subaccount.UpdateSubaccountRequest;
5+
import com.chrisworks.paystackclient.domain.subaccount.CreateSubAccountRequest;
6+
import com.chrisworks.paystackclient.domain.subaccount.SubAccountResponse;
7+
import com.chrisworks.paystackclient.domain.subaccount.UpdateSubAccountRequest;
88
import com.maciejwalkowiak.spring.http.annotation.HttpClient;
99
import org.springframework.lang.NonNull;
1010
import org.springframework.web.bind.annotation.PathVariable;
@@ -21,19 +21,19 @@
2121
public interface SubAccountClient {
2222

2323
@PostExchange
24-
SubaccountResponse.Single createSubAccount(@RequestBody CreateSubaccountRequest body);
24+
SubAccountResponse.Single createSubAccount(@RequestBody CreateSubAccountRequest body);
2525

2626
@GetExchange
27-
SubaccountResponse.Multiple listSubAccounts(
27+
SubAccountResponse.Multiple listSubAccounts(
2828
@RequestParam(name = QueryParamConstants.PAGE) @NonNull BigInteger page,
2929
@RequestParam(name = QueryParamConstants.PER_PAGE) @NonNull BigInteger perPage,
3030
@RequestParam(name = QueryParamConstants.FROM, required = false) ZonedDateTime from,
3131
@RequestParam(name = QueryParamConstants.TO, required = false) ZonedDateTime to
3232
);
3333

3434
@GetExchange("/{idOrCode}")
35-
SubaccountResponse.Single fetchSubAccount(@PathVariable String idOrCode);
35+
SubAccountResponse.Single fetchSubAccount(@PathVariable String idOrCode);
3636

3737
@PutExchange("/{idOrCode}")
38-
SubaccountResponse.Single updateSubAccount(@PathVariable String idOrCode, @RequestBody UpdateSubaccountRequest body);
38+
SubAccountResponse.Single updateSubAccount(@PathVariable String idOrCode, @RequestBody UpdateSubAccountRequest body);
3939
}

paystack-clients/src/main/java/com/chrisworks/paystackclient/PaystackClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface PaystackClient {
1010
PlanClient plan();
1111
TransactionClient transaction();
1212
ProductClient product();
13-
SubaccountClient subaccount();
13+
SubAccountClient subAccount();
1414

1515
final class Impl extends WithConfiguredHttpClient implements PaystackClient {
1616
Impl(OkHttpClient httpClient) {
@@ -43,8 +43,8 @@ public ProductClient product() {
4343
}
4444

4545
@Override
46-
public SubaccountClient subaccount() {
47-
return new SubaccountClient.Impl(httpClient);
46+
public SubAccountClient subAccount() {
47+
return new SubAccountClient.Impl(httpClient);
4848
}
4949
}
5050
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.chrisworks.paystackclient.definitions;
2+
3+
import com.chrisworks.paystackclient.ExecutionSpec;
4+
import com.chrisworks.paystackclient.WithConfiguredHttpClient;
5+
import com.chrisworks.paystackclient.domain.Routes;
6+
import com.chrisworks.paystackclient.domain.subaccount.CreateSubAccountRequest;
7+
import com.chrisworks.paystackclient.domain.subaccount.SubAccountListQueryParam;
8+
import com.chrisworks.paystackclient.domain.subaccount.SubAccountResponse;
9+
import com.chrisworks.paystackclient.domain.subaccount.UpdateSubAccountRequest;
10+
import okhttp3.OkHttpClient;
11+
import okhttp3.Request;
12+
import okhttp3.RequestBody;
13+
import org.jetbrains.annotations.NotNull;
14+
15+
public interface SubAccountClient {
16+
17+
ExecutionSpec<SubAccountResponse.Single> createSubAccount(CreateSubAccountRequest body);
18+
19+
ExecutionSpec<SubAccountResponse.Multiple> listSubAccounts(SubAccountListQueryParam queryParam);
20+
21+
ExecutionSpec<SubAccountResponse.Single> fetchSubAccount(@NotNull String idOrCode);
22+
23+
ExecutionSpec<SubAccountResponse.Single> updateSubAccount(@NotNull String idOrCode, UpdateSubAccountRequest body);
24+
25+
final class Impl extends WithConfiguredHttpClient implements SubAccountClient {
26+
27+
public Impl(OkHttpClient httpClient) {
28+
super(httpClient);
29+
}
30+
31+
@Override
32+
public ExecutionSpec<SubAccountResponse.Single> createSubAccount(CreateSubAccountRequest body) {
33+
final Request request = new Request.Builder()
34+
.url(Routes.SubAccount.BASE_URL)
35+
.post(RequestBody.create(body.json(), applicationJson))
36+
.build();
37+
38+
return execSpec(request, SubAccountResponse.Single.class);
39+
}
40+
41+
@Override
42+
public ExecutionSpec<SubAccountResponse.Multiple> listSubAccounts(SubAccountListQueryParam queryParam) {
43+
final Request request = new Request.Builder()
44+
.url(Routes.SubAccount.BASE_URL + safeExtractQueryParams(queryParam))
45+
.get()
46+
.build();
47+
48+
return execSpec(request, SubAccountResponse.Multiple.class);
49+
}
50+
51+
@Override
52+
public ExecutionSpec<SubAccountResponse.Single> fetchSubAccount(@NotNull String idOrCode) {
53+
final Request request = new Request.Builder()
54+
.url(Routes.SubAccount.BY_ID_OR_CODE.apply(idOrCode))
55+
.get()
56+
.build();
57+
58+
return execSpec(request, SubAccountResponse.Single.class);
59+
}
60+
61+
@Override
62+
public ExecutionSpec<SubAccountResponse.Single> updateSubAccount(@NotNull String idOrCode,
63+
UpdateSubAccountRequest body) {
64+
final Request request = new Request.Builder()
65+
.url(Routes.SubAccount.BY_ID_OR_CODE.apply(idOrCode))
66+
.put(RequestBody.create(body.json(), applicationJson))
67+
.build();
68+
69+
return execSpec(request, SubAccountResponse.Single.class);
70+
}
71+
}
72+
}

paystack-clients/src/main/java/com/chrisworks/paystackclient/definitions/SubaccountClient.java

Lines changed: 0 additions & 72 deletions
This file was deleted.

paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/Routes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ private Product(){}
4848
public static final UnaryOperator<String> BY_ID = (BASE_URL + "/%s")::formatted;
4949
}
5050

51-
public static final class Subaccount {
52-
private Subaccount(){}
51+
public static final class SubAccount {
52+
private SubAccount(){}
5353
public static final String BASE_URL = Routes.BASE_URL + "/subaccount";
5454
public static final UnaryOperator<String> BY_ID_OR_CODE = (BASE_URL + "/%s")::formatted;
5555
}

paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/CreateSubaccountRequest.java renamed to paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/CreateSubAccountRequest.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@
22

33
import com.chrisworks.paystackclient.domain.request.RequestBody;
44

5-
import java.math.BigDecimal;
5+
import java.util.List;
6+
import java.util.Map;
67

7-
public class CreateSubaccountRequest implements RequestBody<CreateSubaccountRequest> {
8+
public class CreateSubAccountRequest implements RequestBody<CreateSubAccountRequest> {
89
private final String business_name;
910
private final String settlement_bank;
1011
private final String account_number;
11-
private final BigDecimal percentage_charge;
12+
private final Double percentage_charge;
1213
private final String description;
1314
private String primary_contact_email;
1415
private String primary_contact_name;
1516
private String primary_contact_phone;
1617
private String metadata;
1718

18-
public CreateSubaccountRequest(String businessName, String settlementBank, String accountNumber,
19-
BigDecimal percentageCharge, String description) {
19+
public CreateSubAccountRequest(String businessName, String settlementBank, String accountNumber,
20+
Double percentageCharge, String description) {
2021
this.business_name = businessName;
2122
this.settlement_bank = settlementBank;
2223
this.account_number = accountNumber;
@@ -36,7 +37,7 @@ public String getAccountNumber() {
3637
return account_number;
3738
}
3839

39-
public BigDecimal getPercentageCharge() {
40+
public Double getPercentageCharge() {
4041
return percentage_charge;
4142
}
4243

@@ -60,23 +61,27 @@ public String getMetadata() {
6061
return metadata;
6162
}
6263

63-
public CreateSubaccountRequest primaryContactEmail(String primaryContactEmail) {
64+
public CreateSubAccountRequest primaryContactEmail(String primaryContactEmail) {
6465
this.primary_contact_email = primaryContactEmail;
6566
return this;
6667
}
6768

68-
public CreateSubaccountRequest primaryContactName(String primaryContactName) {
69+
public CreateSubAccountRequest primaryContactName(String primaryContactName) {
6970
this.primary_contact_name = primaryContactName;
7071
return this;
7172
}
7273

73-
public CreateSubaccountRequest primaryContactPhone(String primaryContactPhone) {
74+
public CreateSubAccountRequest primaryContactPhone(String primaryContactPhone) {
7475
this.primary_contact_phone = primaryContactPhone;
7576
return this;
7677
}
7778

78-
public CreateSubaccountRequest metadata(String metadata) {
79-
this.metadata = metadata;
79+
public CreateSubAccountRequest metadata(MetaData metadata) {
80+
this.metadata = metadata.json();
8081
return this;
8182
}
83+
84+
public record MetaData(List<Map<String, Object>> custom_fields) implements RequestBody<MetaData> {
85+
}
86+
8287
}

paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/SubaccountListQueryParam.java renamed to paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/SubAccountListQueryParam.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@
66
import java.math.BigInteger;
77
import java.time.ZonedDateTime;
88

9-
public final class SubaccountListQueryParam extends PaystackListPagedQueryParam {
9+
public final class SubAccountListQueryParam extends PaystackListPagedQueryParam {
1010

11-
public SubaccountListQueryParam(BigInteger perPage, BigInteger page) {
11+
public SubAccountListQueryParam(BigInteger perPage, BigInteger page) {
1212
super(perPage, page);
1313
}
1414

15-
public SubaccountListQueryParam(){
15+
public SubAccountListQueryParam(){
1616
super();
1717
}
1818

19-
public SubaccountListQueryParam from(ZonedDateTime from){
19+
public SubAccountListQueryParam from(ZonedDateTime from){
2020
params.put(QueryParamConstants.FROM, from.toString());
2121
return this;
2222
}
2323

24-
public SubaccountListQueryParam to(ZonedDateTime to){
24+
public SubAccountListQueryParam to(ZonedDateTime to){
2525
params.put(QueryParamConstants.TO, to.toString());
2626
return this;
2727
}

paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/SubaccountResponse.java renamed to paystack-domain/src/main/java/com/chrisworks/paystackclient/domain/subaccount/SubAccountResponse.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.chrisworks.paystackclient.domain.subaccount;
22

3-
import com.chrisworks.paystackclient.domain.Email;
43
import com.chrisworks.paystackclient.domain.response.PaystackMultiResponse;
54
import com.chrisworks.paystackclient.domain.response.PaystackSingleResponse;
65

@@ -9,19 +8,19 @@
98
import java.time.ZonedDateTime;
109
import java.util.List;
1110

12-
public record SubaccountResponse(BigInteger integration, String domain, String subaccount_code, String business_name,
13-
String description, String primary_contact_name, Email primary_contact_email,
11+
public record SubAccountResponse(BigInteger integration, String domain, String subaccount_code, String business_name,
12+
String description, String primary_contact_name, String primary_contact_email,
1413
String primary_contact_phone, Object metadata, BigDecimal percentage_charge,
1514
boolean is_verified, String settlement_bank, String account_number,
1615
String settlement_schedule, boolean active, boolean migrate, BigInteger id,
1716
ZonedDateTime createdAt, ZonedDateTime updatedAt) {
1817

19-
public record Single(boolean status, String message, SubaccountResponse data)
20-
implements PaystackSingleResponse<SubaccountResponse> {
18+
public record Single(boolean status, String message, SubAccountResponse data)
19+
implements PaystackSingleResponse<SubAccountResponse> {
2120
}
2221

23-
public record Multiple(boolean status, String message, List<SubaccountResponse> data, PageInfo.PageMetaInfo meta)
24-
implements PaystackMultiResponse<SubaccountResponse> {
22+
public record Multiple(boolean status, String message, List<SubAccountResponse> data, PageInfo.PageMetaInfo meta)
23+
implements PaystackMultiResponse<SubAccountResponse> {
2524

2625
}
2726
}

0 commit comments

Comments
 (0)