Skip to content

Commit

Permalink
fix: resolve result properties
Browse files Browse the repository at this point in the history
  • Loading branch information
trs committed Aug 31, 2023
1 parent 7b62b45 commit 11b4290
Show file tree
Hide file tree
Showing 47 changed files with 176 additions and 154 deletions.
91 changes: 91 additions & 0 deletions src/chargebee-resource-wrapper.class.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import type { ChargeBee } from "chargebee-typescript";

import { ItemResource } from "./resources/item-resource";
import { AddonResource } from "./resources/addon-resource";
import { AddressResource } from "./resources/address-resource";
import { AttachedItemResource } from "./resources/attached-item-resource";
import { CardResource } from "./resources/card-resource";
import { CommentResource } from "./resources/comment-resource";
import { CouponResource } from "./resources/coupon-resource";
import { CouponCodeResource } from "./resources/coupon-code-resource";
import { CouponSetResource } from "./resources/coupon-set-resource";
import { CreditNoteResource } from "./resources/credit-note-resource";
import { CustomerResource } from "./resources/customer-resource";
import { DifferentialPriceResource } from "./resources/differential-price-resource";
import { EntitlementOverrideResource } from "./resources/entitlement-override-resource";
import { EstimateResource } from "./resources/estimate-resource";
import { ExportResource } from "./resources/export-resource";
import { FeatureResource } from "./resources/feature-resource";
import { GiftResource } from "./resources/gift-resource";
import { HostedPageResource } from "./resources/hosted-page-resource";
import { InAppSubscriptionResource } from "./resources/in-app-subscription-resource";
import { InvoiceResource } from "./resources/invoice-resource";
import { ItemEntitlementResource } from "./resources/item-entitlement-resource";
import { ItemFamilyResource } from "./resources/item-family-resource";
import { ItemPriceResource } from "./resources/item-price-resource";
import { NonSubscriptionResource } from "./resources/non-subscription-resource";
import { OrderResource } from "./resources/order-resource";
import { PaymentIntentResource } from "./resources/payment-intent-resource";
import { PaymentSourceResource } from "./resources/payment-source-resource";
import { PaymentVoucherResource } from "./resources/payment-voucher-resource";
import { PlanResource } from "./resources/plan-resource";
import { PortalSessionResource } from "./resources/portal-session-resource";
import { PromotionalCreditResource } from "./resources/promotional-credit-resource";
import { PurchaseResource } from "./resources/purchase-resource";
import { QuoteResource } from "./resources/quote-resource";
import { ResourceMigrationResource } from "./resources/resource-migration-resource";
import { SiteMigrationDetailResource } from "./resources/site-migration-detail-resource";
import { SubscriptionEntitlementResource } from "./resources/subscription-entitlement-resource";
import { TimeMachineResource } from "./resources/time-machine-resource";
import { TransactionResource } from "./resources/transaction-resource";
import { UnbilledChargeResource } from "./resources/unbilled-charge-resource";
import { UsageResource } from "./resources/usage-resource";
import { VirtualBankAccountResource } from "./resources/virtual-bank-account-resource";
import { SubscriptionResource } from "./resources/subscription-resource";

export class ChargebeeResourceWrapper {
constructor(private readonly client: ChargeBee) {}

subscription = new SubscriptionResource(this.client);
customer = new CustomerResource(this.client);
paymentSource = new PaymentSourceResource(this.client);
virtualBankAccount = new VirtualBankAccountResource(this.client);
card = new CardResource(this.client);
promotionalCredit = new PromotionalCreditResource(this.client);
invoice = new InvoiceResource(this.client);
creditNote = new CreditNoteResource(this.client);
unbilledCharge = new UnbilledChargeResource(this.client);
order = new OrderResource(this.client);
gift = new GiftResource(this.client);
transaction = new TransactionResource(this.client);
hostedPage = new HostedPageResource(this.client);
estimate = new EstimateResource(this.client);
quote = new QuoteResource(this.client);
plan = new PlanResource(this.client);
addon = new AddonResource(this.client);
coupon = new CouponResource(this.client);
couponSet = new CouponSetResource(this.client);
couponCode = new CouponCodeResource(this.client);
address = new AddressResource(this.client);
usage = new UsageResource(this.client);
comment = new CommentResource(this.client);
portalSession = new PortalSessionResource(this.client);
siteMigrationDetail = new SiteMigrationDetailResource(this.client);
resourceMigration = new ResourceMigrationResource(this.client);
timeMachine = new TimeMachineResource(this.client);
export = new ExportResource(this.client);
paymentIntent = new PaymentIntentResource(this.client);
itemFamily = new ItemFamilyResource(this.client);
item = new ItemResource(this.client);
itemPrice = new ItemPriceResource(this.client);
attachedItem = new AttachedItemResource(this.client);
differentialPrice = new DifferentialPriceResource(this.client);
feature = new FeatureResource(this.client);
subscriptionEntitlement = new SubscriptionEntitlementResource(this.client);
itemEntitlement = new ItemEntitlementResource(this.client);
inAppSubscription = new InAppSubscriptionResource(this.client);
nonSubscription = new NonSubscriptionResource(this.client);
entitlementOverride = new EntitlementOverrideResource(this.client);
purchase = new PurchaseResource(this.client);
paymentVoucher = new PaymentVoucherResource(this.client);
}
4 changes: 2 additions & 2 deletions src/chargebee.service.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Injectable } from "@nestjs/common";

import { ChargebeeClientService } from "./chargebee-client.service";
import { ChargebeeClient } from "./resources/mod";
import { ChargebeeResourceWrapper } from "./chargebee-resource-wrapper.class";

@Injectable()
export class ChargebeeService extends ChargebeeClient {
export class ChargebeeService extends ChargebeeResourceWrapper {
constructor(chargebeeClient: ChargebeeClientService) {
super(chargebeeClient.client);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ChargeBee } from "chargebee-typescript";
import type { RequestWrapper } from "chargebee-typescript/lib/request_wrapper";
import type { ListResult } from "chargebee-typescript/lib/list_result";
import type { Result } from "chargebee-typescript/lib/result";
import { ProcessWait } from "chargebee-typescript/lib/process_wait";
import type { ProcessWait } from "chargebee-typescript/lib/process_wait";

type ChargeBeeResultMethodName<
TResource extends keyof ChargeBee,
Expand Down Expand Up @@ -66,6 +66,25 @@ type ChargeBeeProcessWaitMethodName<
export abstract class ChargebeeResource {
constructor(protected readonly chargebee: ChargeBee) {}

private resolveGetters =
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
(value: Result) => {
const descriptors = Object.getOwnPropertyDescriptors(
value.constructor.prototype,
);
const properties = Object.entries(descriptors)
.filter(([, descriptor]) => typeof descriptor.get === "function")
.map(([key]) => key as keyof Result);
return Object.fromEntries(
properties
.filter(
(key) =>
(result ? Object.keys(result) : undefined)?.includes(key) ?? true,
)
.map((key) => [key, value[key]]),
);
};

protected request<
TResource extends keyof ChargeBee,
TMethod extends keyof ChargeBee[TResource],
Expand All @@ -75,14 +94,15 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>() =>
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
async (
...args: Parameters<ChargeBeeResultFunction<TResource, TMethod>>
): Promise<TResult> => {
const result = await this.chargebee[resourceProp][
methodProp as unknown as TMethod
](...args).request();
return result;
return this.chargebee[resourceProp][methodProp as unknown as TMethod](
...args,
)
.request()
.then(this.resolveGetters(result));
},
};
}
Expand All @@ -96,7 +116,7 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>() =>
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
async (
...args: Parameters<ChargeBeeListResultFunction<TResource, TMethod>>
): Promise<TResult[]> => {
Expand Down Expand Up @@ -124,8 +144,7 @@ export abstract class ChargebeeResource {

do {
const response = await request(offset);
console.log(response.list);
items.push(...response.list);
items.push(...response.list.map(this.resolveGetters(result)));
offset = response.next_offset;
} while (offset);

Expand All @@ -143,14 +162,15 @@ export abstract class ChargebeeResource {
) {
return {
returns:
<TResult extends { [K in keyof Result]?: unknown }>() =>
<TResult extends { [K in keyof Result]?: unknown }>(result?: TResult) =>
async (
...args: Parameters<ChargeBeeResultFunction<TResource, TMethod>>
): Promise<TResult> => {
const result = await this.chargebee[resourceProp][
return await this.chargebee[resourceProp][
methodProp as unknown as TMethod
](...args).request();
return result;
](...args)
.request()
.then(this.resolveGetters(result));
},
};
}
Expand Down
2 changes: 1 addition & 1 deletion src/resources/addon-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Addon } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";

export class AddonResource extends ChargebeeResource {
public readonly create = super
Expand Down
2 changes: 1 addition & 1 deletion src/resources/address-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Address } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";

export class AddressResource extends ChargebeeResource {
public readonly retrieve = super
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AttachedItem } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";

export class AttachedItemResource extends ChargebeeResource {
public readonly create = super
Expand Down
2 changes: 1 addition & 1 deletion src/resources/card-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
Customer,
ThirdPartyPaymentMethod,
} from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";

export class CardResource extends ChargebeeResource {
public readonly retrieve = super
Expand Down
2 changes: 1 addition & 1 deletion src/resources/comment-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Comment } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CommentResource extends ChargebeeResource {
public readonly create = super
.request("comment", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CouponCode } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CouponCodeResource extends ChargebeeResource {
public readonly create = super
.request("coupon_code", "create")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/coupon-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Coupon } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CouponResource extends ChargebeeResource {
public readonly create = super
.request("coupon", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CouponSet } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CouponSetResource extends ChargebeeResource {
public readonly create = super
.request("coupon_set", "create")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
Invoice,
Transaction,
} from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CreditNoteResource extends ChargebeeResource {
public readonly create = super
.request("credit_note", "create")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/customer-resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
Customer,
PaymentSource,
} from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class CustomerResource extends ChargebeeResource {
public readonly create = super
.request("customer", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { DifferentialPrice } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class DifferentialPriceResource extends ChargebeeResource {
public readonly create = super
.request("differential_price", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { EntitlementOverride } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class EntitlementOverrideResource extends ChargebeeResource {
public readonly addEntitlementOverrideForSubscription = super
.request(
Expand Down
2 changes: 1 addition & 1 deletion src/resources/estimate-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Estimate } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class EstimateResource extends ChargebeeResource {
public readonly createSubscription = super
.request("estimate", "create_subscription")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/event-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Event } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class EventResource extends ChargebeeResource {
public readonly list = super
.listRequest("event", "list")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/export-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Download, Export } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class ExportResource extends ChargebeeResource {
public readonly waitForExportCompletion = super
.processWait("export", "wait_for_export_completion")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/feature-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Feature } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class FeatureResource extends ChargebeeResource {
public readonly list = super
.listRequest("feature", "list")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/gift-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Gift } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class GiftResource extends ChargebeeResource {
public readonly create = super
.request("gift", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { HostedPage } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class HostedPageResource extends ChargebeeResource {
public readonly checkoutNew = super
.request("hosted_page", "checkout_new")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { InAppSubscription } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class InAppSubscriptionResource extends ChargebeeResource {
public readonly processReceipt = super
.request("in_app_subscription", "process_receipt")
Expand Down
2 changes: 1 addition & 1 deletion src/resources/invoice-resource.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Invoice } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class InvoiceResource extends ChargebeeResource {
public readonly create = super
.request("invoice", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ItemEntitlement } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class ItemEntitlementResource extends ChargebeeResource {
public readonly itemEntitlementsForItem = super
.listRequest("item_entitlement", "item_entitlements_for_item")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ItemFamily } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class ItemFamilyResource extends ChargebeeResource {
public readonly create = super
.request("item_family", "create")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import { ItemPrice } from "chargebee-typescript/lib/resources";
import { ChargebeeResource } from "../chargebee-resource.class";
import { ChargebeeResource } from "./abstract-resource";
export class ItemPriceResource extends ChargebeeResource {
public readonly create = super
.request("item_price", "create")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly retrieve = super
.request("item_price", "retrieve")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly update = super
.request("item_price", "update")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly list = super
.listRequest("item_price", "list")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly delete = super
.request("item_price", "delete")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly findApplicableItems = super
.listRequest("item_price", "find_applicable_items")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
public readonly findApplicableItemPrices = super
.listRequest("item_price", "find_applicable_item_prices")
.returns<{ item_price: ItemPrice }>();
.returns({ item_price: ItemPrice });
}
Loading

0 comments on commit 11b4290

Please sign in to comment.