@vrplatform/kysely 1.3.45-6008 → 1.3.45-6021
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/main/query/tenant/status.d.ts +1 -2
- package/build/main/query/tenant/status.js +1 -6
- package/build/main/query/tenant/status.js.map +1 -1
- package/build/migrations-v2/0000000000012-trial-free-analytics-billing-status.ts +72 -0
- package/build/module/query/tenant/status.d.ts +1 -2
- package/build/module/query/tenant/status.js +1 -6
- package/build/module/query/tenant/status.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,9 +8,8 @@ export declare function whereTenantActive(eb: TenantExpressionBuilder): import("
|
|
|
8
8
|
export declare function whereTenantNotTestTeam(eb: TenantExpressionBuilder, testTeamId: string): import("kysely").ExpressionWrapper<DB & {
|
|
9
9
|
tenant: PublicTenant;
|
|
10
10
|
}, "tenant", import("kysely/dist/cjs/util/type-utils").SqlBool>;
|
|
11
|
-
export declare function whereTenantShouldBePaid(eb: TenantExpressionBuilder, { includePartnerTeams,
|
|
11
|
+
export declare function whereTenantShouldBePaid(eb: TenantExpressionBuilder, { includePartnerTeams, }?: {
|
|
12
12
|
includePartnerTeams?: boolean;
|
|
13
|
-
today?: Date | string;
|
|
14
13
|
}): import("kysely").ExpressionWrapper<DB & {
|
|
15
14
|
tenant: PublicTenant;
|
|
16
15
|
}, "tenant", import("kysely/dist/cjs/util/type-utils").SqlBool>;
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.whereTenantActive = whereTenantActive;
|
|
4
4
|
exports.whereTenantNotTestTeam = whereTenantNotTestTeam;
|
|
5
5
|
exports.whereTenantShouldBePaid = whereTenantShouldBePaid;
|
|
6
|
-
const utils_1 = require("@vrplatform/utils");
|
|
7
6
|
const billing_partner_1 = require("./billing-partner");
|
|
8
7
|
function whereTenantActive(eb) {
|
|
9
8
|
return eb.and([
|
|
@@ -28,14 +27,10 @@ function whereTenantNotTestTeam(eb, testTeamId) {
|
|
|
28
27
|
]),
|
|
29
28
|
]);
|
|
30
29
|
}
|
|
31
|
-
function whereTenantShouldBePaid(eb, { includePartnerTeams = false,
|
|
30
|
+
function whereTenantShouldBePaid(eb, { includePartnerTeams = false, } = {}) {
|
|
32
31
|
return eb.and([
|
|
33
32
|
whereTenantActive(eb),
|
|
34
33
|
eb('tenant.isOnboarding', '=', false),
|
|
35
|
-
eb.or([
|
|
36
|
-
eb('tenant.trialUntil', '<', today),
|
|
37
|
-
eb('tenant.trialUntil', 'is', null),
|
|
38
|
-
]),
|
|
39
34
|
...(includePartnerTeams
|
|
40
35
|
? []
|
|
41
36
|
: [eb('tenant.calculatedIsBillable', '=', true)]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"src/","sources":["query/tenant/status.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"src/","sources":["query/tenant/status.ts"],"names":[],"mappings":";;AAQA,8CAkBC;AAED,wDAeC;AAED,0DAeC;AA3DD,uDAAkE;AAOlE,SAAgB,iBAAiB,CAAC,EAA2B;IAC3D,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE,QAAQ,CAAC;QAC5C,EAAE,CAAC,MAAM,CACP,EAAE;aACC,UAAU,CAAC,iCAAiC,CAAC;aAC7C,MAAM,CAAC,mBAAmB,CAAC;aAC3B,KAAK,CACJ,mBAAmB,EACnB,GAAG,EACH,EAAE,CAAC,EAAE,CAAC,QAAQ,CACZ,mCAAmC,EACnC,EAAE,CAAC,GAAG,CAAC,IAAA,+CAA6B,EAAC,EAAE,CAAC,CAAC,CAC1C,CACF;aACA,KAAK,CAAC,iCAAiC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAC3D;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,sBAAsB,CACpC,EAA2B,EAC3B,UAAkB;IAElB,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC;QACjC,EAAE,CAAC,EAAE,CAAC;YACJ,EAAE,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC;YAClC,EAAE,CAAC,kBAAkB,EAAE,IAAI,EAAE,UAAU,CAAC;SACzC,CAAC;QACF,EAAE,CAAC,EAAE,CAAC;YACJ,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC;YACzC,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,UAAU,CAAC;SAChD,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,uBAAuB,CACrC,EAA2B,EAC3B,EACE,mBAAmB,GAAG,KAAK,MAGzB,EAAE;IAEN,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,iBAAiB,CAAC,EAAE,CAAC;QACrB,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,mBAAmB;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;KACpD,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { DB, ExpressionBuilder, PublicTenant } from '../../isomorphic';\nimport { getCalculatedBillingPartnerId } from './billing-partner';\n\ntype TenantExpressionBuilder = ExpressionBuilder<\n DB & { tenant: PublicTenant },\n 'tenant'\n>;\n\nexport function whereTenantActive(eb: TenantExpressionBuilder) {\n return eb.and([\n eb('tenant.calculatedStatus', '=', 'active'),\n eb.exists(\n eb\n .selectFrom('public.tenant as billingPartner')\n .select('billingPartner.id')\n .where(\n 'billingPartner.id',\n '=',\n eb.fn.coalesce(\n 'tenant.calculatedBillingPartnerId',\n eb.val(getCalculatedBillingPartnerId({}))\n )\n )\n .where('billingPartner.calculatedStatus', '=', 'active')\n ),\n ]);\n}\n\nexport function whereTenantNotTestTeam(\n eb: TenantExpressionBuilder,\n testTeamId: string\n) {\n return eb.and([\n eb('tenant.id', '!=', testTeamId),\n eb.or([\n eb('tenant.partnerId', 'is', null),\n eb('tenant.partnerId', '!=', testTeamId),\n ]),\n eb.or([\n eb('tenant.billingPartnerId', 'is', null),\n eb('tenant.billingPartnerId', '!=', testTeamId),\n ]),\n ]);\n}\n\nexport function whereTenantShouldBePaid(\n eb: TenantExpressionBuilder,\n {\n includePartnerTeams = false,\n }: {\n includePartnerTeams?: boolean;\n } = {}\n) {\n return eb.and([\n whereTenantActive(eb),\n eb('tenant.isOnboarding', '=', false),\n ...(includePartnerTeams\n ? []\n : [eb('tenant.calculatedIsBillable', '=', true)]),\n ]);\n}\n"]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type Kysely, sql } from 'kysely';
|
|
2
|
+
|
|
3
|
+
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
+
await sql`
|
|
5
|
+
create or replace function public.tenant_calculated_analytics_billing_status(
|
|
6
|
+
row_t public.tenant
|
|
7
|
+
) returns text
|
|
8
|
+
language sql stable
|
|
9
|
+
as $$
|
|
10
|
+
with norm as (
|
|
11
|
+
select
|
|
12
|
+
lower(nullif(row_t.billing_subscription_status, '')) as sub_status,
|
|
13
|
+
nullif(trim(row_t.billing_payment_method_type), '') as pm_type,
|
|
14
|
+
coalesce(row_t.is_onboarding, false) as is_onboarding
|
|
15
|
+
)
|
|
16
|
+
select
|
|
17
|
+
case
|
|
18
|
+
when sub_status in ('cancelled', 'voided') then 'cancelled'
|
|
19
|
+
when sub_status = 'errored' then 'errored'
|
|
20
|
+
when is_onboarding then 'onboarding'
|
|
21
|
+
when sub_status is null then 'partner'
|
|
22
|
+
when sub_status = 'draft' then 'pending'
|
|
23
|
+
when sub_status = 'active' and pm_type is null then 'pending'
|
|
24
|
+
when sub_status = 'active' and pm_type is not null then 'active'
|
|
25
|
+
else 'unknown'
|
|
26
|
+
end
|
|
27
|
+
from norm;
|
|
28
|
+
$$;
|
|
29
|
+
`.execute(db);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
33
|
+
await sql`
|
|
34
|
+
create or replace function public.tenant_calculated_analytics_billing_status(
|
|
35
|
+
row_t public.tenant
|
|
36
|
+
) returns text
|
|
37
|
+
language sql stable
|
|
38
|
+
as $$
|
|
39
|
+
with norm as (
|
|
40
|
+
select
|
|
41
|
+
lower(nullif(row_t.billing_subscription_status, '')) as sub_status,
|
|
42
|
+
nullif(trim(row_t.billing_payment_method_type), '') as pm_type,
|
|
43
|
+
row_t.trial_until as trial_until_date,
|
|
44
|
+
coalesce(row_t.is_onboarding, false) as is_onboarding
|
|
45
|
+
),
|
|
46
|
+
flags as (
|
|
47
|
+
select
|
|
48
|
+
trial_until_date is not null
|
|
49
|
+
and trial_until_date > current_date as trial_active,
|
|
50
|
+
sub_status,
|
|
51
|
+
pm_type,
|
|
52
|
+
is_onboarding
|
|
53
|
+
from norm
|
|
54
|
+
)
|
|
55
|
+
select
|
|
56
|
+
case
|
|
57
|
+
when sub_status in ('cancelled', 'voided') then 'cancelled'
|
|
58
|
+
when sub_status = 'errored' then 'errored'
|
|
59
|
+
when is_onboarding then 'onboarding'
|
|
60
|
+
when sub_status is null then 'partner'
|
|
61
|
+
when sub_status = 'draft' then 'pending'
|
|
62
|
+
when sub_status = 'active' and trial_active then 'trial'
|
|
63
|
+
when sub_status = 'active'
|
|
64
|
+
and not trial_active
|
|
65
|
+
and pm_type is null then 'pending'
|
|
66
|
+
when sub_status = 'active' and pm_type is not null then 'active'
|
|
67
|
+
else 'unknown'
|
|
68
|
+
end
|
|
69
|
+
from flags;
|
|
70
|
+
$$;
|
|
71
|
+
`.execute(db);
|
|
72
|
+
}
|
|
@@ -8,9 +8,8 @@ export declare function whereTenantActive(eb: TenantExpressionBuilder): import("
|
|
|
8
8
|
export declare function whereTenantNotTestTeam(eb: TenantExpressionBuilder, testTeamId: string): import("kysely").ExpressionWrapper<DB & {
|
|
9
9
|
tenant: PublicTenant;
|
|
10
10
|
}, "tenant", import("kysely/dist/cjs/util/type-utils").SqlBool>;
|
|
11
|
-
export declare function whereTenantShouldBePaid(eb: TenantExpressionBuilder, { includePartnerTeams,
|
|
11
|
+
export declare function whereTenantShouldBePaid(eb: TenantExpressionBuilder, { includePartnerTeams, }?: {
|
|
12
12
|
includePartnerTeams?: boolean;
|
|
13
|
-
today?: Date | string;
|
|
14
13
|
}): import("kysely").ExpressionWrapper<DB & {
|
|
15
14
|
tenant: PublicTenant;
|
|
16
15
|
}, "tenant", import("kysely/dist/cjs/util/type-utils").SqlBool>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { day } from '@vrplatform/utils';
|
|
2
1
|
import { getCalculatedBillingPartnerId } from './billing-partner';
|
|
3
2
|
export function whereTenantActive(eb) {
|
|
4
3
|
return eb.and([
|
|
@@ -23,14 +22,10 @@ export function whereTenantNotTestTeam(eb, testTeamId) {
|
|
|
23
22
|
]),
|
|
24
23
|
]);
|
|
25
24
|
}
|
|
26
|
-
export function whereTenantShouldBePaid(eb, { includePartnerTeams = false,
|
|
25
|
+
export function whereTenantShouldBePaid(eb, { includePartnerTeams = false, } = {}) {
|
|
27
26
|
return eb.and([
|
|
28
27
|
whereTenantActive(eb),
|
|
29
28
|
eb('tenant.isOnboarding', '=', false),
|
|
30
|
-
eb.or([
|
|
31
|
-
eb('tenant.trialUntil', '<', today),
|
|
32
|
-
eb('tenant.trialUntil', 'is', null),
|
|
33
|
-
]),
|
|
34
29
|
...(includePartnerTeams
|
|
35
30
|
? []
|
|
36
31
|
: [eb('tenant.calculatedIsBillable', '=', true)]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"src/","sources":["query/tenant/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"src/","sources":["query/tenant/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAOlE,MAAM,UAAU,iBAAiB,CAAC,EAA2B;IAC3D,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE,QAAQ,CAAC;QAC5C,EAAE,CAAC,MAAM,CACP,EAAE;aACC,UAAU,CAAC,iCAAiC,CAAC;aAC7C,MAAM,CAAC,mBAAmB,CAAC;aAC3B,KAAK,CACJ,mBAAmB,EACnB,GAAG,EACH,EAAE,CAAC,EAAE,CAAC,QAAQ,CACZ,mCAAmC,EACnC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAC1C,CACF;aACA,KAAK,CAAC,iCAAiC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAC3D;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAA2B,EAC3B,UAAkB;IAElB,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC;QACjC,EAAE,CAAC,EAAE,CAAC;YACJ,EAAE,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC;YAClC,EAAE,CAAC,kBAAkB,EAAE,IAAI,EAAE,UAAU,CAAC;SACzC,CAAC;QACF,EAAE,CAAC,EAAE,CAAC;YACJ,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC;YACzC,EAAE,CAAC,yBAAyB,EAAE,IAAI,EAAE,UAAU,CAAC;SAChD,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,EAA2B,EAC3B,EACE,mBAAmB,GAAG,KAAK,MAGzB,EAAE;IAEN,OAAO,EAAE,CAAC,GAAG,CAAC;QACZ,iBAAiB,CAAC,EAAE,CAAC;QACrB,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE,KAAK,CAAC;QACrC,GAAG,CAAC,mBAAmB;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;KACpD,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { DB, ExpressionBuilder, PublicTenant } from '../../isomorphic';\nimport { getCalculatedBillingPartnerId } from './billing-partner';\n\ntype TenantExpressionBuilder = ExpressionBuilder<\n DB & { tenant: PublicTenant },\n 'tenant'\n>;\n\nexport function whereTenantActive(eb: TenantExpressionBuilder) {\n return eb.and([\n eb('tenant.calculatedStatus', '=', 'active'),\n eb.exists(\n eb\n .selectFrom('public.tenant as billingPartner')\n .select('billingPartner.id')\n .where(\n 'billingPartner.id',\n '=',\n eb.fn.coalesce(\n 'tenant.calculatedBillingPartnerId',\n eb.val(getCalculatedBillingPartnerId({}))\n )\n )\n .where('billingPartner.calculatedStatus', '=', 'active')\n ),\n ]);\n}\n\nexport function whereTenantNotTestTeam(\n eb: TenantExpressionBuilder,\n testTeamId: string\n) {\n return eb.and([\n eb('tenant.id', '!=', testTeamId),\n eb.or([\n eb('tenant.partnerId', 'is', null),\n eb('tenant.partnerId', '!=', testTeamId),\n ]),\n eb.or([\n eb('tenant.billingPartnerId', 'is', null),\n eb('tenant.billingPartnerId', '!=', testTeamId),\n ]),\n ]);\n}\n\nexport function whereTenantShouldBePaid(\n eb: TenantExpressionBuilder,\n {\n includePartnerTeams = false,\n }: {\n includePartnerTeams?: boolean;\n } = {}\n) {\n return eb.and([\n whereTenantActive(eb),\n eb('tenant.isOnboarding', '=', false),\n ...(includePartnerTeams\n ? []\n : [eb('tenant.calculatedIsBillable', '=', true)]),\n ]);\n}\n"]}
|