diff --git a/packages/backend/package.json b/packages/backend/package.json index a3e2a4db..2c0ed6e8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -54,6 +54,7 @@ "lodash.get": "^4.4.2", "luxon": "2.5.2", "memory-cache": "^0.2.0", + "moment": "^2.29.4", "morgan": "^1.10.0", "multer": "1.4.5-lts.1", "nodemailer": "6.7.0", diff --git a/packages/backend/src/db/migrations/20230318220822_add_trial_expiry_date_to_users.ts b/packages/backend/src/db/migrations/20230318220822_add_trial_expiry_date_to_users.ts new file mode 100644 index 00000000..e3fa8799 --- /dev/null +++ b/packages/backend/src/db/migrations/20230318220822_add_trial_expiry_date_to_users.ts @@ -0,0 +1,18 @@ +import { Knex } from 'knex'; +import appConfig from '../../config/app'; + +export async function up(knex: Knex): Promise { + if (!appConfig.isCloud) return; + + return knex.schema.table('users', (table) => { + table.date('trial_expiry_date'); + }); +} + +export async function down(knex: Knex): Promise { + if (!appConfig.isCloud) return; + + return knex.schema.table('users', (table) => { + table.dropColumn('trial_expiry_date'); + }); +} diff --git a/packages/backend/src/models/user.ts b/packages/backend/src/models/user.ts index 57b07e89..fc880ab5 100644 --- a/packages/backend/src/models/user.ts +++ b/packages/backend/src/models/user.ts @@ -1,4 +1,6 @@ import { QueryContext, ModelOptions } from 'objection'; +import moment from 'moment'; +import appConfig from '../config/app'; import Base from './base'; import Connection from './connection'; import Flow from './flow'; @@ -17,6 +19,7 @@ class User extends Base { role: string; resetPasswordToken: string; resetPasswordTokenSentAt: string; + trialExpiryDate: string; connections?: Connection[]; flows?: Flow[]; steps?: Step[]; @@ -133,9 +136,17 @@ class User extends Base { this.password = await bcrypt.hash(this.password, 10); } + async startTrialPeriod() { + this.trialExpiryDate = moment().add(30, 'days').calendar(); + } + async $beforeInsert(queryContext: QueryContext) { await super.$beforeInsert(queryContext); await this.generateHash(); + + if (appConfig.isCloud) { + await this.startTrialPeriod(); + } } async $beforeUpdate(opt: ModelOptions, queryContext: QueryContext) { diff --git a/yarn.lock b/yarn.lock index 2a0b5d32..c5bc147b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12251,6 +12251,11 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + morgan@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"