commerce-vuex
Version:
Commerce vuex module
107 lines (93 loc) • 4.16 kB
JavaScript
import { auth, nav } from 'oak-vuex'
const { getHubAuthHeader } = auth
const { wrapRequest, wrapRequestWithRange } = nav
const hubName = process.env.VUE_APP_RETAINHUB_NAME
const oakTradeApiUrl = process.env.VUE_APP_RETAINHUB_COMMERCE_API_URL
const stripeAPIUrl = process.env.VUE_APP_STRIPE_API_URL
const stripeSecretKey = process.env.VUE_APP_STRIPE_SECRET_KEY
import { JSONToURLEncoded } from './common.service'
const doFetchList = wrapRequestWithRange(({ appId, nameLike, limit, offset }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Prefer': 'count=exact', ...getHubAuthHeader(hubName) },
};
const params = { app_id:`eq.${appId}`, limit: limit || 50, offset: offset || 0 }
if (nameLike) params['name'] = `ilike.*${nameLike}*`
const qs = Object.keys(params).map(key => key + '=' + params[key]).join('&');
return fetch(`${oakTradeApiUrl}/subscription?${qs}`, requestOptions)
})
const doPostOne = wrapRequest((subscription) => {
const requestOptions = {
method: 'POST',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(subscription)
};
return fetch(`${oakTradeApiUrl}/subscription`, requestOptions)
})
const doPatchOne = wrapRequest((subscription) => {
const requestOptions = {
method: 'PATCH',
headers: {
'Content-Type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json',
'Prefer': 'return=representation', ...getHubAuthHeader(hubName)
},
body: JSON.stringify(subscription)
};
return fetch(`${oakTradeApiUrl}/subscription?id=eq.${subscription.id}`, requestOptions)
})
const doFetchOne = wrapRequest(({subscriptionId,appId}) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Accept': 'application/vnd.pgrst.object+json', ...getHubAuthHeader(hubName) },
};
return fetch(`${oakTradeApiUrl}/subscription?id=eq.${subscriptionId}&app_id=eq.${appId}`, requestOptions);
})
const doDeleteSelected = wrapRequest((subscriptionId) => {
const requestOptions = {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
},
};
return fetch(`${oakTradeApiUrl}/subscription?id=in.(${subscriptionId})`, requestOptions)
})
const doFetchSubscribeList = wrapRequest(({ customerId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Authorization' : 'Bearer '+ stripeSecretKey },
};
return fetch(`${stripeAPIUrl}/v1/subscriptions?customer=${customerId}`, requestOptions);
})
// stripe invoices based on subscripion
const doFetchLatestInvoice = wrapRequest(({ latestInvoiceId }) => {
const requestOptions = {
method: 'GET',
headers: { 'Content-type': 'application/json', 'Authorization' : 'Bearer '+ stripeSecretKey },
};
return fetch(`${stripeAPIUrl}/v1/invoices/${latestInvoiceId}`, requestOptions);
})
// stripe pay invoices based on subscripion latest invoice
const doPayInvoice = wrapRequest(({ invoiceId }) => {
const requestOptions = {
method: 'POST',
headers: { 'Content-type': 'application/json', 'Authorization' : 'Bearer '+ stripeSecretKey },
};
return fetch(`${stripeAPIUrl}/v1/invoices/${invoiceId}/pay`, requestOptions);
})
const doPostStripeSubscriptionOne = wrapRequest(({ subscription }) => {
let formBody = JSONToURLEncoded(subscription);
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'Authorization' : 'Bearer '+ stripeSecretKey },
body: formBody
};
return fetch(`${stripeAPIUrl}/v1/subscriptions`, requestOptions);
})
export default {
doFetchOne, doFetchList,
doPostOne, doPatchOne, doDeleteSelected,
doFetchSubscribeList, doFetchLatestInvoice, doPayInvoice, doPostStripeSubscriptionOne
}