1
1
import * as mysql from 'mysql' ;
2
2
import { promisify } from 'util' ;
3
3
import { SessionProps , StoreData } from '../../types' ;
4
+ import { trialDays } from '../checkout' ;
4
5
5
6
const MYSQL_CONFIG = {
6
7
host : process . env . MYSQL_HOST ,
@@ -26,12 +27,17 @@ export async function setUser({ user }: SessionProps) {
26
27
}
27
28
28
29
export async function setStore ( session : SessionProps ) {
29
- const { access_token : accessToken , context, scope } = session ;
30
+ const {
31
+ access_token : accessToken ,
32
+ context,
33
+ scope,
34
+ user : { id } ,
35
+ } = session ;
30
36
// Only set on app install or update
31
37
if ( ! accessToken || ! scope ) return null ;
32
38
33
39
const storeHash = context ?. split ( '/' ) [ 1 ] || '' ;
34
- const storeData : StoreData = { accessToken, scope, storeHash } ;
40
+ const storeData : StoreData = { accessToken, adminId : id , scope, storeHash } ;
35
41
36
42
await query ( 'REPLACE INTO stores SET ?' , storeData ) ;
37
43
}
@@ -91,3 +97,54 @@ export async function getStoreToken(storeHash: string) {
91
97
export async function deleteStore ( { store_hash : storeHash } : SessionProps ) {
92
98
await query ( 'DELETE FROM stores WHERE storeHash = ?' , storeHash ) ;
93
99
}
100
+
101
+ // CHECKOUT Functions
102
+ export async function setStorePlan ( session : SessionProps ) {
103
+ const { access_token : accessToken , context, plan, sub } = session ;
104
+ // Only set on app install or subscription verification (load)
105
+ if ( ( ! accessToken && ! plan ?. pid ) || ( plan && ! plan . isPaidApp ) ) return null ;
106
+
107
+ const contextString = context ?? sub ;
108
+ const storeHash = contextString ?. split ( '/' ) [ 1 ] || '' ;
109
+ const defaultEnd = new Date ( Date . now ( ) + ( trialDays * 24 * 60 * 60 * 1000 ) ) ;
110
+ const data = {
111
+ pid : '' ,
112
+ isPaidApp : false ,
113
+ showPaidWelcome : false ,
114
+ storeHash,
115
+ trialEndDate : defaultEnd ,
116
+ ...plan ,
117
+ } ;
118
+
119
+ await query ( 'REPLACE INTO plan SET ?' , data ) ;
120
+ }
121
+
122
+ export async function getStorePlan ( storeHash : string ) {
123
+ if ( ! storeHash ) return null ;
124
+
125
+ const results = await query ( 'SELECT * FROM plan WHERE storeHash = ? LIMIT 1' , storeHash ) ;
126
+
127
+ return results . length ? results [ 0 ] : null ;
128
+ }
129
+
130
+ export async function setStoreWelcome ( storeHash : string , show : boolean ) {
131
+ if ( ! storeHash ) return null ;
132
+
133
+ const values = [ show , storeHash ] ;
134
+
135
+ await query ( 'UPDATE plan SET showPaidWelcome = ? WHERE storeHash = ?' , values ) ;
136
+ }
137
+
138
+ export async function setCheckoutId ( pid : string , checkoutId : string ) {
139
+ if ( ! pid || ! checkoutId ) return null ;
140
+
141
+ await query ( 'REPLACE INTO checkout SET ?' , { pid, checkoutId } ) ;
142
+ }
143
+
144
+ export async function getCheckoutId ( pid : string ) {
145
+ if ( ! pid ) return null ;
146
+
147
+ const results = await query ( 'SELECT checkoutId FROM checkout WHERE pid = ?' , pid ) ;
148
+
149
+ return results . length ? results [ 0 ] . checkoutId : null ;
150
+ }
0 commit comments