update dependencies
This commit is contained in:
parent
ad6fbb3b85
commit
11e95cb9c2
54
.eslintrc.js
54
.eslintrc.js
@ -4,15 +4,16 @@ module.exports = {
|
||||
project: 'tsconfig.json',
|
||||
sourceType: 'module',
|
||||
},
|
||||
"plugins": [
|
||||
"nestjs",
|
||||
"@typescript-eslint",
|
||||
"unused-imports"
|
||||
'plugins': [
|
||||
'nestjs',
|
||||
'@typescript-eslint/eslint-plugin',
|
||||
'@typescript-eslint',
|
||||
'unused-imports'
|
||||
],
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:nestjs/recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
'eslint:recommended',
|
||||
'plugin:nestjs/recommended',
|
||||
'plugin:@typescript-eslint/eslint-recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
||||
'prettier',
|
||||
@ -23,8 +24,47 @@ module.exports = {
|
||||
jest: true,
|
||||
},
|
||||
rules: {
|
||||
'@typescript-eslint/no-unsafe-argument': 'warn',
|
||||
'@typescript-eslint/no-unsafe-assignment': 'warn',
|
||||
'@typescript-eslint/no-unsafe-member-access': 'warn',
|
||||
'@typescript-eslint/interface-name-prefix': 'off',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'array-element-newline': ['error', {
|
||||
'ArrayExpression': 'consistent',
|
||||
'ArrayPattern': {
|
||||
'minItems': 3,
|
||||
'multiline': true,
|
||||
}
|
||||
}],
|
||||
'array-bracket-newline': ['error', {
|
||||
'minItems': 3,
|
||||
'multiline': true,
|
||||
}],
|
||||
'indent': [
|
||||
'error',
|
||||
2,
|
||||
{
|
||||
'SwitchCase': 1
|
||||
}
|
||||
],
|
||||
'no-tabs': ['error'],
|
||||
'max-len': ['error', {
|
||||
'code': 100,
|
||||
'ignoreComments': true,
|
||||
'ignoreUrls': true,
|
||||
'ignoreTemplateLiterals': true,
|
||||
'ignoreTrailingComments': true,
|
||||
'ignoreStrings': true,
|
||||
}],
|
||||
'quotes': ['error', 'single', { 'avoidEscape': true }],
|
||||
'comma-dangle': ['error', 'always-multiline'],
|
||||
'linebreak-style': [
|
||||
'error',
|
||||
'unix'
|
||||
],
|
||||
'no-trailing-spaces': 'error',
|
||||
'eol-last': 'error',
|
||||
'unused-imports/no-unused-imports': 'error',
|
||||
},
|
||||
};
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@ -38,3 +38,6 @@ lerna-debug.log*
|
||||
/data
|
||||
/.env
|
||||
/src/schema.gql
|
||||
/data.sqlite
|
||||
/maria_data
|
||||
/pg_data
|
||||
|
||||
112
package.json
112
package.json
@ -25,81 +25,83 @@
|
||||
"typeorm:maria": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -f ormconfig_maria.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apollo/gateway": "^0.27.1",
|
||||
"@nestjs-modules/mailer": "^1.6.0",
|
||||
"@nestjs/common": "^7.6.15",
|
||||
"@nestjs/config": "^0.6.3",
|
||||
"@nestjs/core": "^7.6.15",
|
||||
"@nestjs/graphql": "^7.10.6",
|
||||
"@nestjs/jwt": "^7.2.0",
|
||||
"@nestjs/passport": "^7.1.5",
|
||||
"@nestjs/platform-express": "^7.6.15",
|
||||
"@nestjs/serve-static": "^2.1.4",
|
||||
"@nestjs/typeorm": "^7.1.5",
|
||||
"apollo-server-express": "^2.23.0",
|
||||
"@nestjs/axios": "^0.0.3",
|
||||
"@nestjs/common": "^8.2.4",
|
||||
"@nestjs/config": "^1.1.5",
|
||||
"@nestjs/core": "^8.2.4",
|
||||
"@nestjs/graphql": "^9.1.2",
|
||||
"@nestjs/jwt": "^8.0.0",
|
||||
"@nestjs/passport": "^8.0.1",
|
||||
"@nestjs/platform-express": "^8.2.4",
|
||||
"@nestjs/serve-static": "^2.2.2",
|
||||
"@nestjs/typeorm": "^8.0.2",
|
||||
"apollo-server-express": "^3.6.1",
|
||||
"bcrypt": "^5.0.1",
|
||||
"class-transformer": "^0.4.0",
|
||||
"class-validator": "^0.13.1",
|
||||
"commander": "^7.2.0",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.13.2",
|
||||
"commander": "^8.3.0",
|
||||
"cors": "^2.8.5",
|
||||
"cross-env": "^7.0.3",
|
||||
"dayjs": "^1.10.4",
|
||||
"graphql": "15.5.0",
|
||||
"graphql-redis-subscriptions": "^2.3.1",
|
||||
"graphql-subscriptions": "^1.2.1",
|
||||
"graphql-tools": "^7.0.4",
|
||||
"dayjs": "^1.10.7",
|
||||
"graphql": "15.8.0",
|
||||
"graphql-redis-subscriptions": "^2.4.2",
|
||||
"graphql-subscriptions": "^2.0.0",
|
||||
"graphql-tools": "^8.2.0",
|
||||
"handlebars": "^4.7.7",
|
||||
"html-to-text": "^7.1.1",
|
||||
"inquirer": "^8.0.0",
|
||||
"ioredis": "^4.27.1",
|
||||
"html-to-text": "^8.1.0",
|
||||
"inquirer": "^8.2.0",
|
||||
"ioredis": "^4.28.2",
|
||||
"matomo-tracker": "^2.2.4",
|
||||
"mjml": "^4.9.1",
|
||||
"mysql2": "^2.2.5",
|
||||
"nestjs-console": "^4.0.0",
|
||||
"nestjs-pino": "^1.4.0",
|
||||
"nodemailer": "^6.6.0",
|
||||
"passport": "^0.4.1",
|
||||
"mjml": "^4.11.0",
|
||||
"mysql2": "^2.3.3",
|
||||
"nestjs-console": "^7.0.1",
|
||||
"nestjs-pino": "^2.4.0",
|
||||
"nodemailer": "^6.7.2",
|
||||
"passport": "^0.5.2",
|
||||
"passport-jwt": "^4.0.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"pg": "^8.6.0",
|
||||
"pino-pretty": "^4.7.1",
|
||||
"pg": "^8.7.1",
|
||||
"pino-http": "^6.5.0",
|
||||
"pino-pretty": "^7.3.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"request-ip": "^2.1.3",
|
||||
"rimraf": "^3.0.2",
|
||||
"rxjs": "^6.6.7",
|
||||
"rxjs": "^7.5.1",
|
||||
"serialize-error": "^8.1.0",
|
||||
"sqlite3": "^5.0.2",
|
||||
"typeorm": "^0.2.32"
|
||||
"typeorm": "^0.2.41"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/cli": "^7.6.0",
|
||||
"@nestjs/schematics": "^7.3.1",
|
||||
"@nestjs/testing": "^7.6.15",
|
||||
"@types/bcrypt": "^3.0.1",
|
||||
"@types/express-serve-static-core": "^4.17.19",
|
||||
"@nestjs/cli": "^8.1.6",
|
||||
"@nestjs/schematics": "^8.0.5",
|
||||
"@nestjs/testing": "^8.2.4",
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/express-serve-static-core": "^4.17.27",
|
||||
"@types/handlebars": "^4.1.0",
|
||||
"@types/html-to-text": "^6.0.0",
|
||||
"@types/inquirer": "^7.3.1",
|
||||
"@types/html-to-text": "^8.0.1",
|
||||
"@types/inquirer": "^8.1.3",
|
||||
"@types/jest": "26.0.23",
|
||||
"@types/node": "^15.0.1",
|
||||
"@types/passport-jwt": "^3.0.5",
|
||||
"@types/passport-local": "^1.0.33",
|
||||
"@types/request-ip": "^0.0.35",
|
||||
"@types/node": "^16.11.17",
|
||||
"@types/passport-jwt": "^3.0.6",
|
||||
"@types/passport-local": "^1.0.34",
|
||||
"@types/request-ip": "^0.0.37",
|
||||
"@types/supertest": "^2.0.11",
|
||||
"@typescript-eslint/eslint-plugin": "^4.22.0",
|
||||
"@typescript-eslint/parser": "^4.22.0",
|
||||
"eslint": "^7.25.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
||||
"@typescript-eslint/parser": "^5.8.1",
|
||||
"eslint": "^8.6.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-import": "^2.25.3",
|
||||
"eslint-plugin-nestjs": "^1.2.3",
|
||||
"eslint-plugin-unused-imports": "^2.0.0",
|
||||
"jest": "^26.6.3",
|
||||
"prettier": "^2.2.1",
|
||||
"supertest": "^6.1.3",
|
||||
"ts-jest": "26.5.5",
|
||||
"ts-loader": "^9.1.1",
|
||||
"ts-node": "^9.1.1",
|
||||
"tsconfig-paths": "^3.9.0",
|
||||
"typescript": "^4.2.4"
|
||||
"jest": "^27.4.5",
|
||||
"prettier": "^2.5.1",
|
||||
"supertest": "^6.1.6",
|
||||
"ts-jest": "27.1.2",
|
||||
"ts-loader": "^9.2.6",
|
||||
"ts-node": "^10.4.0",
|
||||
"tsconfig-paths": "^3.12.0",
|
||||
"typescript": "^4.5.4"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { MailerModule } from '@nestjs-modules/mailer'
|
||||
import { HttpModule, RequestMethod } from '@nestjs/common'
|
||||
import { HttpModule } from '@nestjs/axios'
|
||||
import { RequestMethod } from '@nestjs/common'
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config'
|
||||
import { GraphQLModule } from '@nestjs/graphql'
|
||||
import { JwtModule, JwtModuleOptions } from '@nestjs/jwt'
|
||||
@ -9,18 +10,24 @@ import crypto from 'crypto'
|
||||
import { Request } from 'express-serve-static-core'
|
||||
import { IncomingHttpHeaders } from 'http'
|
||||
import { ConsoleModule } from 'nestjs-console'
|
||||
import { LoggerModule, Params as LoggerModuleParams } from 'nestjs-pino/dist'
|
||||
import { LoggerModule, Params as LoggerModuleParams } from 'nestjs-pino'
|
||||
import { join } from 'path'
|
||||
import { serializeError } from 'serialize-error'
|
||||
import { entities } from './entity'
|
||||
|
||||
export const LoggerConfig: LoggerModuleParams = {
|
||||
pinoHttp: {
|
||||
level: process.env.CLI ? 'warn' : process.env.NODE_ENV !== 'production' ? 'debug' : 'info',
|
||||
prettyPrint: process.env.NODE_ENV !== 'production' || process.env.CLI ? {
|
||||
translateTime: true,
|
||||
colorize: true,
|
||||
ignore: 'pid,hostname,req,res',
|
||||
} : false,
|
||||
serializers: {
|
||||
error: serializeError,
|
||||
},
|
||||
transport: {
|
||||
options: {
|
||||
ignore: 'req,res,pid,hostname',
|
||||
translateTime: true,
|
||||
},
|
||||
target: process.env.NODE_ENV !== 'production' || process.env.CLI ? 'pino-pretty' : undefined,
|
||||
},
|
||||
},
|
||||
exclude: [
|
||||
{
|
||||
@ -30,7 +37,7 @@ export const LoggerConfig: LoggerModuleParams = {
|
||||
{
|
||||
method: RequestMethod.ALL,
|
||||
path: 'favicon.ico',
|
||||
}
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
@ -42,9 +49,7 @@ export const imports = [
|
||||
}),
|
||||
ServeStaticModule.forRoot({
|
||||
rootPath: join(__dirname, '..', 'public'),
|
||||
exclude: [
|
||||
|
||||
]
|
||||
exclude: [],
|
||||
}),
|
||||
ConfigModule.forRoot({
|
||||
load: [
|
||||
@ -53,7 +58,7 @@ export const imports = [
|
||||
LOCALES_PATH: join(process.cwd(), 'locales'),
|
||||
SECRET_KEY: process.env.SECRET_KEY || crypto.randomBytes(20).toString('hex'),
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
}),
|
||||
JwtModule.registerAsync({
|
||||
@ -64,7 +69,7 @@ export const imports = [
|
||||
signOptions: {
|
||||
expiresIn: '4h',
|
||||
},
|
||||
})
|
||||
}),
|
||||
}),
|
||||
LoggerModule.forRoot(LoggerConfig),
|
||||
GraphQLModule.forRoot({
|
||||
@ -72,8 +77,9 @@ export const imports = [
|
||||
definitions: {
|
||||
outputAs: 'class',
|
||||
},
|
||||
introspection: true,
|
||||
playground: true,
|
||||
sortSchema: true,
|
||||
introspection: process.env.NODE_ENV !== 'production',
|
||||
playground: process.env.NODE_ENV !== 'production',
|
||||
installSubscriptionHandlers: true,
|
||||
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
|
||||
// to allow guards on resolver props https://github.com/nestjs/graphql/issues/295
|
||||
@ -94,8 +100,8 @@ export const imports = [
|
||||
|
||||
return {
|
||||
req: {
|
||||
headers
|
||||
} as Request
|
||||
headers,
|
||||
} as Request,
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,7 +113,7 @@ export const imports = [
|
||||
inject: [ConfigService],
|
||||
useFactory: (configService: ConfigService): TypeOrmModuleOptions => {
|
||||
const type: any = configService.get<string>('DATABASE_DRIVER', 'sqlite')
|
||||
let migrationFolder
|
||||
let migrationFolder: string
|
||||
|
||||
switch (type) {
|
||||
case 'cockroachdb':
|
||||
@ -138,9 +144,7 @@ export const imports = [
|
||||
entityPrefix: configService.get<string>('DATABASE_TABLE_PREFIX', ''),
|
||||
logging: configService.get<string>('DATABASE_LOGGING', 'false') === 'true',
|
||||
entities,
|
||||
migrations: [
|
||||
`${__dirname}/**/migrations/${migrationFolder}/**/*{.ts,.js}`,
|
||||
],
|
||||
migrations: [`${__dirname}/**/migrations/${migrationFolder}/**/*{.ts,.js}`],
|
||||
migrationsRun: configService.get<boolean>('DATABASE_MIGRATE', true),
|
||||
})
|
||||
},
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { UserCommand } from './user.command'
|
||||
|
||||
export const commands = [
|
||||
UserCommand,
|
||||
]
|
||||
export const commands = [UserCommand]
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
import inquirer from 'inquirer'
|
||||
import { Command, Console } from 'nestjs-console'
|
||||
import { matchType, validatePassword } from '../config/fields'
|
||||
import { UserCreateInput } from '../dto/user/user.create.input'
|
||||
import { UserCreateService } from '../service/user/user.create.service'
|
||||
|
||||
@Console({
|
||||
name: 'user',
|
||||
description: 'handle instance users'
|
||||
command: 'user',
|
||||
description: 'handle instance users',
|
||||
})
|
||||
export class UserCommand {
|
||||
constructor(
|
||||
@ -17,7 +18,7 @@ export class UserCommand {
|
||||
command: 'create',
|
||||
})
|
||||
async create(): Promise<void> {
|
||||
const answers = await inquirer.prompt([
|
||||
const answers = await inquirer.prompt<UserCreateInput>([
|
||||
{
|
||||
type: 'input',
|
||||
name: 'username',
|
||||
@ -46,8 +47,8 @@ export class UserCommand {
|
||||
name: 'create',
|
||||
message: current => {
|
||||
return `create user ${current.username} with email ${current.email}`
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
])
|
||||
|
||||
await this.createUser.create(answers)
|
||||
|
||||
@ -2,4 +2,6 @@
|
||||
export type roleType = 'user' | 'admin' | 'superuser'
|
||||
export type rolesType = roleType[]
|
||||
|
||||
export const roles: rolesType = ['user', 'admin', 'superuser']
|
||||
export const roles: rolesType = [
|
||||
'user', 'admin', 'superuser',
|
||||
]
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { HealthController } from './health.controller'
|
||||
|
||||
export const controllers = [
|
||||
HealthController,
|
||||
]
|
||||
export const controllers = [HealthController]
|
||||
|
||||
@ -3,7 +3,7 @@ import { Field, ObjectType } from '@nestjs/graphql'
|
||||
@ObjectType('Deleted')
|
||||
export class DeletedModel {
|
||||
@Field()
|
||||
id: string
|
||||
id: string
|
||||
|
||||
constructor(id: string) {
|
||||
this.id = id
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import { Field, ID, InputType } from '@nestjs/graphql'
|
||||
import { FormFieldLogicInput } from './form.field.logic.input'
|
||||
import { FormFieldLogicModel } from './form.field.logic.model'
|
||||
import { FormFieldOptionInput } from './form.field.option.input'
|
||||
import { FormFieldRatingInput } from './form.field.rating.input'
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { Field, ID, InterfaceType, ObjectType } from '@nestjs/graphql'
|
||||
import { Field, ID, ObjectType } from '@nestjs/graphql'
|
||||
import { FormNotificationEntity } from '../../entity/form.notification.entity'
|
||||
|
||||
@ObjectType('FormNotification')
|
||||
|
||||
@ -5,16 +5,16 @@ import { FormModel } from './form.model'
|
||||
@ObjectType('FormPager')
|
||||
export class FormPagerModel {
|
||||
@Field(() => [FormModel])
|
||||
entries: FormModel[]
|
||||
entries: FormModel[]
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
total: number
|
||||
total: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
limit: number
|
||||
limit: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
start: number
|
||||
start: number
|
||||
|
||||
constructor(entries: FormModel[], total: number, limit: number, start: number) {
|
||||
this.entries = entries
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import { Field, ID, ObjectType } from '@nestjs/graphql'
|
||||
import { randomBytes } from 'crypto'
|
||||
import { PageEntity } from '../../entity/page.entity'
|
||||
import { ButtonModel } from './button.model'
|
||||
|
||||
|
||||
@ -5,16 +5,16 @@ import { SettingModel } from './setting.model'
|
||||
@ObjectType('SettingPager')
|
||||
export class SettingPagerModel {
|
||||
@Field(() => [SettingModel])
|
||||
entries: SettingModel[]
|
||||
entries: SettingModel[]
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
total: number
|
||||
total: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
limit: number
|
||||
limit: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
start: number
|
||||
start: number
|
||||
|
||||
constructor(entries: SettingModel[], total: number, limit: number, start: number) {
|
||||
this.entries = entries
|
||||
|
||||
@ -4,10 +4,10 @@ import { GeoLocationEmbedded } from '../../entity/embedded/geo.location.embedded
|
||||
@ObjectType('GeoLocation')
|
||||
export class GeoLocationModel {
|
||||
@Field({ nullable: true })
|
||||
country?: string
|
||||
country?: string
|
||||
|
||||
@Field({ nullable: true })
|
||||
city?: string
|
||||
city?: string
|
||||
|
||||
constructor(geo: GeoLocationEmbedded) {
|
||||
this.country = geo.country
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { Field, Float, ID, ObjectType } from '@nestjs/graphql'
|
||||
import { Field, ID, ObjectType } from '@nestjs/graphql'
|
||||
import { SubmissionEntity } from '../../entity/submission.entity'
|
||||
import { DeviceModel } from './device.model'
|
||||
import { GeoLocationModel } from './geo.location.model'
|
||||
|
||||
@ -5,16 +5,16 @@ import { SubmissionModel } from './submission.model'
|
||||
@ObjectType('SubmissionPager')
|
||||
export class SubmissionPagerModel {
|
||||
@Field(() => [SubmissionModel])
|
||||
entries: SubmissionModel[]
|
||||
entries: SubmissionModel[]
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
total: number
|
||||
total: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
limit: number
|
||||
limit: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
start: number
|
||||
start: number
|
||||
|
||||
constructor(entries: SubmissionModel[], total: number, limit: number, start: number) {
|
||||
this.entries = entries
|
||||
|
||||
@ -6,23 +6,23 @@ export class UserCreateInput {
|
||||
@Field()
|
||||
@MinLength(2)
|
||||
@MaxLength(50)
|
||||
username: string
|
||||
username: string
|
||||
|
||||
@Field()
|
||||
@IsEmail()
|
||||
@IsNotEmpty()
|
||||
email: string
|
||||
email: string
|
||||
|
||||
@Field()
|
||||
@MinLength(5)
|
||||
password: string
|
||||
password: string
|
||||
|
||||
@Field({ nullable: true })
|
||||
firstName?: string
|
||||
firstName?: string
|
||||
|
||||
@Field({ nullable: true })
|
||||
lastName?: string
|
||||
lastName?: string
|
||||
|
||||
@Field({ nullable: true })
|
||||
language?: string
|
||||
language?: string
|
||||
}
|
||||
|
||||
@ -5,16 +5,16 @@ import { UserModel } from './user.model'
|
||||
@ObjectType('UserPager')
|
||||
export class UserPagerModel {
|
||||
@Field(() => [UserModel])
|
||||
entries: UserModel[]
|
||||
entries: UserModel[]
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
total: number
|
||||
total: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
limit: number
|
||||
limit: number
|
||||
|
||||
@Field(() => GraphQLInt)
|
||||
start: number
|
||||
start: number
|
||||
|
||||
constructor(entries: UserModel[], total: number, limit: number, start: number) {
|
||||
this.entries = entries
|
||||
|
||||
@ -20,6 +20,7 @@ export class UserUpdateInput {
|
||||
@Field({ nullable: true })
|
||||
readonly password: string
|
||||
|
||||
// TODO validate
|
||||
@Field(() => [String], { nullable: true })
|
||||
readonly roles: string[]
|
||||
|
||||
|
||||
@ -3,11 +3,11 @@ import { ColorsEmbedded } from './colors.embedded'
|
||||
|
||||
export class DesignEmbedded {
|
||||
@Column(() => ColorsEmbedded)
|
||||
colors: ColorsEmbedded = new ColorsEmbedded()
|
||||
colors: ColorsEmbedded = new ColorsEmbedded()
|
||||
|
||||
@Column({ nullable: true })
|
||||
font?: string
|
||||
font?: string
|
||||
|
||||
@Column({ nullable: true })
|
||||
layout?: string
|
||||
layout?: string
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import {
|
||||
ManyToOne,
|
||||
OneToMany,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm'
|
||||
import { AnalyticsEmbedded } from './embedded/analytics.embedded'
|
||||
import { DesignEmbedded } from './embedded/design.embedded'
|
||||
|
||||
@ -4,8 +4,9 @@ import {
|
||||
Entity,
|
||||
ManyToOne,
|
||||
OneToMany,
|
||||
PrimaryGeneratedColumn, RelationId,
|
||||
UpdateDateColumn
|
||||
PrimaryGeneratedColumn,
|
||||
RelationId,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm'
|
||||
import { DeviceEmbedded } from './embedded/device.embedded'
|
||||
import { GeoLocationEmbedded } from './embedded/geo.location.embedded'
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
|
||||
import { FormEntity } from './form.entity'
|
||||
import { FormFieldEntity } from './form.field.entity'
|
||||
import { SubmissionEntity } from './submission.entity'
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import {
|
||||
ManyToOne,
|
||||
OneToMany,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm'
|
||||
import { DeviceEmbedded } from './embedded/device.embedded'
|
||||
import { GeoLocationEmbedded } from './embedded/geo.location.embedded'
|
||||
|
||||
@ -1,22 +1,29 @@
|
||||
import { ExecutionContext, Injectable } from '@nestjs/common'
|
||||
import { GqlExecutionContext } from '@nestjs/graphql'
|
||||
import { AuthGuard } from '@nestjs/passport'
|
||||
import { UserEntity } from '../entity/user.entity'
|
||||
import { ContextCache } from '../resolver/context.cache'
|
||||
|
||||
@Injectable()
|
||||
export class GqlAuthGuard extends AuthGuard('jwt') {
|
||||
getRequest(context: ExecutionContext) {
|
||||
const ctx = GqlExecutionContext.create(context);
|
||||
if (!ctx.getContext().cache) {
|
||||
ctx.getContext().cache = new ContextCache()
|
||||
if (context.getType<any>() === 'graphql') {
|
||||
const ctx = GqlExecutionContext.create(context);
|
||||
|
||||
if (!ctx.getContext().cache) {
|
||||
ctx.getContext().cache = new ContextCache()
|
||||
}
|
||||
return ctx.getContext().req;
|
||||
}
|
||||
return ctx.getContext().req;
|
||||
|
||||
return context.switchToHttp().getRequest()
|
||||
}
|
||||
|
||||
handleRequest(err, user) {
|
||||
handleRequest<T = UserEntity>(err, user: T): T {
|
||||
if (err) {
|
||||
throw new Error('invalid token')
|
||||
}
|
||||
|
||||
return user
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
import { NestApplicationOptions, ValidationPipe } from '@nestjs/common'
|
||||
import { NestFactory } from '@nestjs/core'
|
||||
import cors from 'cors'
|
||||
import { Logger, PinoLogger } from 'nestjs-pino/dist'
|
||||
import { Logger, PinoLogger } from 'nestjs-pino'
|
||||
import { LoggerConfig } from './app.imports'
|
||||
import { AppModule } from './app.module'
|
||||
|
||||
(async () => {
|
||||
const options: NestApplicationOptions = {
|
||||
logger: new Logger(new PinoLogger(LoggerConfig), {}),
|
||||
bufferLogs: true,
|
||||
}
|
||||
|
||||
const app = await NestFactory.create(AppModule, options)
|
||||
|
||||
@ -1,74 +1,74 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class initial1619723437787 implements MigrationInterface {
|
||||
name = 'initial1619723437787'
|
||||
name = 'initial1619723437787'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query("CREATE TABLE `form_field_logic` (`id` int NOT NULL AUTO_INCREMENT, `formula` varchar(255) NOT NULL, `action` varchar(10) NOT NULL, `visible` tinyint NULL, `require` tinyint NULL, `disable` tinyint NULL, `enabled` tinyint NOT NULL, `fieldId` int NULL, `jumpToId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form_field_option` (`id` int NOT NULL AUTO_INCREMENT, `key` varchar(255) NULL, `title` varchar(255) NULL, `value` varchar(255) NOT NULL, `fieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form_field` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `description` text NOT NULL, `slug` varchar(255) NULL, `required` tinyint NOT NULL, `disabled` tinyint NOT NULL, `type` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, `formId` int NULL, `ratingSteps` int NULL, `ratingShape` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form_hook` (`id` int NOT NULL AUTO_INCREMENT, `enabled` tinyint NOT NULL, `url` varchar(255) NOT NULL, `format` varchar(255) NULL, `formId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form_notification` (`id` int NOT NULL AUTO_INCREMENT, `subject` varchar(255) NULL, `htmlTemplate` varchar(255) NULL, `enabled` tinyint NOT NULL, `toEmail` varchar(255) NULL, `fromEmail` varchar(255) NULL, `formId` int NULL, `fromFieldId` int NULL, `toFieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `page_button` (`id` int NOT NULL AUTO_INCREMENT, `url` varchar(255) NULL, `action` varchar(255) NULL, `text` varchar(255) NOT NULL, `bgColor` varchar(255) NULL, `activeColor` varchar(255) NULL, `color` varchar(255) NULL, `pageId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `page` (`id` int NOT NULL AUTO_INCREMENT, `show` tinyint NOT NULL, `title` varchar(255) NULL, `paragraph` text NULL, `buttonText` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `submission_field` (`id` int NOT NULL AUTO_INCREMENT, `fieldType` varchar(255) NOT NULL, `fieldValue` varchar(255) NOT NULL, `submissionId` int NULL, `fieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT, `firstName` varchar(255) NULL, `lastName` varchar(255) NULL, `email` varchar(255) NOT NULL, `username` varchar(255) NOT NULL, `passwordHash` varchar(255) NOT NULL, `salt` varchar(255) NULL, `provider` varchar(255) NOT NULL, `roles` text NOT NULL, `language` varchar(255) NOT NULL, `resetPasswordToken` varchar(255) NULL, `resetPasswordExpires` datetime NULL, `token` varchar(255) NULL, `apiKey` varchar(255) NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), UNIQUE INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` (`email`), UNIQUE INDEX `IDX_78a916df40e02a9deb1c4b75ed` (`username`), PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form_visitor` (`id` int NOT NULL AUTO_INCREMENT, `referrer` varchar(255) NULL, `ipAddr` varchar(255) NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `formId` int NULL, `geoLocationCountry` varchar(255) NULL, `geoLocationCity` varchar(255) NULL, `deviceLanguage` varchar(255) NULL, `deviceType` varchar(255) NULL, `deviceName` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `submission` (`id` int NOT NULL AUTO_INCREMENT, `ipAddr` varchar(255) NOT NULL, `tokenHash` varchar(255) NOT NULL, `timeElapsed` decimal NOT NULL, `percentageComplete` decimal NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `formId` int NULL, `visitorId` int NULL, `userId` int NULL, `geoLocationCountry` varchar(255) NULL, `geoLocationCity` varchar(255) NULL, `deviceLanguage` varchar(255) NULL, `deviceType` varchar(255) NULL, `deviceName` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("CREATE TABLE `form` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `language` varchar(10) NOT NULL, `showFooter` tinyint NOT NULL, `isLive` tinyint NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `adminId` int NULL, `startPageId` int NULL, `endPageId` int NULL, `analyticsGacode` varchar(255) NULL, `designFont` varchar(255) NULL, `designColorsBackground` varchar(255) NULL, `designColorsQuestion` varchar(255) NULL, `designColorsAnswer` varchar(255) NULL, `designColorsButton` varchar(255) NULL, `designColorsButtonactive` varchar(255) NULL, `designColorsButtontext` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB");
|
||||
await queryRunner.query("ALTER TABLE `form_field_logic` ADD CONSTRAINT `FK_6098b83f6759445d8cfdd03d545` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_field_logic` ADD CONSTRAINT `FK_4a8019f2b753cfb3216dc3001a6` FOREIGN KEY (`jumpToId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_field_option` ADD CONSTRAINT `FK_c4484ad12c2c56db31dffdbfe97` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_field` ADD CONSTRAINT `FK_2d83d8a334dd66445db13f92b77` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_hook` ADD CONSTRAINT `FK_bbeb4d224d8857fd5a458538a30` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` ADD CONSTRAINT `FK_a9ed55144108ded893b502d6321` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` ADD CONSTRAINT `FK_0876741ce2acdaee4553d7a3bbd` FOREIGN KEY (`fromFieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` ADD CONSTRAINT `FK_4915ebae53e09b732322d0ff6ed` FOREIGN KEY (`toFieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `page_button` ADD CONSTRAINT `FK_d9f099286b75fa0034dcd8cf7c2` FOREIGN KEY (`pageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `submission_field` ADD CONSTRAINT `FK_16fae661ce5b10f27abe2e524a0` FOREIGN KEY (`submissionId`) REFERENCES `submission`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `submission_field` ADD CONSTRAINT `FK_5befa92da2370b7eb1cab6ae30a` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form_visitor` ADD CONSTRAINT `FK_72ade6c3a3e55d1fce94300f8b6` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `submission` ADD CONSTRAINT `FK_6090e1d5cbf3433ffd14e3b53e7` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `submission` ADD CONSTRAINT `FK_95b73c7faf2c199f005fda5e8c8` FOREIGN KEY (`visitorId`) REFERENCES `form_visitor`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `submission` ADD CONSTRAINT `FK_7bd626272858ef6464aa2579094` FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form` ADD CONSTRAINT `FK_a7cb33580bca2b362e5e34fdfcd` FOREIGN KEY (`adminId`) REFERENCES `user`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form` ADD CONSTRAINT `FK_023d9cf1d97e93facc96c86ca70` FOREIGN KEY (`startPageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
await queryRunner.query("ALTER TABLE `form` ADD CONSTRAINT `FK_e5d158932e43cfbf9958931ee01` FOREIGN KEY (`endPageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION");
|
||||
}
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('CREATE TABLE `form_field_logic` (`id` int NOT NULL AUTO_INCREMENT, `formula` varchar(255) NOT NULL, `action` varchar(10) NOT NULL, `visible` tinyint NULL, `require` tinyint NULL, `disable` tinyint NULL, `enabled` tinyint NOT NULL, `fieldId` int NULL, `jumpToId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form_field_option` (`id` int NOT NULL AUTO_INCREMENT, `key` varchar(255) NULL, `title` varchar(255) NULL, `value` varchar(255) NOT NULL, `fieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form_field` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `description` text NOT NULL, `slug` varchar(255) NULL, `required` tinyint NOT NULL, `disabled` tinyint NOT NULL, `type` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, `formId` int NULL, `ratingSteps` int NULL, `ratingShape` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form_hook` (`id` int NOT NULL AUTO_INCREMENT, `enabled` tinyint NOT NULL, `url` varchar(255) NOT NULL, `format` varchar(255) NULL, `formId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form_notification` (`id` int NOT NULL AUTO_INCREMENT, `subject` varchar(255) NULL, `htmlTemplate` varchar(255) NULL, `enabled` tinyint NOT NULL, `toEmail` varchar(255) NULL, `fromEmail` varchar(255) NULL, `formId` int NULL, `fromFieldId` int NULL, `toFieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `page_button` (`id` int NOT NULL AUTO_INCREMENT, `url` varchar(255) NULL, `action` varchar(255) NULL, `text` varchar(255) NOT NULL, `bgColor` varchar(255) NULL, `activeColor` varchar(255) NULL, `color` varchar(255) NULL, `pageId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `page` (`id` int NOT NULL AUTO_INCREMENT, `show` tinyint NOT NULL, `title` varchar(255) NULL, `paragraph` text NULL, `buttonText` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `submission_field` (`id` int NOT NULL AUTO_INCREMENT, `fieldType` varchar(255) NOT NULL, `fieldValue` varchar(255) NOT NULL, `submissionId` int NULL, `fieldId` int NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT, `firstName` varchar(255) NULL, `lastName` varchar(255) NULL, `email` varchar(255) NOT NULL, `username` varchar(255) NOT NULL, `passwordHash` varchar(255) NOT NULL, `salt` varchar(255) NULL, `provider` varchar(255) NOT NULL, `roles` text NOT NULL, `language` varchar(255) NOT NULL, `resetPasswordToken` varchar(255) NULL, `resetPasswordExpires` datetime NULL, `token` varchar(255) NULL, `apiKey` varchar(255) NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), UNIQUE INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` (`email`), UNIQUE INDEX `IDX_78a916df40e02a9deb1c4b75ed` (`username`), PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form_visitor` (`id` int NOT NULL AUTO_INCREMENT, `referrer` varchar(255) NULL, `ipAddr` varchar(255) NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `formId` int NULL, `geoLocationCountry` varchar(255) NULL, `geoLocationCity` varchar(255) NULL, `deviceLanguage` varchar(255) NULL, `deviceType` varchar(255) NULL, `deviceName` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `submission` (`id` int NOT NULL AUTO_INCREMENT, `ipAddr` varchar(255) NOT NULL, `tokenHash` varchar(255) NOT NULL, `timeElapsed` decimal NOT NULL, `percentageComplete` decimal NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `formId` int NULL, `visitorId` int NULL, `userId` int NULL, `geoLocationCountry` varchar(255) NULL, `geoLocationCity` varchar(255) NULL, `deviceLanguage` varchar(255) NULL, `deviceType` varchar(255) NULL, `deviceName` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('CREATE TABLE `form` (`id` int NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `language` varchar(10) NOT NULL, `showFooter` tinyint NOT NULL, `isLive` tinyint NOT NULL, `created` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `lastModified` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `adminId` int NULL, `startPageId` int NULL, `endPageId` int NULL, `analyticsGacode` varchar(255) NULL, `designFont` varchar(255) NULL, `designColorsBackground` varchar(255) NULL, `designColorsQuestion` varchar(255) NULL, `designColorsAnswer` varchar(255) NULL, `designColorsButton` varchar(255) NULL, `designColorsButtonactive` varchar(255) NULL, `designColorsButtontext` varchar(255) NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB');
|
||||
await queryRunner.query('ALTER TABLE `form_field_logic` ADD CONSTRAINT `FK_6098b83f6759445d8cfdd03d545` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_field_logic` ADD CONSTRAINT `FK_4a8019f2b753cfb3216dc3001a6` FOREIGN KEY (`jumpToId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_field_option` ADD CONSTRAINT `FK_c4484ad12c2c56db31dffdbfe97` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_field` ADD CONSTRAINT `FK_2d83d8a334dd66445db13f92b77` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_hook` ADD CONSTRAINT `FK_bbeb4d224d8857fd5a458538a30` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` ADD CONSTRAINT `FK_a9ed55144108ded893b502d6321` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` ADD CONSTRAINT `FK_0876741ce2acdaee4553d7a3bbd` FOREIGN KEY (`fromFieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` ADD CONSTRAINT `FK_4915ebae53e09b732322d0ff6ed` FOREIGN KEY (`toFieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `page_button` ADD CONSTRAINT `FK_d9f099286b75fa0034dcd8cf7c2` FOREIGN KEY (`pageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `submission_field` ADD CONSTRAINT `FK_16fae661ce5b10f27abe2e524a0` FOREIGN KEY (`submissionId`) REFERENCES `submission`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `submission_field` ADD CONSTRAINT `FK_5befa92da2370b7eb1cab6ae30a` FOREIGN KEY (`fieldId`) REFERENCES `form_field`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form_visitor` ADD CONSTRAINT `FK_72ade6c3a3e55d1fce94300f8b6` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `submission` ADD CONSTRAINT `FK_6090e1d5cbf3433ffd14e3b53e7` FOREIGN KEY (`formId`) REFERENCES `form`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `submission` ADD CONSTRAINT `FK_95b73c7faf2c199f005fda5e8c8` FOREIGN KEY (`visitorId`) REFERENCES `form_visitor`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `submission` ADD CONSTRAINT `FK_7bd626272858ef6464aa2579094` FOREIGN KEY (`userId`) REFERENCES `user`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form` ADD CONSTRAINT `FK_a7cb33580bca2b362e5e34fdfcd` FOREIGN KEY (`adminId`) REFERENCES `user`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form` ADD CONSTRAINT `FK_023d9cf1d97e93facc96c86ca70` FOREIGN KEY (`startPageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE `form` ADD CONSTRAINT `FK_e5d158932e43cfbf9958931ee01` FOREIGN KEY (`endPageId`) REFERENCES `page`(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query("ALTER TABLE `form` DROP FOREIGN KEY `FK_e5d158932e43cfbf9958931ee01`");
|
||||
await queryRunner.query("ALTER TABLE `form` DROP FOREIGN KEY `FK_023d9cf1d97e93facc96c86ca70`");
|
||||
await queryRunner.query("ALTER TABLE `form` DROP FOREIGN KEY `FK_a7cb33580bca2b362e5e34fdfcd`");
|
||||
await queryRunner.query("ALTER TABLE `submission` DROP FOREIGN KEY `FK_7bd626272858ef6464aa2579094`");
|
||||
await queryRunner.query("ALTER TABLE `submission` DROP FOREIGN KEY `FK_95b73c7faf2c199f005fda5e8c8`");
|
||||
await queryRunner.query("ALTER TABLE `submission` DROP FOREIGN KEY `FK_6090e1d5cbf3433ffd14e3b53e7`");
|
||||
await queryRunner.query("ALTER TABLE `form_visitor` DROP FOREIGN KEY `FK_72ade6c3a3e55d1fce94300f8b6`");
|
||||
await queryRunner.query("ALTER TABLE `submission_field` DROP FOREIGN KEY `FK_5befa92da2370b7eb1cab6ae30a`");
|
||||
await queryRunner.query("ALTER TABLE `submission_field` DROP FOREIGN KEY `FK_16fae661ce5b10f27abe2e524a0`");
|
||||
await queryRunner.query("ALTER TABLE `page_button` DROP FOREIGN KEY `FK_d9f099286b75fa0034dcd8cf7c2`");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_4915ebae53e09b732322d0ff6ed`");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_0876741ce2acdaee4553d7a3bbd`");
|
||||
await queryRunner.query("ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_a9ed55144108ded893b502d6321`");
|
||||
await queryRunner.query("ALTER TABLE `form_hook` DROP FOREIGN KEY `FK_bbeb4d224d8857fd5a458538a30`");
|
||||
await queryRunner.query("ALTER TABLE `form_field` DROP FOREIGN KEY `FK_2d83d8a334dd66445db13f92b77`");
|
||||
await queryRunner.query("ALTER TABLE `form_field_option` DROP FOREIGN KEY `FK_c4484ad12c2c56db31dffdbfe97`");
|
||||
await queryRunner.query("ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_4a8019f2b753cfb3216dc3001a6`");
|
||||
await queryRunner.query("ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_6098b83f6759445d8cfdd03d545`");
|
||||
await queryRunner.query("DROP TABLE `form`");
|
||||
await queryRunner.query("DROP TABLE `submission`");
|
||||
await queryRunner.query("DROP TABLE `form_visitor`");
|
||||
await queryRunner.query("DROP INDEX `IDX_78a916df40e02a9deb1c4b75ed` ON `user`");
|
||||
await queryRunner.query("DROP INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` ON `user`");
|
||||
await queryRunner.query("DROP TABLE `user`");
|
||||
await queryRunner.query("DROP TABLE `submission_field`");
|
||||
await queryRunner.query("DROP TABLE `page`");
|
||||
await queryRunner.query("DROP TABLE `page_button`");
|
||||
await queryRunner.query("DROP TABLE `form_notification`");
|
||||
await queryRunner.query("DROP TABLE `form_hook`");
|
||||
await queryRunner.query("DROP TABLE `form_field`");
|
||||
await queryRunner.query("DROP TABLE `form_field_option`");
|
||||
await queryRunner.query("DROP TABLE `form_field_logic`");
|
||||
}
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE `form` DROP FOREIGN KEY `FK_e5d158932e43cfbf9958931ee01`');
|
||||
await queryRunner.query('ALTER TABLE `form` DROP FOREIGN KEY `FK_023d9cf1d97e93facc96c86ca70`');
|
||||
await queryRunner.query('ALTER TABLE `form` DROP FOREIGN KEY `FK_a7cb33580bca2b362e5e34fdfcd`');
|
||||
await queryRunner.query('ALTER TABLE `submission` DROP FOREIGN KEY `FK_7bd626272858ef6464aa2579094`');
|
||||
await queryRunner.query('ALTER TABLE `submission` DROP FOREIGN KEY `FK_95b73c7faf2c199f005fda5e8c8`');
|
||||
await queryRunner.query('ALTER TABLE `submission` DROP FOREIGN KEY `FK_6090e1d5cbf3433ffd14e3b53e7`');
|
||||
await queryRunner.query('ALTER TABLE `form_visitor` DROP FOREIGN KEY `FK_72ade6c3a3e55d1fce94300f8b6`');
|
||||
await queryRunner.query('ALTER TABLE `submission_field` DROP FOREIGN KEY `FK_5befa92da2370b7eb1cab6ae30a`');
|
||||
await queryRunner.query('ALTER TABLE `submission_field` DROP FOREIGN KEY `FK_16fae661ce5b10f27abe2e524a0`');
|
||||
await queryRunner.query('ALTER TABLE `page_button` DROP FOREIGN KEY `FK_d9f099286b75fa0034dcd8cf7c2`');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_4915ebae53e09b732322d0ff6ed`');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_0876741ce2acdaee4553d7a3bbd`');
|
||||
await queryRunner.query('ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_a9ed55144108ded893b502d6321`');
|
||||
await queryRunner.query('ALTER TABLE `form_hook` DROP FOREIGN KEY `FK_bbeb4d224d8857fd5a458538a30`');
|
||||
await queryRunner.query('ALTER TABLE `form_field` DROP FOREIGN KEY `FK_2d83d8a334dd66445db13f92b77`');
|
||||
await queryRunner.query('ALTER TABLE `form_field_option` DROP FOREIGN KEY `FK_c4484ad12c2c56db31dffdbfe97`');
|
||||
await queryRunner.query('ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_4a8019f2b753cfb3216dc3001a6`');
|
||||
await queryRunner.query('ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_6098b83f6759445d8cfdd03d545`');
|
||||
await queryRunner.query('DROP TABLE `form`');
|
||||
await queryRunner.query('DROP TABLE `submission`');
|
||||
await queryRunner.query('DROP TABLE `form_visitor`');
|
||||
await queryRunner.query('DROP INDEX `IDX_78a916df40e02a9deb1c4b75ed` ON `user`');
|
||||
await queryRunner.query('DROP INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` ON `user`');
|
||||
await queryRunner.query('DROP TABLE `user`');
|
||||
await queryRunner.query('DROP TABLE `submission_field`');
|
||||
await queryRunner.query('DROP TABLE `page`');
|
||||
await queryRunner.query('DROP TABLE `page_button`');
|
||||
await queryRunner.query('DROP TABLE `form_notification`');
|
||||
await queryRunner.query('DROP TABLE `form_hook`');
|
||||
await queryRunner.query('DROP TABLE `form_field`');
|
||||
await queryRunner.query('DROP TABLE `form_field_option`');
|
||||
await queryRunner.query('DROP TABLE `form_field_logic`');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class layout1621078163528 implements MigrationInterface {
|
||||
name = 'layout1621078163528'
|
||||
name = 'layout1621078163528'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query("ALTER TABLE `form` ADD `designLayout` varchar(255) NULL");
|
||||
}
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE `form` ADD `designLayout` varchar(255) NULL');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query("ALTER TABLE `form` DROP COLUMN `designLayout`");
|
||||
}
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE `form` DROP COLUMN `designLayout`');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,59 +1,59 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class initial1619723437787 implements MigrationInterface {
|
||||
name = 'initial1619723437787'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TABLE "form_field_logic" ("id" SERIAL NOT NULL, "formula" character varying NOT NULL, "action" character varying(10) NOT NULL, "visible" boolean, "require" boolean, "disable" boolean, "enabled" boolean NOT NULL, "fieldId" integer, "jumpToId" integer, CONSTRAINT "PK_c40e7f583854ff1b60900d8cf1b" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_field_option" ("id" SERIAL NOT NULL, "key" character varying, "title" character varying, "value" character varying NOT NULL, "fieldId" integer, CONSTRAINT "PK_812955356e516819e37b64bf39b" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_field" ("id" SERIAL NOT NULL, "title" character varying NOT NULL, "description" text NOT NULL, "slug" character varying, "required" boolean NOT NULL, "disabled" boolean NOT NULL, "type" character varying NOT NULL, "value" character varying NOT NULL, "formId" integer, "ratingSteps" integer, "ratingShape" character varying, CONSTRAINT "PK_135904ddb60085b07254ea4f485" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_hook" ("id" SERIAL NOT NULL, "enabled" boolean NOT NULL, "url" character varying NOT NULL, "format" character varying, "formId" integer, CONSTRAINT "PK_4b63bd9ff09f7b3e5c4a41fcbec" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_notification" ("id" SERIAL NOT NULL, "subject" character varying, "htmlTemplate" character varying, "enabled" boolean NOT NULL, "toEmail" character varying, "fromEmail" character varying, "formId" integer, "fromFieldId" integer, "toFieldId" integer, CONSTRAINT "PK_935306529aed07c9f6628f6e24f" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "page_button" ("id" SERIAL NOT NULL, "url" character varying, "action" character varying, "text" character varying NOT NULL, "bgColor" character varying, "activeColor" character varying, "color" character varying, "pageId" integer, CONSTRAINT "PK_6609a75a7d82775aac8af1a591c" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "page" ("id" SERIAL NOT NULL, "show" boolean NOT NULL, "title" character varying, "paragraph" text, "buttonText" character varying, CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "submission_field" ("id" SERIAL NOT NULL, "fieldType" character varying NOT NULL, "fieldValue" character varying NOT NULL, "submissionId" integer, "fieldId" integer, CONSTRAINT "PK_5443f5f769fce3107982c16e0b5" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "user" ("id" SERIAL NOT NULL, "firstName" character varying, "lastName" character varying, "email" character varying(255) NOT NULL, "username" character varying(255) NOT NULL, "passwordHash" character varying NOT NULL, "salt" character varying, "provider" character varying NOT NULL, "roles" text NOT NULL, "language" character varying NOT NULL, "resetPasswordToken" character varying, "resetPasswordExpires" TIMESTAMP, "token" character varying, "apiKey" character varying, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"), CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_visitor" ("id" SERIAL NOT NULL, "referrer" character varying, "ipAddr" character varying NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "updated" TIMESTAMP NOT NULL DEFAULT now(), "formId" integer, "geoLocationCountry" character varying, "geoLocationCity" character varying, "deviceLanguage" character varying, "deviceType" character varying, "deviceName" character varying, CONSTRAINT "PK_74224dc63e13cf5cb5f0420e65b" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "submission" ("id" SERIAL NOT NULL, "ipAddr" character varying NOT NULL, "tokenHash" character varying NOT NULL, "timeElapsed" numeric NOT NULL, "percentageComplete" numeric NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), "formId" integer, "visitorId" integer, "userId" integer, "geoLocationCountry" character varying, "geoLocationCity" character varying, "deviceLanguage" character varying, "deviceType" character varying, "deviceName" character varying, CONSTRAINT "PK_7faa571d0e4a7076e85890c9bd0" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form" ("id" SERIAL NOT NULL, "title" character varying NOT NULL, "language" character varying(10) NOT NULL, "showFooter" boolean NOT NULL, "isLive" boolean NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), "adminId" integer, "startPageId" integer, "endPageId" integer, "analyticsGacode" character varying, "designFont" character varying, "designColorsBackground" character varying, "designColorsQuestion" character varying, "designColorsAnswer" character varying, "designColorsButton" character varying, "designColorsButtonactive" character varying, "designColorsButtontext" character varying, CONSTRAINT "PK_8f72b95aa2f8ba82cf95dc7579e" PRIMARY KEY ("id"))`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_logic" ADD CONSTRAINT "FK_6098b83f6759445d8cfdd03d545" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_logic" ADD CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6" FOREIGN KEY ("jumpToId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_option" ADD CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field" ADD CONSTRAINT "FK_2d83d8a334dd66445db13f92b77" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_hook" ADD CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" ADD CONSTRAINT "FK_a9ed55144108ded893b502d6321" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" ADD CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd" FOREIGN KEY ("fromFieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" ADD CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed" FOREIGN KEY ("toFieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "page_button" ADD CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "submission_field" ADD CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0" FOREIGN KEY ("submissionId") REFERENCES "submission"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "submission_field" ADD CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form_visitor" ADD CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" ADD CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" ADD CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8" FOREIGN KEY ("visitorId") REFERENCES "form_visitor"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" ADD CONSTRAINT "FK_7bd626272858ef6464aa2579094" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form" ADD CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd" FOREIGN KEY ("adminId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form" ADD CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70" FOREIGN KEY ("startPageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query(`ALTER TABLE "form" ADD CONSTRAINT "FK_e5d158932e43cfbf9958931ee01" FOREIGN KEY ("endPageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||
await queryRunner.query('CREATE TABLE "form_field_logic" ("id" SERIAL NOT NULL, "formula" character varying NOT NULL, "action" character varying(10) NOT NULL, "visible" boolean, "require" boolean, "disable" boolean, "enabled" boolean NOT NULL, "fieldId" integer, "jumpToId" integer, CONSTRAINT "PK_c40e7f583854ff1b60900d8cf1b" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form_field_option" ("id" SERIAL NOT NULL, "key" character varying, "title" character varying, "value" character varying NOT NULL, "fieldId" integer, CONSTRAINT "PK_812955356e516819e37b64bf39b" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form_field" ("id" SERIAL NOT NULL, "title" character varying NOT NULL, "description" text NOT NULL, "slug" character varying, "required" boolean NOT NULL, "disabled" boolean NOT NULL, "type" character varying NOT NULL, "value" character varying NOT NULL, "formId" integer, "ratingSteps" integer, "ratingShape" character varying, CONSTRAINT "PK_135904ddb60085b07254ea4f485" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form_hook" ("id" SERIAL NOT NULL, "enabled" boolean NOT NULL, "url" character varying NOT NULL, "format" character varying, "formId" integer, CONSTRAINT "PK_4b63bd9ff09f7b3e5c4a41fcbec" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form_notification" ("id" SERIAL NOT NULL, "subject" character varying, "htmlTemplate" character varying, "enabled" boolean NOT NULL, "toEmail" character varying, "fromEmail" character varying, "formId" integer, "fromFieldId" integer, "toFieldId" integer, CONSTRAINT "PK_935306529aed07c9f6628f6e24f" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "page_button" ("id" SERIAL NOT NULL, "url" character varying, "action" character varying, "text" character varying NOT NULL, "bgColor" character varying, "activeColor" character varying, "color" character varying, "pageId" integer, CONSTRAINT "PK_6609a75a7d82775aac8af1a591c" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "page" ("id" SERIAL NOT NULL, "show" boolean NOT NULL, "title" character varying, "paragraph" text, "buttonText" character varying, CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "submission_field" ("id" SERIAL NOT NULL, "fieldType" character varying NOT NULL, "fieldValue" character varying NOT NULL, "submissionId" integer, "fieldId" integer, CONSTRAINT "PK_5443f5f769fce3107982c16e0b5" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "user" ("id" SERIAL NOT NULL, "firstName" character varying, "lastName" character varying, "email" character varying(255) NOT NULL, "username" character varying(255) NOT NULL, "passwordHash" character varying NOT NULL, "salt" character varying, "provider" character varying NOT NULL, "roles" text NOT NULL, "language" character varying NOT NULL, "resetPasswordToken" character varying, "resetPasswordExpires" TIMESTAMP, "token" character varying, "apiKey" character varying, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"), CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form_visitor" ("id" SERIAL NOT NULL, "referrer" character varying, "ipAddr" character varying NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "updated" TIMESTAMP NOT NULL DEFAULT now(), "formId" integer, "geoLocationCountry" character varying, "geoLocationCity" character varying, "deviceLanguage" character varying, "deviceType" character varying, "deviceName" character varying, CONSTRAINT "PK_74224dc63e13cf5cb5f0420e65b" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "submission" ("id" SERIAL NOT NULL, "ipAddr" character varying NOT NULL, "tokenHash" character varying NOT NULL, "timeElapsed" numeric NOT NULL, "percentageComplete" numeric NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), "formId" integer, "visitorId" integer, "userId" integer, "geoLocationCountry" character varying, "geoLocationCity" character varying, "deviceLanguage" character varying, "deviceType" character varying, "deviceName" character varying, CONSTRAINT "PK_7faa571d0e4a7076e85890c9bd0" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('CREATE TABLE "form" ("id" SERIAL NOT NULL, "title" character varying NOT NULL, "language" character varying(10) NOT NULL, "showFooter" boolean NOT NULL, "isLive" boolean NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "lastModified" TIMESTAMP NOT NULL DEFAULT now(), "adminId" integer, "startPageId" integer, "endPageId" integer, "analyticsGacode" character varying, "designFont" character varying, "designColorsBackground" character varying, "designColorsQuestion" character varying, "designColorsAnswer" character varying, "designColorsButton" character varying, "designColorsButtonactive" character varying, "designColorsButtontext" character varying, CONSTRAINT "PK_8f72b95aa2f8ba82cf95dc7579e" PRIMARY KEY ("id"))');
|
||||
await queryRunner.query('ALTER TABLE "form_field_logic" ADD CONSTRAINT "FK_6098b83f6759445d8cfdd03d545" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_field_logic" ADD CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6" FOREIGN KEY ("jumpToId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_field_option" ADD CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_field" ADD CONSTRAINT "FK_2d83d8a334dd66445db13f92b77" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_hook" ADD CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" ADD CONSTRAINT "FK_a9ed55144108ded893b502d6321" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" ADD CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd" FOREIGN KEY ("fromFieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" ADD CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed" FOREIGN KEY ("toFieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "page_button" ADD CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "submission_field" ADD CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0" FOREIGN KEY ("submissionId") REFERENCES "submission"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "submission_field" ADD CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a" FOREIGN KEY ("fieldId") REFERENCES "form_field"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form_visitor" ADD CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "submission" ADD CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7" FOREIGN KEY ("formId") REFERENCES "form"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "submission" ADD CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8" FOREIGN KEY ("visitorId") REFERENCES "form_visitor"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "submission" ADD CONSTRAINT "FK_7bd626272858ef6464aa2579094" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form" ADD CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd" FOREIGN KEY ("adminId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form" ADD CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70" FOREIGN KEY ("startPageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
await queryRunner.query('ALTER TABLE "form" ADD CONSTRAINT "FK_e5d158932e43cfbf9958931ee01" FOREIGN KEY ("endPageId") REFERENCES "page"("id") ON DELETE NO ACTION ON UPDATE NO ACTION');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "form" DROP CONSTRAINT "FK_e5d158932e43cfbf9958931ee01"`);
|
||||
await queryRunner.query(`ALTER TABLE "form" DROP CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70"`);
|
||||
await queryRunner.query(`ALTER TABLE "form" DROP CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd"`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" DROP CONSTRAINT "FK_7bd626272858ef6464aa2579094"`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" DROP CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8"`);
|
||||
await queryRunner.query(`ALTER TABLE "submission" DROP CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_visitor" DROP CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6"`);
|
||||
await queryRunner.query(`ALTER TABLE "submission_field" DROP CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a"`);
|
||||
await queryRunner.query(`ALTER TABLE "submission_field" DROP CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0"`);
|
||||
await queryRunner.query(`ALTER TABLE "page_button" DROP CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" DROP CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" DROP CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_notification" DROP CONSTRAINT "FK_a9ed55144108ded893b502d6321"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_hook" DROP CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field" DROP CONSTRAINT "FK_2d83d8a334dd66445db13f92b77"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_option" DROP CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6"`);
|
||||
await queryRunner.query(`ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_6098b83f6759445d8cfdd03d545"`);
|
||||
await queryRunner.query('ALTER TABLE "form" DROP CONSTRAINT "FK_e5d158932e43cfbf9958931ee01"');
|
||||
await queryRunner.query('ALTER TABLE "form" DROP CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70"');
|
||||
await queryRunner.query('ALTER TABLE "form" DROP CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd"');
|
||||
await queryRunner.query('ALTER TABLE "submission" DROP CONSTRAINT "FK_7bd626272858ef6464aa2579094"');
|
||||
await queryRunner.query('ALTER TABLE "submission" DROP CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8"');
|
||||
await queryRunner.query('ALTER TABLE "submission" DROP CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7"');
|
||||
await queryRunner.query('ALTER TABLE "form_visitor" DROP CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6"');
|
||||
await queryRunner.query('ALTER TABLE "submission_field" DROP CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a"');
|
||||
await queryRunner.query('ALTER TABLE "submission_field" DROP CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0"');
|
||||
await queryRunner.query('ALTER TABLE "page_button" DROP CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2"');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" DROP CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed"');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" DROP CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd"');
|
||||
await queryRunner.query('ALTER TABLE "form_notification" DROP CONSTRAINT "FK_a9ed55144108ded893b502d6321"');
|
||||
await queryRunner.query('ALTER TABLE "form_hook" DROP CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30"');
|
||||
await queryRunner.query('ALTER TABLE "form_field" DROP CONSTRAINT "FK_2d83d8a334dd66445db13f92b77"');
|
||||
await queryRunner.query('ALTER TABLE "form_field_option" DROP CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97"');
|
||||
await queryRunner.query('ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6"');
|
||||
await queryRunner.query('ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_6098b83f6759445d8cfdd03d545"');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class layout1621078163528 implements MigrationInterface {
|
||||
name = 'layout1621078163528'
|
||||
name = 'layout1621078163528'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "form" ADD "designLayout" character varying`);
|
||||
}
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE "form" ADD "designLayout" character varying');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "form" DROP COLUMN "designLayout"`);
|
||||
}
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE "form" DROP COLUMN "designLayout"');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,35 +1,35 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class initial1619723437787 implements MigrationInterface {
|
||||
name = 'initial1619723437787'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TABLE "page" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "show" boolean NOT NULL, "title" varchar, "paragraph" text, "buttonText" varchar)`);
|
||||
await queryRunner.query(`CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "firstName" varchar, "lastName" varchar, "email" varchar(255) NOT NULL, "username" varchar(255) NOT NULL, "passwordHash" varchar NOT NULL, "salt" varchar, "provider" varchar NOT NULL, "roles" text NOT NULL, "language" varchar NOT NULL, "resetPasswordToken" varchar, "resetPasswordExpires" datetime, "token" varchar, "apiKey" varchar, "created" datetime NOT NULL DEFAULT (datetime('now')), "lastModified" datetime NOT NULL DEFAULT (datetime('now')), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"))`);
|
||||
await queryRunner.query(`CREATE TABLE "form_field_logic" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "formula" varchar NOT NULL, "action" varchar(10) NOT NULL, "visible" boolean, "require" boolean, "disable" boolean, "enabled" boolean NOT NULL, "fieldId" integer, "jumpToId" integer, CONSTRAINT "FK_6098b83f6759445d8cfdd03d545" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6" FOREIGN KEY ("jumpToId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form_field_option" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "key" varchar, "title" varchar, "value" varchar NOT NULL, "fieldId" integer, CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form_field" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar NOT NULL, "description" text NOT NULL, "slug" varchar, "required" boolean NOT NULL, "disabled" boolean NOT NULL, "type" varchar NOT NULL, "value" varchar NOT NULL, "formId" integer, "ratingSteps" integer, "ratingShape" varchar, CONSTRAINT "FK_2d83d8a334dd66445db13f92b77" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form_hook" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "enabled" boolean NOT NULL, "url" varchar NOT NULL, "format" varchar, "formId" integer, CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form_notification" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "subject" varchar, "htmlTemplate" varchar, "enabled" boolean NOT NULL, "toEmail" varchar, "fromEmail" varchar, "formId" integer, "fromFieldId" integer, "toFieldId" integer, CONSTRAINT "FK_a9ed55144108ded893b502d6321" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd" FOREIGN KEY ("fromFieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed" FOREIGN KEY ("toFieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "page_button" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "url" varchar, "action" varchar, "text" varchar NOT NULL, "bgColor" varchar, "activeColor" varchar, "color" varchar, "pageId" integer, CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2" FOREIGN KEY ("pageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "submission_field" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "fieldType" varchar NOT NULL, "fieldValue" varchar NOT NULL, "submissionId" integer, "fieldId" integer, CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0" FOREIGN KEY ("submissionId") REFERENCES "submission" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form_visitor" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "referrer" varchar, "ipAddr" varchar NOT NULL, "created" datetime NOT NULL DEFAULT (datetime('now')), "updated" datetime NOT NULL DEFAULT (datetime('now')), "formId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "submission" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ipAddr" varchar NOT NULL, "tokenHash" varchar NOT NULL, "timeElapsed" numeric NOT NULL, "percentageComplete" numeric NOT NULL, "created" datetime NOT NULL DEFAULT (datetime('now')), "lastModified" datetime NOT NULL DEFAULT (datetime('now')), "formId" integer, "visitorId" integer, "userId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8" FOREIGN KEY ("visitorId") REFERENCES "form_visitor" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_7bd626272858ef6464aa2579094" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query(`CREATE TABLE "form" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar NOT NULL, "language" varchar(10) NOT NULL, "showFooter" boolean NOT NULL, "isLive" boolean NOT NULL, "created" datetime NOT NULL DEFAULT (datetime('now')), "lastModified" datetime NOT NULL DEFAULT (datetime('now')), "adminId" integer, "startPageId" integer, "endPageId" integer, "analyticsGacode" varchar, "designFont" varchar, "designColorsBackground" varchar, "designColorsQuestion" varchar, "designColorsAnswer" varchar, "designColorsButton" varchar, "designColorsButtonactive" varchar, "designColorsButtontext" varchar, CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd" FOREIGN KEY ("adminId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70" FOREIGN KEY ("startPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_e5d158932e43cfbf9958931ee01" FOREIGN KEY ("endPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)`);
|
||||
await queryRunner.query('CREATE TABLE "page" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "show" boolean NOT NULL, "title" varchar, "paragraph" text, "buttonText" varchar)');
|
||||
await queryRunner.query('CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "firstName" varchar, "lastName" varchar, "email" varchar(255) NOT NULL, "username" varchar(255) NOT NULL, "passwordHash" varchar NOT NULL, "salt" varchar, "provider" varchar NOT NULL, "roles" text NOT NULL, "language" varchar NOT NULL, "resetPasswordToken" varchar, "resetPasswordExpires" datetime, "token" varchar, "apiKey" varchar, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"))');
|
||||
await queryRunner.query('CREATE TABLE "form_field_logic" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "formula" varchar NOT NULL, "action" varchar(10) NOT NULL, "visible" boolean, "require" boolean, "disable" boolean, "enabled" boolean NOT NULL, "fieldId" integer, "jumpToId" integer, CONSTRAINT "FK_6098b83f6759445d8cfdd03d545" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6" FOREIGN KEY ("jumpToId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form_field_option" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "key" varchar, "title" varchar, "value" varchar NOT NULL, "fieldId" integer, CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form_field" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar NOT NULL, "description" text NOT NULL, "slug" varchar, "required" boolean NOT NULL, "disabled" boolean NOT NULL, "type" varchar NOT NULL, "value" varchar NOT NULL, "formId" integer, "ratingSteps" integer, "ratingShape" varchar, CONSTRAINT "FK_2d83d8a334dd66445db13f92b77" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form_hook" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "enabled" boolean NOT NULL, "url" varchar NOT NULL, "format" varchar, "formId" integer, CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form_notification" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "subject" varchar, "htmlTemplate" varchar, "enabled" boolean NOT NULL, "toEmail" varchar, "fromEmail" varchar, "formId" integer, "fromFieldId" integer, "toFieldId" integer, CONSTRAINT "FK_a9ed55144108ded893b502d6321" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd" FOREIGN KEY ("fromFieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_4915ebae53e09b732322d0ff6ed" FOREIGN KEY ("toFieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "page_button" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "url" varchar, "action" varchar, "text" varchar NOT NULL, "bgColor" varchar, "activeColor" varchar, "color" varchar, "pageId" integer, CONSTRAINT "FK_d9f099286b75fa0034dcd8cf7c2" FOREIGN KEY ("pageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "submission_field" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "fieldType" varchar NOT NULL, "fieldValue" varchar NOT NULL, "submissionId" integer, "fieldId" integer, CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0" FOREIGN KEY ("submissionId") REFERENCES "submission" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_5befa92da2370b7eb1cab6ae30a" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form_visitor" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "referrer" varchar, "ipAddr" varchar NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "updated" datetime NOT NULL DEFAULT (datetime(\'now\')), "formId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "submission" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ipAddr" varchar NOT NULL, "tokenHash" varchar NOT NULL, "timeElapsed" numeric NOT NULL, "percentageComplete" numeric NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), "formId" integer, "visitorId" integer, "userId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8" FOREIGN KEY ("visitorId") REFERENCES "form_visitor" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_7bd626272858ef6464aa2579094" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
await queryRunner.query('CREATE TABLE "form" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar NOT NULL, "language" varchar(10) NOT NULL, "showFooter" boolean NOT NULL, "isLive" boolean NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), "adminId" integer, "startPageId" integer, "endPageId" integer, "analyticsGacode" varchar, "designFont" varchar, "designColorsBackground" varchar, "designColorsQuestion" varchar, "designColorsAnswer" varchar, "designColorsButton" varchar, "designColorsButtonactive" varchar, "designColorsButtontext" varchar, CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd" FOREIGN KEY ("adminId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70" FOREIGN KEY ("startPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_e5d158932e43cfbf9958931ee01" FOREIGN KEY ("endPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP TABLE "form"`);
|
||||
await queryRunner.query(`DROP TABLE "submission"`);
|
||||
await queryRunner.query(`DROP TABLE "form_visitor"`);
|
||||
await queryRunner.query(`DROP TABLE "user"`);
|
||||
await queryRunner.query(`DROP TABLE "submission_field"`);
|
||||
await queryRunner.query(`DROP TABLE "page"`);
|
||||
await queryRunner.query(`DROP TABLE "page_button"`);
|
||||
await queryRunner.query(`DROP TABLE "form_notification"`);
|
||||
await queryRunner.query(`DROP TABLE "form_hook"`);
|
||||
await queryRunner.query(`DROP TABLE "form_field"`);
|
||||
await queryRunner.query(`DROP TABLE "form_field_option"`);
|
||||
await queryRunner.query(`DROP TABLE "form_field_logic"`);
|
||||
await queryRunner.query('DROP TABLE "form"');
|
||||
await queryRunner.query('DROP TABLE "submission"');
|
||||
await queryRunner.query('DROP TABLE "form_visitor"');
|
||||
await queryRunner.query('DROP TABLE "user"');
|
||||
await queryRunner.query('DROP TABLE "submission_field"');
|
||||
await queryRunner.query('DROP TABLE "page"');
|
||||
await queryRunner.query('DROP TABLE "page_button"');
|
||||
await queryRunner.query('DROP TABLE "form_notification"');
|
||||
await queryRunner.query('DROP TABLE "form_hook"');
|
||||
await queryRunner.query('DROP TABLE "form_field"');
|
||||
await queryRunner.query('DROP TABLE "form_field_option"');
|
||||
await queryRunner.query('DROP TABLE "form_field_logic"');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm'
|
||||
|
||||
export class layout1621078163528 implements MigrationInterface {
|
||||
name = 'layout1621078163528'
|
||||
name = 'layout1621078163528'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "form" ADD "designLayout" character varying`);
|
||||
}
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE "form" ADD "designLayout" character varying');
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "form" DROP COLUMN "designLayout"`);
|
||||
}
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query('ALTER TABLE "form" DROP COLUMN "designLayout"');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { Args, Mutation } from '@nestjs/graphql'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { AuthJwtModel } from '../../dto/auth/auth.jwt.model'
|
||||
import { UserCreateInput } from '../../dto/user/user.create.input'
|
||||
import { AuthService } from '../../service/auth/auth.service'
|
||||
@ -15,6 +15,7 @@ export class AuthRegisterResolver {
|
||||
private readonly auth: AuthService,
|
||||
private readonly logger: PinoLogger,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
@Mutation(() => AuthJwtModel)
|
||||
|
||||
@ -1,13 +1,6 @@
|
||||
import { Args, Context, ID, Parent, Query, ResolveField, Resolver } from '@nestjs/graphql'
|
||||
import { Roles } from '../../decorator/roles.decorator'
|
||||
import { Args, Context, ID, Query, Resolver } from '@nestjs/graphql'
|
||||
import { User } from '../../decorator/user.decorator'
|
||||
import { DesignModel } from '../../dto/form/design.model'
|
||||
import { FormFieldModel } from '../../dto/form/form.field.model'
|
||||
import { FormHookModel } from '../../dto/form/form.hook.model'
|
||||
import { FormModel } from '../../dto/form/form.model'
|
||||
import { FormNotificationModel } from '../../dto/form/form.notification.model'
|
||||
import { PageModel } from '../../dto/form/page.model'
|
||||
import { UserModel } from '../../dto/user/user.model'
|
||||
import { FormEntity } from '../../entity/form.entity'
|
||||
import { UserEntity } from '../../entity/user.entity'
|
||||
import { FormService } from '../../service/form/form.service'
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { Args, Context, ID, Parent, Query, ResolveField, Resolver } from '@nestjs/graphql'
|
||||
import { Context, Parent, ResolveField, Resolver } from '@nestjs/graphql'
|
||||
import { Roles } from '../../decorator/roles.decorator'
|
||||
import { User } from '../../decorator/user.decorator'
|
||||
import { DesignModel } from '../../dto/form/design.model'
|
||||
@ -39,7 +39,7 @@ export class FormResolver {
|
||||
): Promise<FormHookModel[]> {
|
||||
const form = await cache.get<FormEntity>(cache.getCacheKey(FormEntity.name, parent.id))
|
||||
|
||||
return form.hooks?.map(hook => new FormHookModel(hook)) || []
|
||||
return form.hooks?.map(hook => new FormHookModel(hook)) || []
|
||||
}
|
||||
|
||||
@ResolveField('isLive', () => Boolean)
|
||||
|
||||
@ -40,8 +40,12 @@ export class UserResolver {
|
||||
)
|
||||
}
|
||||
|
||||
async returnFieldForSuperuser<T>(parent: UserEntity, user: UserEntity, callback: (user: UserEntity) => T): Promise<T> {
|
||||
if (user.id !== parent.id && !await this.userService.isSuperuser(user)) {
|
||||
async returnFieldForSuperuser<T>(
|
||||
parent: UserEntity,
|
||||
user: UserEntity,
|
||||
callback: (user: UserEntity) => T
|
||||
): Promise<T> {
|
||||
if (user.id !== parent.id && !this.userService.isSuperuser(user)) {
|
||||
throw new Error('No access to roles')
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { JwtService } from '@nestjs/jwt'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { AuthJwtModel } from '../../dto/auth/auth.jwt.model'
|
||||
import { UserEntity } from '../../entity/user.entity'
|
||||
import { UserService } from '../user/user.service'
|
||||
@ -13,7 +13,9 @@ export class AuthService {
|
||||
private jwtService: JwtService,
|
||||
private passwordService: PasswordService,
|
||||
private logger: PinoLogger,
|
||||
) {}
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
async validateUser(username: string, password: string): Promise<UserEntity> {
|
||||
// TODO only allow login for verified users!
|
||||
@ -30,7 +32,7 @@ export class AuthService {
|
||||
return null;
|
||||
}
|
||||
|
||||
async login(user: UserEntity): Promise<AuthJwtModel> {
|
||||
public login(user: UserEntity): AuthJwtModel {
|
||||
return new AuthJwtModel({
|
||||
accessToken: this.jwtService.sign({
|
||||
username: user.username,
|
||||
|
||||
@ -4,7 +4,7 @@ import * as crypto from 'crypto'
|
||||
|
||||
@Injectable()
|
||||
export class PasswordService {
|
||||
async verify (password: string, hash: string, salt?: string): Promise<boolean> {
|
||||
async verify(password: string, hash: string, salt?: string): Promise<boolean> {
|
||||
if (hash[0] === '$') {
|
||||
return await bcrypt.compare(password, hash)
|
||||
}
|
||||
@ -23,7 +23,7 @@ export class PasswordService {
|
||||
).toString('base64');
|
||||
}
|
||||
|
||||
hash (password): Promise<string> {
|
||||
public hash(password: string): Promise<string> {
|
||||
return bcrypt.hash(password, 4)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { InjectRepository } from '@nestjs/typeorm'
|
||||
import { Repository } from 'typeorm'
|
||||
import { FormEntity } from '../../entity/form.entity'
|
||||
import { FormFieldEntity } from '../../entity/form.field.entity'
|
||||
import { UserEntity } from '../../entity/user.entity'
|
||||
|
||||
@Injectable()
|
||||
export class FormFieldService {
|
||||
|
||||
@ -2,7 +2,7 @@ import { ConfigService } from '@nestjs/config'
|
||||
import { RedisPubSub } from 'graphql-redis-subscriptions'
|
||||
import { PubSub, PubSubEngine } from 'graphql-subscriptions'
|
||||
import Redis from 'ioredis'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { authServices } from './auth'
|
||||
import { formServices } from './form'
|
||||
import { InstallationMetricsService } from './installation.metrics.service'
|
||||
@ -42,6 +42,6 @@ export const services = [
|
||||
publisher: new Redis(options),
|
||||
subscriber: new Redis(options),
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Injectable, OnApplicationBootstrap } from '@nestjs/common'
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import MatomoTracker from 'matomo-tracker'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
|
||||
@Injectable()
|
||||
export class InstallationMetricsService implements OnApplicationBootstrap {
|
||||
@ -11,6 +11,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
|
||||
private readonly logger: PinoLogger,
|
||||
private readonly configService: ConfigService,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
async onApplicationBootstrap(): Promise<void> {
|
||||
@ -29,7 +30,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
|
||||
tracker.track({
|
||||
url: `http://localhost/version/${process.env.version}`,
|
||||
action_name: 'startup',
|
||||
ua: process.arch
|
||||
ua: process.arch,
|
||||
})
|
||||
|
||||
setInterval(() => {
|
||||
@ -37,7 +38,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
|
||||
tracker.track({
|
||||
url: `http://localhost/version/${process.env.version}`,
|
||||
action_name: 'running',
|
||||
ua: process.arch
|
||||
ua: process.arch,
|
||||
})
|
||||
}, 24 * 60 * 60 * 1000)
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import fs from 'fs'
|
||||
import handlebars from 'handlebars'
|
||||
import htmlToText from 'html-to-text'
|
||||
import mjml2html from 'mjml'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { join } from 'path'
|
||||
import { defaultLanguage } from '../config/languages'
|
||||
|
||||
@ -31,7 +31,7 @@ export class MailService {
|
||||
fs.readFileSync(path).toString('utf-8')
|
||||
)(context),
|
||||
{
|
||||
minify: true
|
||||
minify: true,
|
||||
}
|
||||
).html
|
||||
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { ProfileUpdateService } from './profile.update.service'
|
||||
|
||||
export const profileServices = [
|
||||
ProfileUpdateService,
|
||||
]
|
||||
export const profileServices = [ProfileUpdateService]
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { HttpService, Injectable } from '@nestjs/common'
|
||||
import { HttpService } from '@nestjs/axios'
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import handlebars from 'handlebars'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { SubmissionEntity } from '../../entity/submission.entity'
|
||||
|
||||
@Injectable()
|
||||
@ -9,6 +10,7 @@ export class SubmissionHookService {
|
||||
private httpService: HttpService,
|
||||
private readonly logger: PinoLogger,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
public async process(submission: SubmissionEntity): Promise<void> {
|
||||
@ -20,7 +22,7 @@ export class SubmissionHookService {
|
||||
try {
|
||||
const response = await this.httpService.post(
|
||||
hook.url,
|
||||
await this.format(submission, hook.format)
|
||||
this.format(submission, hook.format)
|
||||
).toPromise()
|
||||
|
||||
console.log('sent hook', response.data)
|
||||
@ -32,7 +34,7 @@ export class SubmissionHookService {
|
||||
}))
|
||||
}
|
||||
|
||||
private async format(submission: SubmissionEntity, format?: string): Promise<any> {
|
||||
private format(submission: SubmissionEntity, format?: string): any {
|
||||
const fields = {}
|
||||
submission.form.fields.forEach((field) => {
|
||||
fields[field.id] = field
|
||||
@ -47,9 +49,9 @@ export class SubmissionHookService {
|
||||
return {
|
||||
field: submissionField.field.id,
|
||||
slug: submissionField.field.slug || null,
|
||||
value: submissionField.field.value
|
||||
value: submissionField.field.value,
|
||||
}
|
||||
})
|
||||
}),
|
||||
}
|
||||
|
||||
if (!format) {
|
||||
|
||||
@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'
|
||||
import handlebars from 'handlebars'
|
||||
import htmlToText from 'html-to-text'
|
||||
import mjml2html from 'mjml'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { SubmissionEntity } from '../../entity/submission.entity'
|
||||
|
||||
@Injectable()
|
||||
@ -12,6 +12,7 @@ export class SubmissionNotificationService {
|
||||
private readonly nestMailer: MailerService,
|
||||
private readonly logger: PinoLogger,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
public async process(submission: SubmissionEntity): Promise<void> {
|
||||
@ -31,7 +32,7 @@ export class SubmissionNotificationService {
|
||||
// TODO add variables
|
||||
}),
|
||||
{
|
||||
minify: true
|
||||
minify: true,
|
||||
}
|
||||
).html
|
||||
|
||||
@ -40,7 +41,7 @@ export class SubmissionNotificationService {
|
||||
replyTo: from,
|
||||
subject: notification.subject,
|
||||
html,
|
||||
text: htmlToText.fromString(html)
|
||||
text: htmlToText.fromString(html),
|
||||
})
|
||||
console.log('sent notification to', to)
|
||||
} catch (e) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { InjectRepository } from '@nestjs/typeorm'
|
||||
import dayjs from 'dayjs'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { Repository } from 'typeorm'
|
||||
import { SubmissionSetFieldInput } from '../../dto/submission/submission.set.field.input'
|
||||
import { SubmissionEntity } from '../../entity/submission.entity'
|
||||
@ -20,6 +20,7 @@ export class SubmissionSetFieldService {
|
||||
private readonly notifications: SubmissionNotificationService,
|
||||
private readonly logger: PinoLogger,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise<void> {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Injectable, OnApplicationBootstrap } from '@nestjs/common'
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { UserCreateService } from './user.create.service'
|
||||
import { UserService } from './user.service'
|
||||
|
||||
@ -12,12 +12,15 @@ export class BootService implements OnApplicationBootstrap {
|
||||
private readonly configService: ConfigService,
|
||||
private readonly logger: PinoLogger,
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
async onApplicationBootstrap(): Promise<void> {
|
||||
const create = this.configService.get<string>('CREATE_ADMIN', 'false')
|
||||
|
||||
if (!create || ['false', '0', 'no', ''].includes(create.toLowerCase())) {
|
||||
if (!create || [
|
||||
'false', '0', 'no', '',
|
||||
].includes(create.toLowerCase())) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -46,7 +49,9 @@ export class BootService implements OnApplicationBootstrap {
|
||||
username,
|
||||
email,
|
||||
password,
|
||||
}, ['user', 'admin', 'superuser'])
|
||||
}, [
|
||||
'user', 'admin', 'superuser',
|
||||
])
|
||||
} catch (e) {
|
||||
this.logger.error({
|
||||
error: e,
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { InjectRepository } from '@nestjs/typeorm'
|
||||
import { PinoLogger } from 'nestjs-pino/dist'
|
||||
import { PinoLogger } from 'nestjs-pino'
|
||||
import { Repository } from 'typeorm'
|
||||
import { rolesType } from '../../config/roles'
|
||||
import { UserCreateInput } from '../../dto/user/user.create.input'
|
||||
@ -18,14 +18,20 @@ export class UserCreateService {
|
||||
private readonly logger: PinoLogger,
|
||||
private readonly passwordService: PasswordService,
|
||||
private readonly settingService: SettingService,
|
||||
) {}
|
||||
) {
|
||||
logger.setContext(this.constructor.name)
|
||||
}
|
||||
|
||||
private async getDefaultRoles(): Promise<rolesType> {
|
||||
const roleSetting = await this.settingService.getByKey('DEFAULT_ROLE')
|
||||
|
||||
switch (roleSetting.value) {
|
||||
case 'superuser':
|
||||
return ['superuser', 'admin', 'user']
|
||||
return [
|
||||
'superuser',
|
||||
'admin',
|
||||
'user',
|
||||
]
|
||||
|
||||
case 'admin':
|
||||
return ['admin', 'user']
|
||||
|
||||
@ -11,7 +11,7 @@ export class UserService {
|
||||
) {
|
||||
}
|
||||
|
||||
async isSuperuser(user: UserEntity): Promise<boolean> {
|
||||
isSuperuser(user: UserEntity): boolean {
|
||||
return user.roles.includes('superuser')
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { Injectable } from '@nestjs/common'
|
||||
import { InjectRepository } from '@nestjs/typeorm'
|
||||
import { Repository } from 'typeorm'
|
||||
import { rolesType } from '../../config/roles'
|
||||
import { UserUpdateInput } from '../../dto/user/user.update.input'
|
||||
import { UserEntity } from '../../entity/user.entity'
|
||||
import { PasswordService } from '../auth/password.service'
|
||||
@ -32,7 +33,7 @@ export class UserUpdateService {
|
||||
}
|
||||
|
||||
if (input.roles !== undefined) {
|
||||
user.roles = input.roles as any
|
||||
user.roles = input.roles as rolesType
|
||||
}
|
||||
|
||||
if (input.language !== undefined) {
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"target": "es2017",
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"baseUrl": "./",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user