-
-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathbilling.controller.js
More file actions
62 lines (58 loc) · 2.14 KB
/
Copy pathbilling.controller.js
File metadata and controls
62 lines (58 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* Module dependencies
*/
import responses from '../../../lib/helpers/responses.js';
import BillingService from '../services/billing.service.js';
/**
* @desc Endpoint to create a Stripe Checkout session
* @param {Object} req - Express request object
* @param {Object} res - Express response object
* @returns {Promise<void>}
*/
const checkout = async (req, res) => {
try {
const { priceId, successUrl, cancelUrl } = req.body;
const url = await BillingService.createCheckout(req.organization, priceId, successUrl, cancelUrl);
responses.success(res, 'checkout session created')({ url });
} catch (err) {
const status = err.message?.startsWith('Invalid') || err.message?.includes('not found') ? 422 : 502;
const title = status === 422 ? 'Unprocessable Entity' : 'Bad Gateway';
responses.error(res, status, title, 'Failed to create checkout session')(err);
}
};
/**
* @desc Endpoint to create a Stripe Customer Portal session
* @param {Object} req - Express request object
* @param {Object} res - Express response object
* @returns {Promise<void>}
*/
const portal = async (req, res) => {
try {
const { returnUrl } = req.body;
const url = await BillingService.createPortalSession(req.organization, returnUrl);
responses.success(res, 'portal session created')({ url });
} catch (err) {
const status = err.message?.startsWith('Invalid') || err.message?.includes('not found') ? 422 : 502;
const title = status === 422 ? 'Unprocessable Entity' : 'Bad Gateway';
responses.error(res, status, title, 'Failed to create portal session')(err);
}
};
/**
* @desc Endpoint to get the subscription for the current organization
* @param {Object} req - Express request object
* @param {Object} res - Express response object
* @returns {Promise<void>}
*/
const getSubscription = async (req, res) => {
try {
const subscription = await BillingService.getSubscription(req.organization._id);
responses.success(res, 'subscription')(subscription);
} catch (err) {
responses.error(res, 500, 'Internal Server Error', 'Failed to retrieve subscription')(err);
}
};
export default {
checkout,
portal,
getSubscription,
};