Added database seeder for creating fake users

This commit is contained in:
Norbi Peti 2022-02-05 18:28:53 +01:00
parent 3fe37ac6e0
commit bf6e34fd56
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
8 changed files with 318 additions and 4 deletions

View file

@ -16,6 +16,7 @@
"@loopback/rest": "^10.1.0",
"@loopback/rest-explorer": "^3.3.4",
"@loopback/service-proxy": "^3.2.4",
"faker": "^5.5.3",
"loopback-connector-mysql": "^5.4.4",
"tslib": "^2.0.0"
},
@ -25,6 +26,7 @@
"@loopback/testlab": "^3.4.4",
"@types/node": "^10.17.60",
"eslint": "^7.32.0",
"mockingbird": "^2.1.2",
"source-map-support": "^0.5.20",
"tsc-watch": "^4.5.0",
"typescript": "~4.4.4"
@ -1039,6 +1041,38 @@
"node": "^10.16 || 12 || 14 || 16"
}
},
"node_modules/@mockingbird/common": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@mockingbird/common/-/common-2.0.3.tgz",
"integrity": "sha512-HD/wHlbdyL4wq3kM89HzIymgP+hBb17uWvT8ILcBuTTz0s42MaBFwSJgUj7qMc1p62Url4yGox5fEBqrzc1bcg==",
"dev": true,
"dependencies": {
"@types/faker": "^5.5.7",
"faker": "^5.5.3"
}
},
"node_modules/@mockingbird/parser": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@mockingbird/parser/-/parser-3.0.2.tgz",
"integrity": "sha512-UgwYwquxzOWgzrA3sHq/buaIUwzB+dJHCtaT8ZV244v3FKDRMLfqzHLulh4RV5dyVztGceU2ytMHcRFgASIcSg==",
"dev": true,
"dependencies": {
"@mockingbird/reflect": "^3.0.2",
"randexp": "^0.5.3",
"typedi": "^0.10.0"
}
},
"node_modules/@mockingbird/reflect": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@mockingbird/reflect/-/reflect-3.0.2.tgz",
"integrity": "sha512-gvkoO6NthV80nyarVNaBRpWEm1mlk/brxbcWT82Z1z84tTtrZev0bTb86oRhU1c29MIKzfh3VCkzIRc/2ooWSA==",
"dev": true,
"dependencies": {
"@plumier/reflect": "^1.0.5",
"reflect-metadata": "^0.1.13",
"tslib": "^2.3.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -1082,6 +1116,29 @@
"fast-deep-equal": "^3.1.3"
}
},
"node_modules/@plumier/reflect": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@plumier/reflect/-/reflect-1.0.6.tgz",
"integrity": "sha512-T/wkxlrXZ3qJV07YFC67I5HXlI1E2D7Kmq7skZxu7KEoqjMWrTEpvug2mJ7tze0WeDtPerl9C9m55lk+0+Ipyw==",
"dev": true,
"dependencies": {
"@types/acorn": "4.0.6",
"acorn": "8.5.0",
"reflect-metadata": "^0.1.13"
}
},
"node_modules/@plumier/reflect/node_modules/acorn": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@ -1117,6 +1174,15 @@
"integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
"dev": true
},
"node_modules/@types/acorn": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
"integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
"dev": true,
"dependencies": {
"@types/estree": "*"
}
},
"node_modules/@types/bcryptjs": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
@ -1168,6 +1234,12 @@
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
"version": "0.0.50",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
"dev": true
},
"node_modules/@types/express": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@ -1194,6 +1266,12 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz",
"integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw=="
},
"node_modules/@types/faker": {
"version": "5.5.9",
"resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.9.tgz",
"integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==",
"dev": true
},
"node_modules/@types/fs-extra": {
"version": "9.0.13",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
@ -2330,6 +2408,15 @@
"tslib": "^2.0.3"
}
},
"node_modules/drange": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz",
"integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@ -2965,6 +3052,11 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/faker": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz",
"integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g=="
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -4727,6 +4819,17 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/mockingbird": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/mockingbird/-/mockingbird-2.1.2.tgz",
"integrity": "sha512-FxPChvI9QVY/mq4Mx8b2JWpbBZNunP7ab539uyJvGI4+JxLDJ6S4w4xHEKbqnM7S9RcSmeUShNEKeoa6g8GV8g==",
"dev": true,
"dependencies": {
"@mockingbird/common": "^2.0.3",
"@mockingbird/parser": "^3.0.2",
"@mockingbird/reflect": "^3.0.2"
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -5694,6 +5797,19 @@
"integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==",
"dev": true
},
"node_modules/randexp": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz",
"integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==",
"dev": true,
"dependencies": {
"drange": "^1.0.2",
"ret": "^0.2.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@ -5854,6 +5970,15 @@
"node": ">=4"
}
},
"node_modules/ret": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
"integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@ -6729,6 +6854,12 @@
"is-typedarray": "^1.0.0"
}
},
"node_modules/typedi": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/typedi/-/typedi-0.10.0.tgz",
"integrity": "sha512-v3UJF8xm68BBj6AF4oQML3ikrfK2c9EmZUyLOfShpJuItAqVBHWP/KtpGinkSsIiP6EZyyb6Z3NXyW9dgS9X1w==",
"dev": true
},
"node_modules/typescript": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
@ -7794,6 +7925,38 @@
"tslib": "^2.3.1"
}
},
"@mockingbird/common": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@mockingbird/common/-/common-2.0.3.tgz",
"integrity": "sha512-HD/wHlbdyL4wq3kM89HzIymgP+hBb17uWvT8ILcBuTTz0s42MaBFwSJgUj7qMc1p62Url4yGox5fEBqrzc1bcg==",
"dev": true,
"requires": {
"@types/faker": "^5.5.7",
"faker": "^5.5.3"
}
},
"@mockingbird/parser": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@mockingbird/parser/-/parser-3.0.2.tgz",
"integrity": "sha512-UgwYwquxzOWgzrA3sHq/buaIUwzB+dJHCtaT8ZV244v3FKDRMLfqzHLulh4RV5dyVztGceU2ytMHcRFgASIcSg==",
"dev": true,
"requires": {
"@mockingbird/reflect": "^3.0.2",
"randexp": "^0.5.3",
"typedi": "^0.10.0"
}
},
"@mockingbird/reflect": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@mockingbird/reflect/-/reflect-3.0.2.tgz",
"integrity": "sha512-gvkoO6NthV80nyarVNaBRpWEm1mlk/brxbcWT82Z1z84tTtrZev0bTb86oRhU1c29MIKzfh3VCkzIRc/2ooWSA==",
"dev": true,
"requires": {
"@plumier/reflect": "^1.0.5",
"reflect-metadata": "^0.1.13",
"tslib": "^2.3.0"
}
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -7828,6 +7991,25 @@
"fast-deep-equal": "^3.1.3"
}
},
"@plumier/reflect": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@plumier/reflect/-/reflect-1.0.6.tgz",
"integrity": "sha512-T/wkxlrXZ3qJV07YFC67I5HXlI1E2D7Kmq7skZxu7KEoqjMWrTEpvug2mJ7tze0WeDtPerl9C9m55lk+0+Ipyw==",
"dev": true,
"requires": {
"@types/acorn": "4.0.6",
"acorn": "8.5.0",
"reflect-metadata": "^0.1.13"
},
"dependencies": {
"acorn": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true
}
}
},
"@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@ -7863,6 +8045,15 @@
"integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
"dev": true
},
"@types/acorn": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
"integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
"dev": true,
"requires": {
"@types/estree": "*"
}
},
"@types/bcryptjs": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
@ -7918,6 +8109,12 @@
"@types/ms": "*"
}
},
"@types/estree": {
"version": "0.0.50",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
"dev": true
},
"@types/express": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@ -7946,6 +8143,12 @@
}
}
},
"@types/faker": {
"version": "5.5.9",
"resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.9.tgz",
"integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==",
"dev": true
},
"@types/fs-extra": {
"version": "9.0.13",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
@ -8847,6 +9050,12 @@
"tslib": "^2.0.3"
}
},
"drange": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz",
"integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==",
"dev": true
},
"duplexer": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@ -9333,6 +9542,11 @@
}
}
},
"faker": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz",
"integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g=="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -10681,6 +10895,17 @@
}
}
},
"mockingbird": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/mockingbird/-/mockingbird-2.1.2.tgz",
"integrity": "sha512-FxPChvI9QVY/mq4Mx8b2JWpbBZNunP7ab539uyJvGI4+JxLDJ6S4w4xHEKbqnM7S9RcSmeUShNEKeoa6g8GV8g==",
"dev": true,
"requires": {
"@mockingbird/common": "^2.0.3",
"@mockingbird/parser": "^3.0.2",
"@mockingbird/reflect": "^3.0.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -11422,6 +11647,16 @@
"integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==",
"dev": true
},
"randexp": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz",
"integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==",
"dev": true,
"requires": {
"drange": "^1.0.2",
"ret": "^0.2.0"
}
},
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@ -11550,6 +11785,12 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"ret": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
"integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==",
"dev": true
},
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@ -12236,6 +12477,12 @@
"is-typedarray": "^1.0.0"
}
},
"typedi": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/typedi/-/typedi-0.10.0.tgz",
"integrity": "sha512-v3UJF8xm68BBj6AF4oQML3ikrfK2c9EmZUyLOfShpJuItAqVBHWP/KtpGinkSsIiP6EZyyb6Z3NXyW9dgS9X1w==",
"dev": true
},
"typescript": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",

View file

@ -58,6 +58,7 @@
"@loopback/rest": "^10.1.0",
"@loopback/rest-explorer": "^3.3.4",
"@loopback/service-proxy": "^3.2.4",
"faker": "^5.5.3",
"loopback-connector-mysql": "^5.4.4",
"tslib": "^2.0.0"
},
@ -67,6 +68,7 @@
"@loopback/testlab": "^3.4.4",
"@types/node": "^10.17.60",
"eslint": "^7.32.0",
"mockingbird": "^2.1.2",
"source-map-support": "^0.5.20",
"tsc-watch": "^4.5.0",
"typescript": "~4.4.4"

View file

@ -0,0 +1 @@
export * from './user-seeder.observer';

View file

@ -0,0 +1,62 @@
import { lifeCycleObserver, LifeCycleObserver, } from '@loopback/core';
import { UserRepository } from '../repositories';
import { User } from '../models';
import { Mock, MockFactory } from 'mockingbird';
import { genSalt, hash } from 'bcryptjs';
import { repository } from '@loopback/repository';
/**
* This class will be bound to the application as a `LifeCycleObserver` during
* `boot`
*/
@lifeCycleObserver('Seeders')
export class UserSeederObserver implements LifeCycleObserver {
constructor(
@repository(UserRepository) private repository: UserRepository
) {
}
MAX_USERS = 100;
/**
* This method will be invoked when the application starts.
*/
async start(): Promise<void> {
if ((await this.repository.count()).count > 0) {
return;
}
console.log('Creating users');
const transaction = await this.repository.beginTransaction();
try {
await this.repository.create({
email: 'admin@inf.u-szeged.hu',
name: 'Teszt Admin',
password: await hash('Jelszó 123', await genSalt()),
isAdmin: true
});
const users = MockFactory(StudentMock).many(this.MAX_USERS);
let c = 0;
for (const user of users) {
user.password = await hash('Jelszó 123', await genSalt());
if (c >= this.MAX_USERS / 4) {
user.email = user.name.split(' ')[1].toLowerCase() + '@inf.u-szeged.hu';
}
await this.repository.create(user);
c++;
}
await transaction.commit();
} catch (e) {
await transaction.rollback();
throw e;
}
console.log('Users added');
}
}
class StudentMock extends User {
@Mock(faker => faker.name.firstName() + ' ' + faker.name.lastName())
name: string;
@Mock(faker => 'h' + (880000 + faker.datatype.number(9999)) + '@stud.u-szeged.hu')
email: string;
isAdmin = false;
}

View file

@ -1,12 +1,12 @@
import {inject, Getter} from '@loopback/core';
import {DefaultCrudRepository, repository, HasManyThroughRepositoryFactory} from '@loopback/repository';
import { repository, HasManyThroughRepositoryFactory, DefaultTransactionalRepository } from '@loopback/repository';
import {DatabaseDataSource} from '../datasources';
import {User, UserRelations, Course, CourseUser} from '../models';
import {SubjectRepository} from './subject.repository';
import {CourseUserRepository} from './course-user.repository';
import {CourseRepository} from './course.repository';
export class UserRepository extends DefaultCrudRepository<
export class UserRepository extends DefaultTransactionalRepository<
User,
typeof User.prototype.id,
UserRelations

View file

@ -1,4 +1,5 @@
#!/usr/bin/env bash
set -e
if [ "$COMMAND" == "deploy" ]; then
npm run buildProd

View file

@ -11,7 +11,7 @@
<th mat-header-cell *matHeaderCellDef>{{ col.title }}</th>
<td mat-cell *matCellDef="let item">
<span [ngSwitch]="getType(item[col.prop])">
<span *ngSwitchCase="'boolean'"><mat-checkbox [checked]="item[col.prop]"></mat-checkbox></span>
<span *ngSwitchCase="'boolean'"><mat-checkbox [checked]="item[col.prop]" disabled="disabled"></mat-checkbox></span>
<span *ngSwitchDefault>{{ item[col.prop] }}</span>
</span>
</td>

View file

@ -1,3 +1,4 @@
export const environment = {
production: true
production: true,
backendUrl: 'https://np-szakdolgozat.herokuapp.com'
};