All files / realm/blong-gateway/meta/model gatewaySubscriptionModel.ts

100% Statements 78/78
100% Branches 2/2
100% Functions 1/1
100% Lines 78/78

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 791x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x  
import {model} from '@feasibleone/blong';
 
/**
 * Subscription management model (browser).
 *
 * Links an application to a bundle; `status` drives authorization + metering
 * (active subscriptions grant the bundle's actions and are metered).
 */
export default model(
    () =>
        async function gatewaySubscriptionModel() {
            return {
                subject: 'gateway',
                object: 'subscription',
                objectTitle: 'Subscription',
                public: true,
 
                schema: {
                    properties: {
                        subscription: {
                            properties: {
                                applicationId: {
                                    title: 'Application',
                                    widget: {dropdown: 'gateway.application'},
                                },
                                bundleId: {
                                    title: 'Bundle',
                                    widget: {dropdown: 'gateway.bundle'},
                                },
                                status: {
                                    widget: {
                                        options: [
                                            {value: 'active', label: 'Active'},
                                            {value: 'suspended', label: 'Suspended'},
                                            {value: 'cancelled', label: 'Cancelled'},
                                        ],
                                    },
                                },
                                startsAt: {title: 'Starts'},
                                endsAt: {title: 'Ends'},
                                createdAt: {title: 'Created'},
                            },
                            widget: {
                                columns: ['status', 'startsAt', 'endsAt'],
                            },
                        },
                    },
                },
 
                cards: {
                    browse: {
                        label: 'Subscriptions',
                        widgets: ['subscription'],
                    },
                    edit: {
                        label: 'Subscription Details',
                        widgets: [
                            'subscription.applicationId',
                            'subscription.bundleId',
                            'subscription.status',
                            'subscription.startsAt',
                            'subscription.endsAt',
                        ],
                    },
                    detail: {
                        label: '',
                        readOnly: true,
                        watch: '$.selected.subscription',
                        widgets: [
                            '$.edit.subscription.status',
                            '$.edit.subscription.startsAt',
                            '$.edit.subscription.endsAt',
                        ],
                    },
                },
            };
        },
);