Skip to content

Commit c61f3ec

Browse files
committed
feat(common): adds sql support
1 parent 87616c5 commit c61f3ec

File tree

3 files changed

+83
-3
lines changed

3 files changed

+83
-3
lines changed

lib/dbs/mysql.ts

+59-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as mysql from 'mysql';
22
import { promisify } from 'util';
33
import { SessionProps, StoreData } from '../../types';
4+
import { trialDays } from '../checkout';
45

56
const MYSQL_CONFIG = {
67
host: process.env.MYSQL_HOST,
@@ -26,12 +27,17 @@ export async function setUser({ user }: SessionProps) {
2627
}
2728

2829
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;
3036
// Only set on app install or update
3137
if (!accessToken || !scope) return null;
3238

3339
const storeHash = context?.split('/')[1] || '';
34-
const storeData: StoreData = { accessToken, scope, storeHash };
40+
const storeData: StoreData = { accessToken, adminId: id, scope, storeHash };
3541

3642
await query('REPLACE INTO stores SET ?', storeData);
3743
}
@@ -91,3 +97,54 @@ export async function getStoreToken(storeHash: string) {
9197
export async function deleteStore({ store_hash: storeHash }: SessionProps) {
9298
await query('DELETE FROM stores WHERE storeHash = ?', storeHash);
9399
}
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+
}

scripts/db.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const storesCreate = query('CREATE TABLE `stores` (\n' +
2626
' `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n' +
2727
' `storeHash` varchar(10) NOT NULL,\n' +
2828
' `accessToken` text,\n' +
29+
' `adminId` int(11) NOT NULL,\n' +
2930
' `scope` text,\n' +
3031
' PRIMARY KEY (`id`),\n' +
3132
' UNIQUE KEY `storeHash` (`storeHash`)\n' +
@@ -42,6 +43,27 @@ const storeUsersCreate = query('CREATE TABLE `storeUsers` (\n' +
4243
') ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;\n'
4344
);
4445

45-
Promise.all([usersCreate, storesCreate]).then(() => {
46+
const planCreate = query('CREATE TABLE `plan` (\n' +
47+
' `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n' +
48+
' `storeHash` varchar(10) NOT NULL,\n' +
49+
' `pid` varchar(20) NOT NULL,\n' +
50+
' `isPaidApp` boolean,\n' +
51+
' `showPaidWelcome` boolean,\n' +
52+
' `trialEndDate` datetime,\n' +
53+
' PRIMARY KEY (`id`),\n' +
54+
' UNIQUE KEY `storeHash` (`storeHash`)\n' +
55+
') ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;'
56+
);
57+
58+
const checkoutCreate = query('CREATE TABLE `checkout` (\n' +
59+
' `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n' +
60+
' `pid` varchar(20) NOT NULL,\n' +
61+
' `checkoutId` varchar(40) NOT NULL,\n' +
62+
' PRIMARY KEY (`id`),\n' +
63+
' UNIQUE KEY `pid` (`pid`)\n' +
64+
') ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;\n'
65+
);
66+
67+
Promise.all([usersCreate, storesCreate, storeUsersCreate, planCreate, checkoutCreate]).then(() => {
4668
connection.end();
4769
});

types/db.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { SessionProps } from './index';
44

55
export interface StoreData {
66
accessToken?: string;
7+
adminId: number;
78
scope?: string;
89
storeHash: string;
910
}

0 commit comments

Comments
 (0)