Merge pull request #1022 from automatisch/get-invoices
feat: Implement getInvoices graphQL query
This commit is contained in:
@@ -59,7 +59,7 @@ const getBillingAndUsage = async (
|
|||||||
.andWhere(
|
.andWhere(
|
||||||
'created_at',
|
'created_at',
|
||||||
'>=',
|
'>=',
|
||||||
DateTime.now().minus({ days: 30 }).toFormat('D')
|
DateTime.now().minus({ days: 30 }).toISODate()
|
||||||
)
|
)
|
||||||
.count()
|
.count()
|
||||||
.first();
|
.first();
|
||||||
|
17
packages/backend/src/graphql/queries/get-invoices.ee.ts
Normal file
17
packages/backend/src/graphql/queries/get-invoices.ee.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import Context from '../../types/express/context';
|
||||||
|
import Billing from '../../helpers/billing/index.ee';
|
||||||
|
|
||||||
|
const getInvoices = async (
|
||||||
|
_parent: unknown,
|
||||||
|
_params: unknown,
|
||||||
|
context: Context
|
||||||
|
) => {
|
||||||
|
const subscription = await context.currentUser.$relatedQuery('subscription');
|
||||||
|
const invoices = await Billing.paddleClient.getInvoices(
|
||||||
|
Number(subscription.paddleSubscriptionId)
|
||||||
|
);
|
||||||
|
|
||||||
|
return invoices;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getInvoices;
|
@@ -15,6 +15,7 @@ import getUsageData from './queries/get-usage-data.ee';
|
|||||||
import getPaymentPlans from './queries/get-payment-plans.ee';
|
import getPaymentPlans from './queries/get-payment-plans.ee';
|
||||||
import getPaddleInfo from './queries/get-paddle-info.ee';
|
import getPaddleInfo from './queries/get-paddle-info.ee';
|
||||||
import getBillingAndUsage from './queries/get-billing-and-usage.ee';
|
import getBillingAndUsage from './queries/get-billing-and-usage.ee';
|
||||||
|
import getInvoices from './queries/get-invoices.ee';
|
||||||
import getAutomatischInfo from './queries/get-automatisch-info';
|
import getAutomatischInfo from './queries/get-automatisch-info';
|
||||||
import healthcheck from './queries/healthcheck';
|
import healthcheck from './queries/healthcheck';
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ const queryResolvers = {
|
|||||||
getPaymentPlans,
|
getPaymentPlans,
|
||||||
getPaddleInfo,
|
getPaddleInfo,
|
||||||
getBillingAndUsage,
|
getBillingAndUsage,
|
||||||
|
getInvoices,
|
||||||
getAutomatischInfo,
|
getAutomatischInfo,
|
||||||
healthcheck,
|
healthcheck,
|
||||||
};
|
};
|
||||||
|
@@ -38,6 +38,7 @@ type Query {
|
|||||||
getPaymentPlans: [PaymentPlan]
|
getPaymentPlans: [PaymentPlan]
|
||||||
getPaddleInfo: GetPaddleInfo
|
getPaddleInfo: GetPaddleInfo
|
||||||
getBillingAndUsage: GetBillingAndUsage
|
getBillingAndUsage: GetBillingAndUsage
|
||||||
|
getInvoices: [Invoice]
|
||||||
getAutomatischInfo: GetAutomatischInfo
|
getAutomatischInfo: GetAutomatischInfo
|
||||||
healthcheck: AppHealth
|
healthcheck: AppHealth
|
||||||
}
|
}
|
||||||
@@ -504,6 +505,14 @@ type GetPaddleInfo {
|
|||||||
vendorId: Int
|
vendorId: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Invoice {
|
||||||
|
id: Int
|
||||||
|
amount: Float
|
||||||
|
currency: String
|
||||||
|
payout_date: String
|
||||||
|
receipt_url: String
|
||||||
|
}
|
||||||
|
|
||||||
type PaymentPlan {
|
type PaymentPlan {
|
||||||
name: String
|
name: String
|
||||||
limit: String
|
limit: String
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import appConfig from '../../config/app';
|
import appConfig from '../../config/app';
|
||||||
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
const PADDLE_VENDOR_URL = appConfig.isDev
|
const PADDLE_VENDOR_URL = appConfig.isDev
|
||||||
? 'https://sandbox-vendors.paddle.com'
|
? 'https://sandbox-vendors.paddle.com'
|
||||||
@@ -22,8 +23,29 @@ const getSubscription = async (subscriptionId: number) => {
|
|||||||
return subscription;
|
return subscription;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getInvoices = async (subscriptionId: number) => {
|
||||||
|
const data = {
|
||||||
|
vendor_id: appConfig.paddleVendorId,
|
||||||
|
vendor_auth_code: appConfig.paddleVendorAuthCode,
|
||||||
|
subscription_id: subscriptionId,
|
||||||
|
is_paid: 1,
|
||||||
|
from: DateTime.now().minus({ years: 3 }).toISODate(),
|
||||||
|
to: DateTime.now().plus({ days: 3 }).toISODate(),
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await axiosInstance.post(
|
||||||
|
'/api/2.0/subscription/payments',
|
||||||
|
data
|
||||||
|
);
|
||||||
|
|
||||||
|
const invoices = response.data.response;
|
||||||
|
|
||||||
|
return invoices;
|
||||||
|
};
|
||||||
|
|
||||||
const paddleClient = {
|
const paddleClient = {
|
||||||
getSubscription,
|
getSubscription,
|
||||||
|
getInvoices,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default paddleClient;
|
export default paddleClient;
|
||||||
|
@@ -148,7 +148,7 @@ class User extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async startTrialPeriod() {
|
async startTrialPeriod() {
|
||||||
this.trialExpiryDate = DateTime.now().plus({ days: 30 }).toFormat('D');
|
this.trialExpiryDate = DateTime.now().plus({ days: 30 }).toISODate();
|
||||||
}
|
}
|
||||||
|
|
||||||
async $beforeInsert(queryContext: QueryContext) {
|
async $beforeInsert(queryContext: QueryContext) {
|
||||||
|
Reference in New Issue
Block a user