update dependencies

This commit is contained in:
Michael Schramm 2022-01-02 00:15:55 +01:00
parent ad6fbb3b85
commit 11e95cb9c2
53 changed files with 3167 additions and 4715 deletions

View File

@ -4,15 +4,16 @@ module.exports = {
project: 'tsconfig.json', project: 'tsconfig.json',
sourceType: 'module', sourceType: 'module',
}, },
"plugins": [ 'plugins': [
"nestjs", 'nestjs',
"@typescript-eslint", '@typescript-eslint/eslint-plugin',
"unused-imports" '@typescript-eslint',
'unused-imports'
], ],
extends: [ extends: [
"eslint:recommended", 'eslint:recommended',
"plugin:nestjs/recommended", 'plugin:nestjs/recommended',
"plugin:@typescript-eslint/eslint-recommended", 'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:@typescript-eslint/recommended-requiring-type-checking',
'prettier', 'prettier',
@ -23,8 +24,47 @@ module.exports = {
jest: true, jest: true,
}, },
rules: { 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/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': '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
View File

@ -38,3 +38,6 @@ lerna-debug.log*
/data /data
/.env /.env
/src/schema.gql /src/schema.gql
/data.sqlite
/maria_data
/pg_data

View File

@ -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" "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": { "dependencies": {
"@apollo/gateway": "^0.27.1",
"@nestjs-modules/mailer": "^1.6.0", "@nestjs-modules/mailer": "^1.6.0",
"@nestjs/common": "^7.6.15", "@nestjs/axios": "^0.0.3",
"@nestjs/config": "^0.6.3", "@nestjs/common": "^8.2.4",
"@nestjs/core": "^7.6.15", "@nestjs/config": "^1.1.5",
"@nestjs/graphql": "^7.10.6", "@nestjs/core": "^8.2.4",
"@nestjs/jwt": "^7.2.0", "@nestjs/graphql": "^9.1.2",
"@nestjs/passport": "^7.1.5", "@nestjs/jwt": "^8.0.0",
"@nestjs/platform-express": "^7.6.15", "@nestjs/passport": "^8.0.1",
"@nestjs/serve-static": "^2.1.4", "@nestjs/platform-express": "^8.2.4",
"@nestjs/typeorm": "^7.1.5", "@nestjs/serve-static": "^2.2.2",
"apollo-server-express": "^2.23.0", "@nestjs/typeorm": "^8.0.2",
"apollo-server-express": "^3.6.1",
"bcrypt": "^5.0.1", "bcrypt": "^5.0.1",
"class-transformer": "^0.4.0", "class-transformer": "^0.5.1",
"class-validator": "^0.13.1", "class-validator": "^0.13.2",
"commander": "^7.2.0", "commander": "^8.3.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dayjs": "^1.10.4", "dayjs": "^1.10.7",
"graphql": "15.5.0", "graphql": "15.8.0",
"graphql-redis-subscriptions": "^2.3.1", "graphql-redis-subscriptions": "^2.4.2",
"graphql-subscriptions": "^1.2.1", "graphql-subscriptions": "^2.0.0",
"graphql-tools": "^7.0.4", "graphql-tools": "^8.2.0",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"html-to-text": "^7.1.1", "html-to-text": "^8.1.0",
"inquirer": "^8.0.0", "inquirer": "^8.2.0",
"ioredis": "^4.27.1", "ioredis": "^4.28.2",
"matomo-tracker": "^2.2.4", "matomo-tracker": "^2.2.4",
"mjml": "^4.9.1", "mjml": "^4.11.0",
"mysql2": "^2.2.5", "mysql2": "^2.3.3",
"nestjs-console": "^4.0.0", "nestjs-console": "^7.0.1",
"nestjs-pino": "^1.4.0", "nestjs-pino": "^2.4.0",
"nodemailer": "^6.6.0", "nodemailer": "^6.7.2",
"passport": "^0.4.1", "passport": "^0.5.2",
"passport-jwt": "^4.0.0", "passport-jwt": "^4.0.0",
"passport-local": "^1.0.0", "passport-local": "^1.0.0",
"pg": "^8.6.0", "pg": "^8.7.1",
"pino-pretty": "^4.7.1", "pino-http": "^6.5.0",
"pino-pretty": "^7.3.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"request-ip": "^2.1.3", "request-ip": "^2.1.3",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rxjs": "^6.6.7", "rxjs": "^7.5.1",
"serialize-error": "^8.1.0",
"sqlite3": "^5.0.2", "sqlite3": "^5.0.2",
"typeorm": "^0.2.32" "typeorm": "^0.2.41"
}, },
"devDependencies": { "devDependencies": {
"@nestjs/cli": "^7.6.0", "@nestjs/cli": "^8.1.6",
"@nestjs/schematics": "^7.3.1", "@nestjs/schematics": "^8.0.5",
"@nestjs/testing": "^7.6.15", "@nestjs/testing": "^8.2.4",
"@types/bcrypt": "^3.0.1", "@types/bcrypt": "^5.0.0",
"@types/express-serve-static-core": "^4.17.19", "@types/express-serve-static-core": "^4.17.27",
"@types/handlebars": "^4.1.0", "@types/handlebars": "^4.1.0",
"@types/html-to-text": "^6.0.0", "@types/html-to-text": "^8.0.1",
"@types/inquirer": "^7.3.1", "@types/inquirer": "^8.1.3",
"@types/jest": "26.0.23", "@types/jest": "26.0.23",
"@types/node": "^15.0.1", "@types/node": "^16.11.17",
"@types/passport-jwt": "^3.0.5", "@types/passport-jwt": "^3.0.6",
"@types/passport-local": "^1.0.33", "@types/passport-local": "^1.0.34",
"@types/request-ip": "^0.0.35", "@types/request-ip": "^0.0.37",
"@types/supertest": "^2.0.11", "@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/eslint-plugin": "^5.8.1",
"@typescript-eslint/parser": "^4.22.0", "@typescript-eslint/parser": "^5.8.1",
"eslint": "^7.25.0", "eslint": "^8.6.0",
"eslint-config-prettier": "^8.3.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-nestjs": "^1.2.3",
"eslint-plugin-unused-imports": "^2.0.0", "eslint-plugin-unused-imports": "^2.0.0",
"jest": "^26.6.3", "jest": "^27.4.5",
"prettier": "^2.2.1", "prettier": "^2.5.1",
"supertest": "^6.1.3", "supertest": "^6.1.6",
"ts-jest": "26.5.5", "ts-jest": "27.1.2",
"ts-loader": "^9.1.1", "ts-loader": "^9.2.6",
"ts-node": "^9.1.1", "ts-node": "^10.4.0",
"tsconfig-paths": "^3.9.0", "tsconfig-paths": "^3.12.0",
"typescript": "^4.2.4" "typescript": "^4.5.4"
}, },
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [

View File

@ -1,5 +1,6 @@
import { MailerModule } from '@nestjs-modules/mailer' 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 { ConfigModule, ConfigService } from '@nestjs/config'
import { GraphQLModule } from '@nestjs/graphql' import { GraphQLModule } from '@nestjs/graphql'
import { JwtModule, JwtModuleOptions } from '@nestjs/jwt' import { JwtModule, JwtModuleOptions } from '@nestjs/jwt'
@ -9,18 +10,24 @@ import crypto from 'crypto'
import { Request } from 'express-serve-static-core' import { Request } from 'express-serve-static-core'
import { IncomingHttpHeaders } from 'http' import { IncomingHttpHeaders } from 'http'
import { ConsoleModule } from 'nestjs-console' 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 { join } from 'path'
import { serializeError } from 'serialize-error'
import { entities } from './entity' import { entities } from './entity'
export const LoggerConfig: LoggerModuleParams = { export const LoggerConfig: LoggerModuleParams = {
pinoHttp: { pinoHttp: {
level: process.env.CLI ? 'warn' : process.env.NODE_ENV !== 'production' ? 'debug' : 'info', level: process.env.CLI ? 'warn' : process.env.NODE_ENV !== 'production' ? 'debug' : 'info',
prettyPrint: process.env.NODE_ENV !== 'production' || process.env.CLI ? { serializers: {
translateTime: true, error: serializeError,
colorize: true, },
ignore: 'pid,hostname,req,res', transport: {
} : false, options: {
ignore: 'req,res,pid,hostname',
translateTime: true,
},
target: process.env.NODE_ENV !== 'production' || process.env.CLI ? 'pino-pretty' : undefined,
},
}, },
exclude: [ exclude: [
{ {
@ -30,7 +37,7 @@ export const LoggerConfig: LoggerModuleParams = {
{ {
method: RequestMethod.ALL, method: RequestMethod.ALL,
path: 'favicon.ico', path: 'favicon.ico',
} },
], ],
} }
@ -42,9 +49,7 @@ export const imports = [
}), }),
ServeStaticModule.forRoot({ ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'), rootPath: join(__dirname, '..', 'public'),
exclude: [ exclude: [],
]
}), }),
ConfigModule.forRoot({ ConfigModule.forRoot({
load: [ load: [
@ -53,7 +58,7 @@ export const imports = [
LOCALES_PATH: join(process.cwd(), 'locales'), LOCALES_PATH: join(process.cwd(), 'locales'),
SECRET_KEY: process.env.SECRET_KEY || crypto.randomBytes(20).toString('hex'), SECRET_KEY: process.env.SECRET_KEY || crypto.randomBytes(20).toString('hex'),
} }
} },
], ],
}), }),
JwtModule.registerAsync({ JwtModule.registerAsync({
@ -64,7 +69,7 @@ export const imports = [
signOptions: { signOptions: {
expiresIn: '4h', expiresIn: '4h',
}, },
}) }),
}), }),
LoggerModule.forRoot(LoggerConfig), LoggerModule.forRoot(LoggerConfig),
GraphQLModule.forRoot({ GraphQLModule.forRoot({
@ -72,8 +77,9 @@ export const imports = [
definitions: { definitions: {
outputAs: 'class', outputAs: 'class',
}, },
introspection: true, sortSchema: true,
playground: true, introspection: process.env.NODE_ENV !== 'production',
playground: process.env.NODE_ENV !== 'production',
installSubscriptionHandlers: true, installSubscriptionHandlers: true,
autoSchemaFile: join(process.cwd(), 'src/schema.gql'), autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
// to allow guards on resolver props https://github.com/nestjs/graphql/issues/295 // to allow guards on resolver props https://github.com/nestjs/graphql/issues/295
@ -94,8 +100,8 @@ export const imports = [
return { return {
req: { req: {
headers headers,
} as Request } as Request,
} }
} }
@ -107,7 +113,7 @@ export const imports = [
inject: [ConfigService], inject: [ConfigService],
useFactory: (configService: ConfigService): TypeOrmModuleOptions => { useFactory: (configService: ConfigService): TypeOrmModuleOptions => {
const type: any = configService.get<string>('DATABASE_DRIVER', 'sqlite') const type: any = configService.get<string>('DATABASE_DRIVER', 'sqlite')
let migrationFolder let migrationFolder: string
switch (type) { switch (type) {
case 'cockroachdb': case 'cockroachdb':
@ -138,9 +144,7 @@ export const imports = [
entityPrefix: configService.get<string>('DATABASE_TABLE_PREFIX', ''), entityPrefix: configService.get<string>('DATABASE_TABLE_PREFIX', ''),
logging: configService.get<string>('DATABASE_LOGGING', 'false') === 'true', logging: configService.get<string>('DATABASE_LOGGING', 'false') === 'true',
entities, entities,
migrations: [ migrations: [`${__dirname}/**/migrations/${migrationFolder}/**/*{.ts,.js}`],
`${__dirname}/**/migrations/${migrationFolder}/**/*{.ts,.js}`,
],
migrationsRun: configService.get<boolean>('DATABASE_MIGRATE', true), migrationsRun: configService.get<boolean>('DATABASE_MIGRATE', true),
}) })
}, },

View File

@ -1,5 +1,3 @@
import { UserCommand } from './user.command' import { UserCommand } from './user.command'
export const commands = [ export const commands = [UserCommand]
UserCommand,
]

View File

@ -1,11 +1,12 @@
import inquirer from 'inquirer' import inquirer from 'inquirer'
import { Command, Console } from 'nestjs-console' import { Command, Console } from 'nestjs-console'
import { matchType, validatePassword } from '../config/fields' import { matchType, validatePassword } from '../config/fields'
import { UserCreateInput } from '../dto/user/user.create.input'
import { UserCreateService } from '../service/user/user.create.service' import { UserCreateService } from '../service/user/user.create.service'
@Console({ @Console({
name: 'user', command: 'user',
description: 'handle instance users' description: 'handle instance users',
}) })
export class UserCommand { export class UserCommand {
constructor( constructor(
@ -17,7 +18,7 @@ export class UserCommand {
command: 'create', command: 'create',
}) })
async create(): Promise<void> { async create(): Promise<void> {
const answers = await inquirer.prompt([ const answers = await inquirer.prompt<UserCreateInput>([
{ {
type: 'input', type: 'input',
name: 'username', name: 'username',
@ -46,8 +47,8 @@ export class UserCommand {
name: 'create', name: 'create',
message: current => { message: current => {
return `create user ${current.username} with email ${current.email}` return `create user ${current.username} with email ${current.email}`
} },
} },
]) ])
await this.createUser.create(answers) await this.createUser.create(answers)

View File

@ -2,4 +2,6 @@
export type roleType = 'user' | 'admin' | 'superuser' export type roleType = 'user' | 'admin' | 'superuser'
export type rolesType = roleType[] export type rolesType = roleType[]
export const roles: rolesType = ['user', 'admin', 'superuser'] export const roles: rolesType = [
'user', 'admin', 'superuser',
]

View File

@ -1,5 +1,3 @@
import { HealthController } from './health.controller' import { HealthController } from './health.controller'
export const controllers = [ export const controllers = [HealthController]
HealthController,
]

View File

@ -3,7 +3,7 @@ import { Field, ObjectType } from '@nestjs/graphql'
@ObjectType('Deleted') @ObjectType('Deleted')
export class DeletedModel { export class DeletedModel {
@Field() @Field()
id: string id: string
constructor(id: string) { constructor(id: string) {
this.id = id this.id = id

View File

@ -1,6 +1,5 @@
import { Field, ID, InputType } from '@nestjs/graphql' import { Field, ID, InputType } from '@nestjs/graphql'
import { FormFieldLogicInput } from './form.field.logic.input' import { FormFieldLogicInput } from './form.field.logic.input'
import { FormFieldLogicModel } from './form.field.logic.model'
import { FormFieldOptionInput } from './form.field.option.input' import { FormFieldOptionInput } from './form.field.option.input'
import { FormFieldRatingInput } from './form.field.rating.input' import { FormFieldRatingInput } from './form.field.rating.input'

View File

@ -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' import { FormNotificationEntity } from '../../entity/form.notification.entity'
@ObjectType('FormNotification') @ObjectType('FormNotification')

View File

@ -5,16 +5,16 @@ import { FormModel } from './form.model'
@ObjectType('FormPager') @ObjectType('FormPager')
export class FormPagerModel { export class FormPagerModel {
@Field(() => [FormModel]) @Field(() => [FormModel])
entries: FormModel[] entries: FormModel[]
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
total: number total: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
limit: number limit: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
start: number start: number
constructor(entries: FormModel[], total: number, limit: number, start: number) { constructor(entries: FormModel[], total: number, limit: number, start: number) {
this.entries = entries this.entries = entries

View File

@ -1,5 +1,4 @@
import { Field, ID, ObjectType } from '@nestjs/graphql' import { Field, ID, ObjectType } from '@nestjs/graphql'
import { randomBytes } from 'crypto'
import { PageEntity } from '../../entity/page.entity' import { PageEntity } from '../../entity/page.entity'
import { ButtonModel } from './button.model' import { ButtonModel } from './button.model'

View File

@ -5,16 +5,16 @@ import { SettingModel } from './setting.model'
@ObjectType('SettingPager') @ObjectType('SettingPager')
export class SettingPagerModel { export class SettingPagerModel {
@Field(() => [SettingModel]) @Field(() => [SettingModel])
entries: SettingModel[] entries: SettingModel[]
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
total: number total: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
limit: number limit: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
start: number start: number
constructor(entries: SettingModel[], total: number, limit: number, start: number) { constructor(entries: SettingModel[], total: number, limit: number, start: number) {
this.entries = entries this.entries = entries

View File

@ -4,10 +4,10 @@ import { GeoLocationEmbedded } from '../../entity/embedded/geo.location.embedded
@ObjectType('GeoLocation') @ObjectType('GeoLocation')
export class GeoLocationModel { export class GeoLocationModel {
@Field({ nullable: true }) @Field({ nullable: true })
country?: string country?: string
@Field({ nullable: true }) @Field({ nullable: true })
city?: string city?: string
constructor(geo: GeoLocationEmbedded) { constructor(geo: GeoLocationEmbedded) {
this.country = geo.country this.country = geo.country

View File

@ -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 { SubmissionEntity } from '../../entity/submission.entity'
import { DeviceModel } from './device.model' import { DeviceModel } from './device.model'
import { GeoLocationModel } from './geo.location.model' import { GeoLocationModel } from './geo.location.model'

View File

@ -5,16 +5,16 @@ import { SubmissionModel } from './submission.model'
@ObjectType('SubmissionPager') @ObjectType('SubmissionPager')
export class SubmissionPagerModel { export class SubmissionPagerModel {
@Field(() => [SubmissionModel]) @Field(() => [SubmissionModel])
entries: SubmissionModel[] entries: SubmissionModel[]
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
total: number total: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
limit: number limit: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
start: number start: number
constructor(entries: SubmissionModel[], total: number, limit: number, start: number) { constructor(entries: SubmissionModel[], total: number, limit: number, start: number) {
this.entries = entries this.entries = entries

View File

@ -6,23 +6,23 @@ export class UserCreateInput {
@Field() @Field()
@MinLength(2) @MinLength(2)
@MaxLength(50) @MaxLength(50)
username: string username: string
@Field() @Field()
@IsEmail() @IsEmail()
@IsNotEmpty() @IsNotEmpty()
email: string email: string
@Field() @Field()
@MinLength(5) @MinLength(5)
password: string password: string
@Field({ nullable: true }) @Field({ nullable: true })
firstName?: string firstName?: string
@Field({ nullable: true }) @Field({ nullable: true })
lastName?: string lastName?: string
@Field({ nullable: true }) @Field({ nullable: true })
language?: string language?: string
} }

View File

@ -5,16 +5,16 @@ import { UserModel } from './user.model'
@ObjectType('UserPager') @ObjectType('UserPager')
export class UserPagerModel { export class UserPagerModel {
@Field(() => [UserModel]) @Field(() => [UserModel])
entries: UserModel[] entries: UserModel[]
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
total: number total: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
limit: number limit: number
@Field(() => GraphQLInt) @Field(() => GraphQLInt)
start: number start: number
constructor(entries: UserModel[], total: number, limit: number, start: number) { constructor(entries: UserModel[], total: number, limit: number, start: number) {
this.entries = entries this.entries = entries

View File

@ -20,6 +20,7 @@ export class UserUpdateInput {
@Field({ nullable: true }) @Field({ nullable: true })
readonly password: string readonly password: string
// TODO validate
@Field(() => [String], { nullable: true }) @Field(() => [String], { nullable: true })
readonly roles: string[] readonly roles: string[]

View File

@ -3,11 +3,11 @@ import { ColorsEmbedded } from './colors.embedded'
export class DesignEmbedded { export class DesignEmbedded {
@Column(() => ColorsEmbedded) @Column(() => ColorsEmbedded)
colors: ColorsEmbedded = new ColorsEmbedded() colors: ColorsEmbedded = new ColorsEmbedded()
@Column({ nullable: true }) @Column({ nullable: true })
font?: string font?: string
@Column({ nullable: true }) @Column({ nullable: true })
layout?: string layout?: string
} }

View File

@ -5,7 +5,7 @@ import {
ManyToOne, ManyToOne,
OneToMany, OneToMany,
PrimaryGeneratedColumn, PrimaryGeneratedColumn,
UpdateDateColumn UpdateDateColumn,
} from 'typeorm' } from 'typeorm'
import { AnalyticsEmbedded } from './embedded/analytics.embedded' import { AnalyticsEmbedded } from './embedded/analytics.embedded'
import { DesignEmbedded } from './embedded/design.embedded' import { DesignEmbedded } from './embedded/design.embedded'

View File

@ -4,8 +4,9 @@ import {
Entity, Entity,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
PrimaryGeneratedColumn, RelationId, PrimaryGeneratedColumn,
UpdateDateColumn RelationId,
UpdateDateColumn,
} from 'typeorm' } from 'typeorm'
import { DeviceEmbedded } from './embedded/device.embedded' import { DeviceEmbedded } from './embedded/device.embedded'
import { GeoLocationEmbedded } from './embedded/geo.location.embedded' import { GeoLocationEmbedded } from './embedded/geo.location.embedded'

View File

@ -1,5 +1,4 @@
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm' import { Column, Entity, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
import { FormEntity } from './form.entity'
import { FormFieldEntity } from './form.field.entity' import { FormFieldEntity } from './form.field.entity'
import { SubmissionEntity } from './submission.entity' import { SubmissionEntity } from './submission.entity'

View File

@ -5,7 +5,7 @@ import {
ManyToOne, ManyToOne,
OneToMany, OneToMany,
PrimaryGeneratedColumn, PrimaryGeneratedColumn,
UpdateDateColumn UpdateDateColumn,
} from 'typeorm' } from 'typeorm'
import { DeviceEmbedded } from './embedded/device.embedded' import { DeviceEmbedded } from './embedded/device.embedded'
import { GeoLocationEmbedded } from './embedded/geo.location.embedded' import { GeoLocationEmbedded } from './embedded/geo.location.embedded'

View File

@ -1,22 +1,29 @@
import { ExecutionContext, Injectable } from '@nestjs/common' import { ExecutionContext, Injectable } from '@nestjs/common'
import { GqlExecutionContext } from '@nestjs/graphql' import { GqlExecutionContext } from '@nestjs/graphql'
import { AuthGuard } from '@nestjs/passport' import { AuthGuard } from '@nestjs/passport'
import { UserEntity } from '../entity/user.entity'
import { ContextCache } from '../resolver/context.cache' import { ContextCache } from '../resolver/context.cache'
@Injectable() @Injectable()
export class GqlAuthGuard extends AuthGuard('jwt') { export class GqlAuthGuard extends AuthGuard('jwt') {
getRequest(context: ExecutionContext) { getRequest(context: ExecutionContext) {
const ctx = GqlExecutionContext.create(context); if (context.getType<any>() === 'graphql') {
if (!ctx.getContext().cache) { const ctx = GqlExecutionContext.create(context);
ctx.getContext().cache = new ContextCache()
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) { if (err) {
throw new Error('invalid token') throw new Error('invalid token')
} }
return user return user
} }
} }

View File

@ -1,13 +1,14 @@
import { NestApplicationOptions, ValidationPipe } from '@nestjs/common' import { NestApplicationOptions, ValidationPipe } from '@nestjs/common'
import { NestFactory } from '@nestjs/core' import { NestFactory } from '@nestjs/core'
import cors from 'cors' import cors from 'cors'
import { Logger, PinoLogger } from 'nestjs-pino/dist' import { Logger, PinoLogger } from 'nestjs-pino'
import { LoggerConfig } from './app.imports' import { LoggerConfig } from './app.imports'
import { AppModule } from './app.module' import { AppModule } from './app.module'
(async () => { (async () => {
const options: NestApplicationOptions = { const options: NestApplicationOptions = {
logger: new Logger(new PinoLogger(LoggerConfig), {}), logger: new Logger(new PinoLogger(LoggerConfig), {}),
bufferLogs: true,
} }
const app = await NestFactory.create(AppModule, options) const app = await NestFactory.create(AppModule, options)

View File

@ -1,74 +1,74 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class initial1619723437787 implements MigrationInterface { export class initial1619723437787 implements MigrationInterface {
name = 'initial1619723437787' name = 'initial1619723437787'
public async up(queryRunner: QueryRunner): Promise<void> { 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_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_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_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_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 `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_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 `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 `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 `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 `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 `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('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_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_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_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_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_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_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_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 `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 `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_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 `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 `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_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_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 `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_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_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('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> { 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_e5d158932e43cfbf9958931ee01`');
await queryRunner.query("ALTER TABLE `form` DROP FOREIGN KEY `FK_023d9cf1d97e93facc96c86ca70`"); 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 `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_7bd626272858ef6464aa2579094`');
await queryRunner.query("ALTER TABLE `submission` DROP FOREIGN KEY `FK_95b73c7faf2c199f005fda5e8c8`"); 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 `submission` DROP FOREIGN KEY `FK_6090e1d5cbf3433ffd14e3b53e7`');
await queryRunner.query("ALTER TABLE `form_visitor` DROP FOREIGN KEY `FK_72ade6c3a3e55d1fce94300f8b6`"); 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_5befa92da2370b7eb1cab6ae30a`');
await queryRunner.query("ALTER TABLE `submission_field` DROP FOREIGN KEY `FK_16fae661ce5b10f27abe2e524a0`"); 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 `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_4915ebae53e09b732322d0ff6ed`');
await queryRunner.query("ALTER TABLE `form_notification` DROP FOREIGN KEY `FK_0876741ce2acdaee4553d7a3bbd`"); 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_notification` DROP FOREIGN KEY `FK_a9ed55144108ded893b502d6321`');
await queryRunner.query("ALTER TABLE `form_hook` DROP FOREIGN KEY `FK_bbeb4d224d8857fd5a458538a30`"); 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` 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_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_4a8019f2b753cfb3216dc3001a6`');
await queryRunner.query("ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_6098b83f6759445d8cfdd03d545`"); await queryRunner.query('ALTER TABLE `form_field_logic` DROP FOREIGN KEY `FK_6098b83f6759445d8cfdd03d545`');
await queryRunner.query("DROP TABLE `form`"); await queryRunner.query('DROP TABLE `form`');
await queryRunner.query("DROP TABLE `submission`"); await queryRunner.query('DROP TABLE `submission`');
await queryRunner.query("DROP TABLE `form_visitor`"); await queryRunner.query('DROP TABLE `form_visitor`');
await queryRunner.query("DROP INDEX `IDX_78a916df40e02a9deb1c4b75ed` ON `user`"); await queryRunner.query('DROP INDEX `IDX_78a916df40e02a9deb1c4b75ed` ON `user`');
await queryRunner.query("DROP INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` ON `user`"); await queryRunner.query('DROP INDEX `IDX_e12875dfb3b1d92d7d7c5377e2` ON `user`');
await queryRunner.query("DROP TABLE `user`"); await queryRunner.query('DROP TABLE `user`');
await queryRunner.query("DROP TABLE `submission_field`"); await queryRunner.query('DROP TABLE `submission_field`');
await queryRunner.query("DROP TABLE `page`"); await queryRunner.query('DROP TABLE `page`');
await queryRunner.query("DROP TABLE `page_button`"); await queryRunner.query('DROP TABLE `page_button`');
await queryRunner.query("DROP TABLE `form_notification`"); await queryRunner.query('DROP TABLE `form_notification`');
await queryRunner.query("DROP TABLE `form_hook`"); await queryRunner.query('DROP TABLE `form_hook`');
await queryRunner.query("DROP TABLE `form_field`"); await queryRunner.query('DROP TABLE `form_field`');
await queryRunner.query("DROP TABLE `form_field_option`"); await queryRunner.query('DROP TABLE `form_field_option`');
await queryRunner.query("DROP TABLE `form_field_logic`"); await queryRunner.query('DROP TABLE `form_field_logic`');
} }
} }

View File

@ -1,14 +1,14 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class layout1621078163528 implements MigrationInterface { export class layout1621078163528 implements MigrationInterface {
name = 'layout1621078163528' name = 'layout1621078163528'
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `form` ADD `designLayout` varchar(255) NULL"); await queryRunner.query('ALTER TABLE `form` ADD `designLayout` varchar(255) NULL');
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query("ALTER TABLE `form` DROP COLUMN `designLayout`"); await queryRunner.query('ALTER TABLE `form` DROP COLUMN `designLayout`');
} }
} }

View File

@ -1,59 +1,59 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class initial1619723437787 implements MigrationInterface { export class initial1619723437787 implements MigrationInterface {
name = 'initial1619723437787' name = 'initial1619723437787'
public async up(queryRunner: QueryRunner): Promise<void> { 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_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_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_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_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 "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_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 "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 "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 "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 "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 "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('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_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_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_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_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_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_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_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 "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 "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_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 "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 "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_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_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 "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_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_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('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> { 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_e5d158932e43cfbf9958931ee01"');
await queryRunner.query(`ALTER TABLE "form" DROP CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70"`); 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 "form" DROP CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd"');
await queryRunner.query(`ALTER TABLE "submission" DROP CONSTRAINT "FK_7bd626272858ef6464aa2579094"`); 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_95b73c7faf2c199f005fda5e8c8"');
await queryRunner.query(`ALTER TABLE "submission" DROP CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7"`); 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 "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_5befa92da2370b7eb1cab6ae30a"');
await queryRunner.query(`ALTER TABLE "submission_field" DROP CONSTRAINT "FK_16fae661ce5b10f27abe2e524a0"`); 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 "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_4915ebae53e09b732322d0ff6ed"');
await queryRunner.query(`ALTER TABLE "form_notification" DROP CONSTRAINT "FK_0876741ce2acdaee4553d7a3bbd"`); 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_notification" DROP CONSTRAINT "FK_a9ed55144108ded893b502d6321"');
await queryRunner.query(`ALTER TABLE "form_hook" DROP CONSTRAINT "FK_bbeb4d224d8857fd5a458538a30"`); 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" DROP CONSTRAINT "FK_2d83d8a334dd66445db13f92b77"');
await queryRunner.query(`ALTER TABLE "form_field_option" DROP CONSTRAINT "FK_c4484ad12c2c56db31dffdbfe97"`); 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_4a8019f2b753cfb3216dc3001a6"');
await queryRunner.query(`ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_6098b83f6759445d8cfdd03d545"`); await queryRunner.query('ALTER TABLE "form_field_logic" DROP CONSTRAINT "FK_6098b83f6759445d8cfdd03d545"');
} }
} }

View File

@ -1,14 +1,14 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class layout1621078163528 implements MigrationInterface { export class layout1621078163528 implements MigrationInterface {
name = 'layout1621078163528' name = 'layout1621078163528'
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "form" ADD "designLayout" character varying`); await queryRunner.query('ALTER TABLE "form" ADD "designLayout" character varying');
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "form" DROP COLUMN "designLayout"`); await queryRunner.query('ALTER TABLE "form" DROP COLUMN "designLayout"');
} }
} }

View File

@ -1,35 +1,35 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class initial1619723437787 implements MigrationInterface { export class initial1619723437787 implements MigrationInterface {
name = 'initial1619723437787' name = 'initial1619723437787'
public async up(queryRunner: QueryRunner): Promise<void> { 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 "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 "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_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_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_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_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 "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 "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 "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 "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 "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 "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> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "form"`); await queryRunner.query('DROP TABLE "form"');
await queryRunner.query(`DROP TABLE "submission"`); await queryRunner.query('DROP TABLE "submission"');
await queryRunner.query(`DROP TABLE "form_visitor"`); await queryRunner.query('DROP TABLE "form_visitor"');
await queryRunner.query(`DROP TABLE "user"`); await queryRunner.query('DROP TABLE "user"');
await queryRunner.query(`DROP TABLE "submission_field"`); await queryRunner.query('DROP TABLE "submission_field"');
await queryRunner.query(`DROP TABLE "page"`); await queryRunner.query('DROP TABLE "page"');
await queryRunner.query(`DROP TABLE "page_button"`); await queryRunner.query('DROP TABLE "page_button"');
await queryRunner.query(`DROP TABLE "form_notification"`); await queryRunner.query('DROP TABLE "form_notification"');
await queryRunner.query(`DROP TABLE "form_hook"`); await queryRunner.query('DROP TABLE "form_hook"');
await queryRunner.query(`DROP TABLE "form_field"`); await queryRunner.query('DROP TABLE "form_field"');
await queryRunner.query(`DROP TABLE "form_field_option"`); await queryRunner.query('DROP TABLE "form_field_option"');
await queryRunner.query(`DROP TABLE "form_field_logic"`); await queryRunner.query('DROP TABLE "form_field_logic"');
} }
} }

View File

@ -1,14 +1,14 @@
import { MigrationInterface, QueryRunner } from "typeorm" import { MigrationInterface, QueryRunner } from 'typeorm'
export class layout1621078163528 implements MigrationInterface { export class layout1621078163528 implements MigrationInterface {
name = 'layout1621078163528' name = 'layout1621078163528'
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "form" ADD "designLayout" character varying`); await queryRunner.query('ALTER TABLE "form" ADD "designLayout" character varying');
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "form" DROP COLUMN "designLayout"`); await queryRunner.query('ALTER TABLE "form" DROP COLUMN "designLayout"');
} }
} }

View File

@ -1,6 +1,6 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { Args, Mutation } from '@nestjs/graphql' 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 { AuthJwtModel } from '../../dto/auth/auth.jwt.model'
import { UserCreateInput } from '../../dto/user/user.create.input' import { UserCreateInput } from '../../dto/user/user.create.input'
import { AuthService } from '../../service/auth/auth.service' import { AuthService } from '../../service/auth/auth.service'
@ -15,6 +15,7 @@ export class AuthRegisterResolver {
private readonly auth: AuthService, private readonly auth: AuthService,
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
) { ) {
logger.setContext(this.constructor.name)
} }
@Mutation(() => AuthJwtModel) @Mutation(() => AuthJwtModel)

View File

@ -1,13 +1,6 @@
import { Args, Context, ID, Parent, Query, ResolveField, Resolver } from '@nestjs/graphql' import { Args, Context, ID, Query, Resolver } from '@nestjs/graphql'
import { Roles } from '../../decorator/roles.decorator'
import { User } from '../../decorator/user.decorator' 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 { 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 { FormEntity } from '../../entity/form.entity'
import { UserEntity } from '../../entity/user.entity' import { UserEntity } from '../../entity/user.entity'
import { FormService } from '../../service/form/form.service' import { FormService } from '../../service/form/form.service'

View File

@ -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 { Roles } from '../../decorator/roles.decorator'
import { User } from '../../decorator/user.decorator' import { User } from '../../decorator/user.decorator'
import { DesignModel } from '../../dto/form/design.model' import { DesignModel } from '../../dto/form/design.model'
@ -39,7 +39,7 @@ export class FormResolver {
): Promise<FormHookModel[]> { ): Promise<FormHookModel[]> {
const form = await cache.get<FormEntity>(cache.getCacheKey(FormEntity.name, parent.id)) 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) @ResolveField('isLive', () => Boolean)

View File

@ -40,8 +40,12 @@ export class UserResolver {
) )
} }
async returnFieldForSuperuser<T>(parent: UserEntity, user: UserEntity, callback: (user: UserEntity) => T): Promise<T> { async returnFieldForSuperuser<T>(
if (user.id !== parent.id && !await this.userService.isSuperuser(user)) { 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') throw new Error('No access to roles')
} }

View File

@ -1,6 +1,6 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { JwtService } from '@nestjs/jwt' 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 { AuthJwtModel } from '../../dto/auth/auth.jwt.model'
import { UserEntity } from '../../entity/user.entity' import { UserEntity } from '../../entity/user.entity'
import { UserService } from '../user/user.service' import { UserService } from '../user/user.service'
@ -13,7 +13,9 @@ export class AuthService {
private jwtService: JwtService, private jwtService: JwtService,
private passwordService: PasswordService, private passwordService: PasswordService,
private logger: PinoLogger, private logger: PinoLogger,
) {} ) {
logger.setContext(this.constructor.name)
}
async validateUser(username: string, password: string): Promise<UserEntity> { async validateUser(username: string, password: string): Promise<UserEntity> {
// TODO only allow login for verified users! // TODO only allow login for verified users!
@ -30,7 +32,7 @@ export class AuthService {
return null; return null;
} }
async login(user: UserEntity): Promise<AuthJwtModel> { public login(user: UserEntity): AuthJwtModel {
return new AuthJwtModel({ return new AuthJwtModel({
accessToken: this.jwtService.sign({ accessToken: this.jwtService.sign({
username: user.username, username: user.username,

View File

@ -4,7 +4,7 @@ import * as crypto from 'crypto'
@Injectable() @Injectable()
export class PasswordService { 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] === '$') { if (hash[0] === '$') {
return await bcrypt.compare(password, hash) return await bcrypt.compare(password, hash)
} }
@ -23,7 +23,7 @@ export class PasswordService {
).toString('base64'); ).toString('base64');
} }
hash (password): Promise<string> { public hash(password: string): Promise<string> {
return bcrypt.hash(password, 4) return bcrypt.hash(password, 4)
} }
} }

View File

@ -1,9 +1,7 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm' import { InjectRepository } from '@nestjs/typeorm'
import { Repository } from 'typeorm' import { Repository } from 'typeorm'
import { FormEntity } from '../../entity/form.entity'
import { FormFieldEntity } from '../../entity/form.field.entity' import { FormFieldEntity } from '../../entity/form.field.entity'
import { UserEntity } from '../../entity/user.entity'
@Injectable() @Injectable()
export class FormFieldService { export class FormFieldService {

View File

@ -2,7 +2,7 @@ import { ConfigService } from '@nestjs/config'
import { RedisPubSub } from 'graphql-redis-subscriptions' import { RedisPubSub } from 'graphql-redis-subscriptions'
import { PubSub, PubSubEngine } from 'graphql-subscriptions' import { PubSub, PubSubEngine } from 'graphql-subscriptions'
import Redis from 'ioredis' import Redis from 'ioredis'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { authServices } from './auth' import { authServices } from './auth'
import { formServices } from './form' import { formServices } from './form'
import { InstallationMetricsService } from './installation.metrics.service' import { InstallationMetricsService } from './installation.metrics.service'
@ -42,6 +42,6 @@ export const services = [
publisher: new Redis(options), publisher: new Redis(options),
subscriber: new Redis(options), subscriber: new Redis(options),
}) })
} },
}, },
] ]

View File

@ -1,7 +1,7 @@
import { Injectable, OnApplicationBootstrap } from '@nestjs/common' import { Injectable, OnApplicationBootstrap } from '@nestjs/common'
import { ConfigService } from '@nestjs/config' import { ConfigService } from '@nestjs/config'
import MatomoTracker from 'matomo-tracker' import MatomoTracker from 'matomo-tracker'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
@Injectable() @Injectable()
export class InstallationMetricsService implements OnApplicationBootstrap { export class InstallationMetricsService implements OnApplicationBootstrap {
@ -11,6 +11,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
private readonly configService: ConfigService, private readonly configService: ConfigService,
) { ) {
logger.setContext(this.constructor.name)
} }
async onApplicationBootstrap(): Promise<void> { async onApplicationBootstrap(): Promise<void> {
@ -29,7 +30,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
tracker.track({ tracker.track({
url: `http://localhost/version/${process.env.version}`, url: `http://localhost/version/${process.env.version}`,
action_name: 'startup', action_name: 'startup',
ua: process.arch ua: process.arch,
}) })
setInterval(() => { setInterval(() => {
@ -37,7 +38,7 @@ export class InstallationMetricsService implements OnApplicationBootstrap {
tracker.track({ tracker.track({
url: `http://localhost/version/${process.env.version}`, url: `http://localhost/version/${process.env.version}`,
action_name: 'running', action_name: 'running',
ua: process.arch ua: process.arch,
}) })
}, 24 * 60 * 60 * 1000) }, 24 * 60 * 60 * 1000)
} }

View File

@ -5,7 +5,7 @@ import fs from 'fs'
import handlebars from 'handlebars' import handlebars from 'handlebars'
import htmlToText from 'html-to-text' import htmlToText from 'html-to-text'
import mjml2html from 'mjml' import mjml2html from 'mjml'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { join } from 'path' import { join } from 'path'
import { defaultLanguage } from '../config/languages' import { defaultLanguage } from '../config/languages'
@ -31,7 +31,7 @@ export class MailService {
fs.readFileSync(path).toString('utf-8') fs.readFileSync(path).toString('utf-8')
)(context), )(context),
{ {
minify: true minify: true,
} }
).html ).html

View File

@ -1,5 +1,3 @@
import { ProfileUpdateService } from './profile.update.service' import { ProfileUpdateService } from './profile.update.service'
export const profileServices = [ export const profileServices = [ProfileUpdateService]
ProfileUpdateService,
]

View File

@ -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 handlebars from 'handlebars'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { SubmissionEntity } from '../../entity/submission.entity' import { SubmissionEntity } from '../../entity/submission.entity'
@Injectable() @Injectable()
@ -9,6 +10,7 @@ export class SubmissionHookService {
private httpService: HttpService, private httpService: HttpService,
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
) { ) {
logger.setContext(this.constructor.name)
} }
public async process(submission: SubmissionEntity): Promise<void> { public async process(submission: SubmissionEntity): Promise<void> {
@ -20,7 +22,7 @@ export class SubmissionHookService {
try { try {
const response = await this.httpService.post( const response = await this.httpService.post(
hook.url, hook.url,
await this.format(submission, hook.format) this.format(submission, hook.format)
).toPromise() ).toPromise()
console.log('sent hook', response.data) 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 = {} const fields = {}
submission.form.fields.forEach((field) => { submission.form.fields.forEach((field) => {
fields[field.id] = field fields[field.id] = field
@ -47,9 +49,9 @@ export class SubmissionHookService {
return { return {
field: submissionField.field.id, field: submissionField.field.id,
slug: submissionField.field.slug || null, slug: submissionField.field.slug || null,
value: submissionField.field.value value: submissionField.field.value,
} }
}) }),
} }
if (!format) { if (!format) {

View File

@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'
import handlebars from 'handlebars' import handlebars from 'handlebars'
import htmlToText from 'html-to-text' import htmlToText from 'html-to-text'
import mjml2html from 'mjml' import mjml2html from 'mjml'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { SubmissionEntity } from '../../entity/submission.entity' import { SubmissionEntity } from '../../entity/submission.entity'
@Injectable() @Injectable()
@ -12,6 +12,7 @@ export class SubmissionNotificationService {
private readonly nestMailer: MailerService, private readonly nestMailer: MailerService,
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
) { ) {
logger.setContext(this.constructor.name)
} }
public async process(submission: SubmissionEntity): Promise<void> { public async process(submission: SubmissionEntity): Promise<void> {
@ -31,7 +32,7 @@ export class SubmissionNotificationService {
// TODO add variables // TODO add variables
}), }),
{ {
minify: true minify: true,
} }
).html ).html
@ -40,7 +41,7 @@ export class SubmissionNotificationService {
replyTo: from, replyTo: from,
subject: notification.subject, subject: notification.subject,
html, html,
text: htmlToText.fromString(html) text: htmlToText.fromString(html),
}) })
console.log('sent notification to', to) console.log('sent notification to', to)
} catch (e) { } catch (e) {

View File

@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm' import { InjectRepository } from '@nestjs/typeorm'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { Repository } from 'typeorm' import { Repository } from 'typeorm'
import { SubmissionSetFieldInput } from '../../dto/submission/submission.set.field.input' import { SubmissionSetFieldInput } from '../../dto/submission/submission.set.field.input'
import { SubmissionEntity } from '../../entity/submission.entity' import { SubmissionEntity } from '../../entity/submission.entity'
@ -20,6 +20,7 @@ export class SubmissionSetFieldService {
private readonly notifications: SubmissionNotificationService, private readonly notifications: SubmissionNotificationService,
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
) { ) {
logger.setContext(this.constructor.name)
} }
async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise<void> { async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise<void> {

View File

@ -1,6 +1,6 @@
import { Injectable, OnApplicationBootstrap } from '@nestjs/common' import { Injectable, OnApplicationBootstrap } from '@nestjs/common'
import { ConfigService } from '@nestjs/config' import { ConfigService } from '@nestjs/config'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { UserCreateService } from './user.create.service' import { UserCreateService } from './user.create.service'
import { UserService } from './user.service' import { UserService } from './user.service'
@ -12,12 +12,15 @@ export class BootService implements OnApplicationBootstrap {
private readonly configService: ConfigService, private readonly configService: ConfigService,
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
) { ) {
logger.setContext(this.constructor.name)
} }
async onApplicationBootstrap(): Promise<void> { async onApplicationBootstrap(): Promise<void> {
const create = this.configService.get<string>('CREATE_ADMIN', 'false') 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 return
} }
@ -46,7 +49,9 @@ export class BootService implements OnApplicationBootstrap {
username, username,
email, email,
password, password,
}, ['user', 'admin', 'superuser']) }, [
'user', 'admin', 'superuser',
])
} catch (e) { } catch (e) {
this.logger.error({ this.logger.error({
error: e, error: e,

View File

@ -1,6 +1,6 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm' import { InjectRepository } from '@nestjs/typeorm'
import { PinoLogger } from 'nestjs-pino/dist' import { PinoLogger } from 'nestjs-pino'
import { Repository } from 'typeorm' import { Repository } from 'typeorm'
import { rolesType } from '../../config/roles' import { rolesType } from '../../config/roles'
import { UserCreateInput } from '../../dto/user/user.create.input' import { UserCreateInput } from '../../dto/user/user.create.input'
@ -18,14 +18,20 @@ export class UserCreateService {
private readonly logger: PinoLogger, private readonly logger: PinoLogger,
private readonly passwordService: PasswordService, private readonly passwordService: PasswordService,
private readonly settingService: SettingService, private readonly settingService: SettingService,
) {} ) {
logger.setContext(this.constructor.name)
}
private async getDefaultRoles(): Promise<rolesType> { private async getDefaultRoles(): Promise<rolesType> {
const roleSetting = await this.settingService.getByKey('DEFAULT_ROLE') const roleSetting = await this.settingService.getByKey('DEFAULT_ROLE')
switch (roleSetting.value) { switch (roleSetting.value) {
case 'superuser': case 'superuser':
return ['superuser', 'admin', 'user'] return [
'superuser',
'admin',
'user',
]
case 'admin': case 'admin':
return ['admin', 'user'] return ['admin', 'user']

View File

@ -11,7 +11,7 @@ export class UserService {
) { ) {
} }
async isSuperuser(user: UserEntity): Promise<boolean> { isSuperuser(user: UserEntity): boolean {
return user.roles.includes('superuser') return user.roles.includes('superuser')
} }

View File

@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common' import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm' import { InjectRepository } from '@nestjs/typeorm'
import { Repository } from 'typeorm' import { Repository } from 'typeorm'
import { rolesType } from '../../config/roles'
import { UserUpdateInput } from '../../dto/user/user.update.input' import { UserUpdateInput } from '../../dto/user/user.update.input'
import { UserEntity } from '../../entity/user.entity' import { UserEntity } from '../../entity/user.entity'
import { PasswordService } from '../auth/password.service' import { PasswordService } from '../auth/password.service'
@ -32,7 +33,7 @@ export class UserUpdateService {
} }
if (input.roles !== undefined) { if (input.roles !== undefined) {
user.roles = input.roles as any user.roles = input.roles as rolesType
} }
if (input.language !== undefined) { if (input.language !== undefined) {

View File

@ -7,6 +7,7 @@
"esModuleInterop": true, "esModuleInterop": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"target": "es2017", "target": "es2017",
"skipLibCheck": true,
"sourceMap": true, "sourceMap": true,
"outDir": "./dist", "outDir": "./dist",
"baseUrl": "./", "baseUrl": "./",

7109
yarn.lock

File diff suppressed because it is too large Load Diff