Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 96e4e9b

Browse files
committedDec 8, 2020
Create db migrations
1 parent ebdd993 commit 96e4e9b

38 files changed

+832
-220
lines changed
 

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Setup your Elasticsearch instance and ensure that it is up and running.
6767

6868
## Working with mock data
6969

70-
You can use the scripts `npm run insert-data` (and `npm run delete-data`) to insert mock data (and delete mock data respectively). The data is inserted into Postgres and Elasticsearch. You need to setup the configurations beforehand and also start the elasticsearch instance before you run these scripts. You can run the script `npm run migrate-db-to-es` to dump data in db into es.
70+
You can use the scripts `npm run migrations up` (and `npm run migrations down`) to insert mock data (and delete mock data respectively). The data is inserted into Postgres and Elasticsearch. You need to setup the configurations beforehand and also start the elasticsearch instance before you run these scripts. You can run the script `npm run migrate-db-to-es` to dump data in db into es.
7171

7272
## Local Deployment with Docker
7373

‎package-lock.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"lint": "standard \"**/*.js\"",
99
"insert-data": "node scripts/db/genData.js",
1010
"delete-data": "node scripts/db/dropAll.js",
11-
"migrate-db-to-es": "node scripts/db/dumpDbToEs.js"
11+
"migrate-db-to-es": "node scripts/db/dumpDbToEs.js",
12+
"migrations": "node scripts/db/migrations.js"
1213
},
1314
"repository": {
1415
"type": "git",
@@ -36,6 +37,7 @@
3637
"swagger-ui-express": "^4.1.4",
3738
"tc-bus-api-wrapper": "github:topcoder-platform/tc-bus-api-wrapper",
3839
"tc-core-library-js": "github:appirio-tech/tc-core-library-js#v2.6.4",
40+
"umzug": "^2.3.0",
3941
"uuid": "^7.0.1",
4042
"winston": "^3.2.1"
4143
},

‎scripts/db/data/ExternalProfile.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"uri": "http://www.new.com/new-uri"
2525
},
2626
{
27-
"id": "f2d1b567-8ea3-4eec-93b0-32378a19edb7",
27+
"id": "f2d1b567-8eb3-4eec-93b0-32378a19edb7",
2828
"created": "2020-05-13T06:11:21.361Z",
2929
"updated": "2020-05-13T06:46:15.893Z",
3030
"createdBy": "tc-Admin",
@@ -36,7 +36,7 @@
3636
"uri": "http://www.new.com/new-uri"
3737
},
3838
{
39-
"id": "f2d1b567-8ea3-4eec-93b0-32378a19edb7",
39+
"id": "f2d1b567-8ec3-4eec-93b0-32378a19edb7",
4040
"created": "2020-05-13T06:11:21.361Z",
4141
"updated": "2020-05-13T06:46:15.893Z",
4242
"createdBy": "tc-Admin",

‎scripts/db/genData.js

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
const _ = require('lodash')
44
const sequelize = require('../../src/models/index')
5-
const dbHelper = require('../../src/common/db-helper')
65
const logger = require('../../src/common/logger')
76
const { getESClient } = require('../../src/common/es-client')
87
const {
98
topResources,
10-
userResources,
119
organizationResources,
1210
modelToESIndexMapping
1311
} = require('../constants')
@@ -32,98 +30,6 @@ const RESOURCES_IN_ORDER = [
3230

3331
const client = getESClient()
3432

35-
async function insertIntoES (modelName, body) {
36-
const esResourceName = modelToESIndexMapping[modelName]
37-
38-
if (!esResourceName) {
39-
logger.error(`Cannot insert data into model ${modelName}. No equivalent elasticsearch index found`)
40-
41-
return
42-
}
43-
44-
if (_.includes(_.keys(topResources), esResourceName)) {
45-
await client.index({
46-
index: topResources[esResourceName].index,
47-
type: topResources[esResourceName].type,
48-
id: body.id,
49-
body,
50-
pipeline: topResources[esResourceName].ingest ? topResources[esResourceName].ingest.pipeline.id : undefined,
51-
refresh: 'wait_for'
52-
})
53-
} else if (_.includes(_.keys(userResources), esResourceName)) {
54-
const userResource = userResources[esResourceName]
55-
56-
const { body: user } = await client.getSource({
57-
index: topResources.user.index,
58-
type: topResources.user.type,
59-
id: body.userId
60-
})
61-
62-
if (userResource.nested === true && userResource.mappingCreated !== true) {
63-
await client.indices.putMapping({
64-
index: topResources.user.index,
65-
type: topResources.user.type,
66-
include_type_name: true,
67-
body: {
68-
properties: {
69-
[userResource.propertyName]: {
70-
type: 'nested'
71-
}
72-
}
73-
}
74-
})
75-
userResource.mappingCreated = true
76-
}
77-
78-
const relateId = body[userResource.relateKey]
79-
80-
if (!user[userResource.propertyName]) {
81-
user[userResource.propertyName] = []
82-
}
83-
84-
if (_.some(user[userResource.propertyName], [userResource.relateKey, relateId])) {
85-
logger.error(`Can't create existing ${esResourceName} with the ${userResource.relateKey}: ${relateId}, userId: ${body.userId}`)
86-
} else {
87-
user[userResource.propertyName].push(body)
88-
await client.index({
89-
index: topResources.user.index,
90-
type: topResources.user.type,
91-
id: body.userId,
92-
body: user,
93-
pipeline: topResources.user.pipeline.id,
94-
refresh: 'wait_for'
95-
})
96-
}
97-
} else if (_.includes(_.keys(organizationResources), esResourceName)) {
98-
const orgResource = organizationResources[esResourceName]
99-
100-
const { body: organization } = await client.getSource({
101-
index: topResources.organization.index,
102-
type: topResources.organization.type,
103-
id: body.organizationId
104-
})
105-
106-
const relateId = body[orgResource.relateKey]
107-
108-
if (!organization[orgResource.propertyName]) {
109-
organization[orgResource.propertyName] = []
110-
}
111-
112-
if (_.some(organization[orgResource.propertyName], [orgResource.relateKey, relateId])) {
113-
logger.error(`Can't create existing ${esResourceName} with the ${orgResource.relateKey}: ${relateId}, organizationId: ${body.organizationId}`)
114-
} else {
115-
organization[orgResource.propertyName].push(body)
116-
await client.index({
117-
index: topResources.organization.index,
118-
type: topResources.organization.type,
119-
id: body.organizationId,
120-
body: organization,
121-
refresh: 'wait_for'
122-
})
123-
}
124-
}
125-
}
126-
12733
/**
12834
* Creates and executes the enrich policy for the provided model
12935
* @param {String} modelName The model name
@@ -219,10 +125,6 @@ async function createEnrichProcessor (modelName) {
219125
* @return {Promise<void>}
220126
*/
221127
async function main () {
222-
await dbHelper.createDb()
223-
await sequelize.sync()
224-
dbHelper.addRelationships(sequelize)
225-
226128
let keys = Object.keys(sequelize.models)
227129

228130
// Sort the models in the order of insertion (for correct enrichment)
@@ -238,20 +140,6 @@ async function main () {
238140

239141
for (let i = 0; i < keys.length; i++) {
240142
const key = keys[i]
241-
try {
242-
const data = require(`./data/${key}.json`)
243-
for (let i = 0; i < data.length; i++) {
244-
logger.info(`Inserting data ${i + 1} of ${data.length}`)
245-
await dbHelper.create(sequelize.models[key], data[i], null)
246-
// await insertIntoES(key, data[i])
247-
}
248-
logger.info('import data for ' + key + ' done')
249-
} catch (e) {
250-
logger.error(e)
251-
logger.warn('import data for ' + key + ' failed')
252-
continue
253-
}
254-
255143
try {
256144
await createAndExecuteEnrichPolicy(key)
257145
logger.info('create and execute enrich policy for ' + key + ' done')

‎scripts/db/migrations.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const sequelize = require('../../src/models/index')
2+
const path = require('path')
3+
const Umzug = require('umzug')
4+
const { createDb } = require('../../src/common/db-helper')
5+
6+
const umzug = new Umzug({
7+
migrations: {
8+
// indicates the folder containing the migration .js files
9+
path: path.join(__dirname, './migrations'),
10+
// inject sequelize's QueryInterface in the migrations
11+
params: [
12+
sequelize.getQueryInterface()
13+
]
14+
},
15+
// indicates that the migration data should be store in the database
16+
// itself through sequelize. The default configuration creates a table
17+
// named `SequelizeMeta`.
18+
storage: 'sequelize',
19+
storageOptions: {
20+
sequelize: sequelize
21+
}
22+
});
23+
24+
(async () => {
25+
if (process.argv[2] === 'up') {
26+
createDb()
27+
await umzug.up()
28+
console.log('All migrations performed successfully')
29+
} else if (process.argv[2] === 'down') {
30+
await umzug.down()
31+
console.log('The last executed migration reverted successfully')
32+
} else {
33+
console.error('You should pass \'up\' or \'down\' as the parameter')
34+
}
35+
})()
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Achievement model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('Achievements', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
uri: {
24+
type: DataTypes.STRING
25+
},
26+
certifierId: {
27+
type: DataTypes.STRING
28+
},
29+
certifiedDate: {
30+
type: DataTypes.DATE
31+
},
32+
created: {
33+
type: DataTypes.DATE,
34+
allowNull: false
35+
},
36+
updated: {
37+
type: DataTypes.DATE
38+
}
39+
})
40+
},
41+
down: async (query) => {
42+
await query.dropTable('Achievements')
43+
}
44+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* AchievementsProvider model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('AchievementsProviders', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('AchievementsProviders')
34+
}
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Attribute model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('Attributes', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('Attributes')
34+
}
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* AttributeGroup model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('AttributeGroups', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('AttributeGroups')
34+
}
35+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* ExternalProfile model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('ExternalProfiles', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
externalId: {
21+
type: DataTypes.STRING
22+
},
23+
uri: {
24+
type: DataTypes.STRING
25+
},
26+
isInactive: {
27+
type: DataTypes.BOOLEAN
28+
},
29+
created: {
30+
type: DataTypes.DATE,
31+
allowNull: false
32+
},
33+
updated: {
34+
type: DataTypes.DATE
35+
}
36+
})
37+
},
38+
down: async (query) => {
39+
await query.dropTable('ExternalProfiles')
40+
}
41+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Organization model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('Organizations', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('Organizations')
34+
}
35+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* OrganizationSkillsProvider model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('OrganizationSkillsProviders', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
created: {
21+
type: DataTypes.DATE,
22+
allowNull: false
23+
},
24+
updated: {
25+
type: DataTypes.DATE
26+
}
27+
})
28+
},
29+
down: async (query) => {
30+
await query.dropTable('OrganizationSkillsProviders')
31+
}
32+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Role model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('Roles', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
name: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('Roles')
34+
}
35+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const { DataTypes } = require('sequelize')
2+
3+
module.exports = {
4+
up: async (query) => {
5+
await query.createTable('Skills', {
6+
id: {
7+
primaryKey: true,
8+
type: DataTypes.UUID,
9+
defaultValue: DataTypes.UUIDV4
10+
},
11+
createdBy: {
12+
type: DataTypes.STRING
13+
},
14+
updatedBy: {
15+
type: DataTypes.STRING
16+
},
17+
name: {
18+
type: DataTypes.STRING
19+
},
20+
externalId: {
21+
type: DataTypes.STRING
22+
},
23+
uri: {
24+
type: DataTypes.STRING
25+
},
26+
created: {
27+
type: DataTypes.DATE,
28+
allowNull: false
29+
},
30+
updated: {
31+
type: DataTypes.DATE
32+
}
33+
})
34+
},
35+
down: async (query) => {
36+
await query.dropTable('Skills')
37+
}
38+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const { DataTypes } = require('sequelize')
2+
3+
module.exports = {
4+
up: async (query) => {
5+
await query.createTable('SkillsProviders', {
6+
id: {
7+
primaryKey: true,
8+
type: DataTypes.UUID,
9+
defaultValue: DataTypes.UUIDV4
10+
},
11+
createdBy: {
12+
type: DataTypes.STRING
13+
},
14+
updatedBy: {
15+
type: DataTypes.STRING
16+
},
17+
name: {
18+
type: DataTypes.STRING
19+
},
20+
created: {
21+
type: DataTypes.DATE,
22+
allowNull: false
23+
},
24+
updated: {
25+
type: DataTypes.DATE
26+
}
27+
})
28+
},
29+
down: async (query) => {
30+
await query.dropTable('SkillsProviders')
31+
}
32+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* User model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('Users', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
handle: {
21+
type: DataTypes.STRING
22+
},
23+
firstName: {
24+
type: DataTypes.STRING
25+
},
26+
lastName: {
27+
type: DataTypes.STRING
28+
},
29+
created: {
30+
type: DataTypes.DATE,
31+
allowNull: false
32+
},
33+
updated: {
34+
type: DataTypes.DATE
35+
}
36+
})
37+
},
38+
down: async (query) => {
39+
await query.dropTable('Users')
40+
}
41+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* UsersAttribute model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('UserAttributes', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
value: {
21+
type: DataTypes.STRING
22+
},
23+
created: {
24+
type: DataTypes.DATE,
25+
allowNull: false
26+
},
27+
updated: {
28+
type: DataTypes.DATE
29+
}
30+
})
31+
},
32+
down: async (query) => {
33+
await query.dropTable('UserAttributes')
34+
}
35+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* UsersRole model
3+
*/
4+
const { DataTypes } = require('sequelize')
5+
6+
module.exports = {
7+
up: async (query) => {
8+
await query.createTable('UsersRoles', {
9+
id: {
10+
primaryKey: true,
11+
type: DataTypes.UUID,
12+
defaultValue: DataTypes.UUIDV4
13+
},
14+
createdBy: {
15+
type: DataTypes.STRING
16+
},
17+
updatedBy: {
18+
type: DataTypes.STRING
19+
},
20+
created: {
21+
type: DataTypes.DATE,
22+
allowNull: false
23+
},
24+
updated: {
25+
type: DataTypes.DATE
26+
}
27+
})
28+
},
29+
down: async (query) => {
30+
await query.dropTable('UsersRoles')
31+
}
32+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const { DataTypes } = require('sequelize')
2+
3+
module.exports = {
4+
up: async (query) => {
5+
await query.createTable('UsersSkills', {
6+
id: {
7+
primaryKey: true,
8+
type: DataTypes.UUID,
9+
defaultValue: DataTypes.UUIDV4
10+
},
11+
createdBy: {
12+
type: DataTypes.STRING
13+
},
14+
updatedBy: {
15+
type: DataTypes.STRING
16+
},
17+
metricValue: {
18+
type: DataTypes.STRING
19+
},
20+
certifierId: {
21+
type: DataTypes.STRING
22+
},
23+
certifiedDate: {
24+
type: DataTypes.DATE
25+
},
26+
created: {
27+
type: DataTypes.DATE,
28+
allowNull: false
29+
},
30+
updated: {
31+
type: DataTypes.DATE
32+
}
33+
})
34+
},
35+
down: async (query) => {
36+
await query.dropTable('UsersSkills')
37+
}
38+
}
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
const { DataTypes } = require('sequelize')
2+
3+
module.exports = {
4+
up: async (query) => {
5+
await query.addColumn('Skills', 'skillProviderId', {
6+
type: DataTypes.UUID,
7+
references: {
8+
model: 'SkillsProviders',
9+
key: 'id'
10+
},
11+
onUpdate: 'CASCADE',
12+
onDelete: 'SET NULL'
13+
})
14+
await query.addColumn('OrganizationSkillsProviders', 'skillProviderId', {
15+
type: DataTypes.UUID,
16+
references: {
17+
model: 'SkillsProviders',
18+
key: 'id'
19+
},
20+
onUpdate: 'CASCADE',
21+
onDelete: 'SET NULL'
22+
})
23+
await query.addColumn('UsersSkills', 'userId', {
24+
type: DataTypes.UUID,
25+
references: {
26+
model: 'Users',
27+
key: 'id'
28+
},
29+
onUpdate: 'CASCADE',
30+
onDelete: 'SET NULL'
31+
})
32+
await query.addColumn('Achievements', 'userId', {
33+
type: DataTypes.UUID,
34+
references: {
35+
model: 'Users',
36+
key: 'id'
37+
},
38+
onUpdate: 'CASCADE',
39+
onDelete: 'SET NULL'
40+
})
41+
await query.addColumn('UserAttributes', 'userId', {
42+
type: DataTypes.UUID,
43+
references: {
44+
model: 'Users',
45+
key: 'id'
46+
},
47+
onUpdate: 'CASCADE',
48+
onDelete: 'SET NULL'
49+
})
50+
await query.addColumn('ExternalProfiles', 'userId', {
51+
type: DataTypes.UUID,
52+
references: {
53+
model: 'Users',
54+
key: 'id'
55+
},
56+
onUpdate: 'CASCADE',
57+
onDelete: 'SET NULL'
58+
})
59+
await query.addColumn('UsersRoles', 'userId', {
60+
type: DataTypes.UUID,
61+
references: {
62+
model: 'Users',
63+
key: 'id'
64+
},
65+
onUpdate: 'CASCADE',
66+
onDelete: 'SET NULL'
67+
})
68+
await query.addColumn('ExternalProfiles', 'organizationId', {
69+
type: DataTypes.UUID,
70+
references: {
71+
model: 'Organizations',
72+
key: 'id'
73+
},
74+
onUpdate: 'CASCADE',
75+
onDelete: 'SET NULL'
76+
})
77+
await query.addColumn('AttributeGroups', 'organizationId', {
78+
type: DataTypes.UUID,
79+
references: {
80+
model: 'Organizations',
81+
key: 'id'
82+
},
83+
onUpdate: 'CASCADE',
84+
onDelete: 'SET NULL'
85+
})
86+
await query.addColumn('OrganizationSkillsProviders', 'organizationId', {
87+
type: DataTypes.UUID,
88+
references: {
89+
model: 'Organizations',
90+
key: 'id'
91+
},
92+
onUpdate: 'CASCADE',
93+
onDelete: 'SET NULL'
94+
})
95+
await query.addColumn('UsersSkills', 'skillId', {
96+
type: DataTypes.UUID,
97+
references: {
98+
model: 'Skills',
99+
key: 'id'
100+
},
101+
onUpdate: 'CASCADE',
102+
onDelete: 'SET NULL'
103+
})
104+
await query.addColumn('UsersRoles', 'roleId', {
105+
type: DataTypes.UUID,
106+
references: {
107+
model: 'Roles',
108+
key: 'id'
109+
},
110+
onUpdate: 'CASCADE',
111+
onDelete: 'SET NULL'
112+
})
113+
await query.addColumn('Achievements', 'achievementsProviderId', {
114+
type: DataTypes.UUID,
115+
references: {
116+
model: 'AchievementsProviders',
117+
key: 'id'
118+
},
119+
onUpdate: 'CASCADE',
120+
onDelete: 'SET NULL'
121+
})
122+
await query.addColumn('UserAttributes', 'attributeId', {
123+
type: DataTypes.UUID,
124+
references: {
125+
model: 'Attributes',
126+
key: 'id'
127+
},
128+
onUpdate: 'CASCADE',
129+
onDelete: 'SET NULL'
130+
})
131+
await query.addColumn('Attributes', 'attributeGroupId', {
132+
type: DataTypes.UUID,
133+
references: {
134+
model: 'AttributeGroups',
135+
key: 'id'
136+
},
137+
onUpdate: 'CASCADE',
138+
onDelete: 'SET NULL'
139+
})
140+
},
141+
down: async (query) => {
142+
await query.removeColumn('Skills', 'skillProviderId')
143+
await query.removeColumn('OrganizationSkillsProviders', 'skillProviderId')
144+
await query.removeColumn('UsersSkills', 'userId')
145+
await query.removeColumn('Achievements', 'userId')
146+
await query.removeColumn('UserAttributes', 'userId')
147+
await query.removeColumn('ExternalProfiles', 'userId')
148+
await query.removeColumn('UsersRoles', 'userId')
149+
await query.removeColumn('ExternalProfiles', 'organizationId')
150+
await query.removeColumn('AttributeGroups', 'organizationId')
151+
await query.removeColumn('OrganizationSkillsProviders', 'organizationId')
152+
await query.removeColumn('UsersSkills', 'skillId')
153+
await query.removeColumn('UsersRoles', 'roleId')
154+
await query.removeColumn('Achievements', 'achievementsProviderId')
155+
await query.removeColumn('UserAttributes', 'attributeId')
156+
await query.removeColumn('Attributes', 'attributeGroupId')
157+
}
158+
}

‎scripts/db/migrations/15_add-data.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const dataKeys = ['User', 'Organization', 'AchievementsProvider', 'Achievement',
2+
'AttributeGroup', 'Attribute', 'ExternalProfile', 'SkillsProvider',
3+
'OrganizationSkillsProvider', 'Role', 'Skill', 'UserAttribute', 'UsersRole', 'UsersSkill']
4+
5+
module.exports = {
6+
up: async (query) => {
7+
for (const key of dataKeys) {
8+
await query.bulkInsert(`${key}s`, require(`../data/${key}.json`))
9+
}
10+
},
11+
down: async (query) => {
12+
for (const key of dataKeys) {
13+
await query.bulkDelete(`${key}s`, null, {})
14+
}
15+
}
16+
}

‎src/common/db-helper.js

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ const pgtools = require('pgtools')
55
const config = require('config')
66
const errors = require('../common/errors')
77
const logger = require('../common/logger')
8-
const { DataTypes } = require('sequelize')
98
const appConst = require('../consts')
109
const helper = require('../common/helper')
1110

@@ -34,63 +33,6 @@ async function createDb () {
3433
})
3534
}
3635

37-
/**
38-
* Generate relationship options object
39-
* @param foreignKeyName the foriegn key name
40-
* @returns {Object}
41-
*/
42-
function generateRelationshipOptions (foreignKeyName) {
43-
return {
44-
foreignKey: {
45-
name: foreignKeyName,
46-
type: DataTypes.UUID
47-
}
48-
}
49-
}
50-
51-
/**
52-
* add db relationships
53-
* @param sequelize the sequelize instance
54-
*/
55-
function addRelationships (sequelize) {
56-
const {
57-
Skill, SkillsProvider, UsersSkill, User, Achievement,
58-
AchievementsProvider, AttributeGroup, Attribute, UsersAttribute,
59-
Organization, OrganizationSkillsProvider, ExternalProfile, UsersRole, Role
60-
} = sequelize.models
61-
62-
SkillsProvider.hasMany(Skill, generateRelationshipOptions('skillProviderId'))
63-
Skill.belongsTo(SkillsProvider, generateRelationshipOptions('skillProviderId'))
64-
SkillsProvider.hasMany(OrganizationSkillsProvider, generateRelationshipOptions('skillProviderId'))
65-
OrganizationSkillsProvider.belongsTo(SkillsProvider, generateRelationshipOptions('skillProviderId'))
66-
User.hasMany(UsersSkill, generateRelationshipOptions('userId'))
67-
UsersSkill.belongsTo(User, generateRelationshipOptions('userId'))
68-
User.hasMany(Achievement, generateRelationshipOptions('userId'))
69-
Achievement.belongsTo(User, generateRelationshipOptions('userId'))
70-
User.hasMany(UsersAttribute, generateRelationshipOptions('userId'))
71-
UsersAttribute.belongsTo(User, generateRelationshipOptions('userId'))
72-
User.hasMany(ExternalProfile, generateRelationshipOptions('userId'))
73-
ExternalProfile.belongsTo(User, generateRelationshipOptions('userId'))
74-
User.hasMany(UsersRole, generateRelationshipOptions('userId'))
75-
UsersRole.belongsTo(User, generateRelationshipOptions('userId'))
76-
Organization.hasMany(ExternalProfile, generateRelationshipOptions('organizationId'))
77-
ExternalProfile.belongsTo(Organization, generateRelationshipOptions('organizationId'))
78-
Organization.hasMany(AttributeGroup, generateRelationshipOptions('organizationId'))
79-
AttributeGroup.belongsTo(Organization, generateRelationshipOptions('organizationId'))
80-
OrganizationSkillsProvider.belongsTo(Organization, generateRelationshipOptions('organizationId'))
81-
Organization.hasMany(OrganizationSkillsProvider, generateRelationshipOptions('organizationId'))
82-
Skill.hasMany(UsersSkill, generateRelationshipOptions('skillId'))
83-
UsersSkill.belongsTo(Skill, generateRelationshipOptions('skillId'))
84-
Role.hasMany(UsersRole, generateRelationshipOptions('roleId'))
85-
UsersRole.belongsTo(Role, generateRelationshipOptions('roleId'))
86-
AchievementsProvider.hasMany(Achievement, generateRelationshipOptions('achievementsProviderId'))
87-
Achievement.belongsTo(AchievementsProvider, generateRelationshipOptions('achievementsProviderId'))
88-
Attribute.hasMany(UsersAttribute, generateRelationshipOptions('attributeId'))
89-
UsersAttribute.belongsTo(Attribute, generateRelationshipOptions('attributeId'))
90-
AttributeGroup.hasMany(Attribute, generateRelationshipOptions('attributeGroupId'))
91-
Attribute.belongsTo(AttributeGroup, generateRelationshipOptions('attributeGroupId'))
92-
}
93-
9436
/**
9537
* search objects
9638
* @param model the sequelize model object
@@ -238,7 +180,6 @@ async function makeSureUnique (model, entity, uniqueFields, pathParams = {}) {
238180

239181
module.exports = {
240182
createDb,
241-
addRelationships,
242183
find,
243184
create,
244185
update,

‎src/models/Achievement.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('Achievement', {
7+
const Achievement = sequelize.define('Achievement', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -34,4 +34,9 @@ module.exports = (sequelize) => {
3434
updatedAt: 'updated',
3535
createdAt: 'created'
3636
})
37+
Achievement.associate = (models) => {
38+
Achievement.belongsTo(models.User, { foreignKey: 'userId', type: DataTypes.UUID })
39+
Achievement.belongsTo(models.AchievementsProvider, { foreignKey: 'achievementsProviderId', type: DataTypes.UUID })
40+
}
41+
return Achievement
3742
}

‎src/models/AchievementsProvider.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('AchievementsProvider', {
7+
const AchievementsProvider = sequelize.define('AchievementsProvider', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,8 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
AchievementsProvider.associate = (models) => {
29+
AchievementsProvider.hasMany(models.Achievement, { foreignKey: 'achievementsProviderId', type: DataTypes.UUID })
30+
}
31+
return AchievementsProvider
2832
}

‎src/models/Attribute.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('Attribute', {
7+
const Attribute = sequelize.define('Attribute', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,9 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
Attribute.associate = (models) => {
29+
Attribute.hasMany(models.UsersAttribute, { foreignKey: 'attributeId', type: DataTypes.UUID })
30+
Attribute.belongsTo(models.AttributeGroup, { foreignKey: 'attributeGroupId', type: DataTypes.UUID })
31+
}
32+
return Attribute
2833
}

‎src/models/AttributeGroup.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('AttributeGroup', {
7+
const AttributeGroup = sequelize.define('AttributeGroup', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,9 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
AttributeGroup.associate = (models) => {
29+
AttributeGroup.belongsTo(models.Organization, { foreignKey: 'organizationId', type: DataTypes.UUID })
30+
AttributeGroup.hasMany(models.Attribute, { foreignKey: 'attributeGroupId', type: DataTypes.UUID })
31+
}
32+
return AttributeGroup
2833
}

‎src/models/ExternalProfile.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('ExternalProfile', {
7+
const ExternalProfile = sequelize.define('ExternalProfile', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -31,4 +31,9 @@ module.exports = (sequelize) => {
3131
updatedAt: 'updated',
3232
createdAt: 'created'
3333
})
34+
ExternalProfile.associate = (models) => {
35+
ExternalProfile.belongsTo(models.User, { foreignKey: 'userId', type: DataTypes.UUID })
36+
ExternalProfile.belongsTo(models.Organization, { foreignKey: 'organizationId', type: DataTypes.UUID })
37+
}
38+
return ExternalProfile
3439
}

‎src/models/Organization.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('Organization', {
7+
const Organization = sequelize.define('Organization', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,10 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
Organization.associate = (models) => {
29+
Organization.hasMany(models.ExternalProfile, { foreignKey: 'organizationId', type: DataTypes.UUID })
30+
Organization.hasMany(models.AttributeGroup, { foreignKey: 'organizationId', type: DataTypes.UUID })
31+
Organization.hasMany(models.OrganizationSkillsProvider, { foreignKey: 'organizationId', type: DataTypes.UUID })
32+
}
33+
return Organization
2834
}

‎src/models/OrganizationSkillsProvider.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('OrganizationSkillsProvider', {
7+
const OrganizationSkillsProvider = sequelize.define('OrganizationSkillsProvider', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -22,4 +22,9 @@ module.exports = (sequelize) => {
2222
updatedAt: 'updated',
2323
createdAt: 'created'
2424
})
25+
OrganizationSkillsProvider.associate = (models) => {
26+
OrganizationSkillsProvider.belongsTo(models.SkillsProvider, { foreignKey: 'skillProviderId', type: DataTypes.UUID })
27+
OrganizationSkillsProvider.belongsTo(models.Organization, { foreignKey: 'organizationId', type: DataTypes.UUID })
28+
}
29+
return OrganizationSkillsProvider
2530
}

‎src/models/Role.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('Role', {
7+
const Role = sequelize.define('Role', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,8 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
Role.associate = (models) => {
29+
Role.hasMany(models.UsersRole, { foreignKey: 'roleId', type: DataTypes.UUID })
30+
}
31+
return Role
2832
}

‎src/models/Skill.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { DataTypes } = require('sequelize')
22

33
module.exports = (sequelize) => {
4-
return sequelize.define('Skill', {
4+
const Skill = sequelize.define('Skill', {
55
id: {
66
primaryKey: true,
77
type: DataTypes.UUID,
@@ -28,4 +28,9 @@ module.exports = (sequelize) => {
2828
updatedAt: 'updated',
2929
createdAt: 'created'
3030
})
31+
Skill.associate = (models) => {
32+
Skill.belongsTo(models.SkillsProvider, { foreignKey: 'skillProviderId', type: DataTypes.UUID })
33+
Skill.hasMany(models.UsersSkill, { foreignKey: 'skillId', type: DataTypes.UUID })
34+
}
35+
return Skill
3136
}

‎src/models/SkillsProvider.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { DataTypes } = require('sequelize')
22

33
module.exports = (sequelize) => {
4-
return sequelize.define('SkillsProvider', {
4+
const SkillsProvider = sequelize.define('SkillsProvider', {
55
id: {
66
primaryKey: true,
77
type: DataTypes.UUID,
@@ -22,4 +22,9 @@ module.exports = (sequelize) => {
2222
updatedAt: 'updated',
2323
createdAt: 'created'
2424
})
25+
SkillsProvider.associate = (models) => {
26+
SkillsProvider.hasMany(models.Skill, { foreignKey: 'skillProviderId', type: DataTypes.UUID })
27+
SkillsProvider.hasMany(models.OrganizationSkillsProvider, { foreignKey: 'skillProviderId', type: DataTypes.UUID })
28+
}
29+
return SkillsProvider
2530
}

‎src/models/User.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('User', {
7+
const User = sequelize.define('User', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -31,4 +31,12 @@ module.exports = (sequelize) => {
3131
updatedAt: 'updated',
3232
createdAt: 'created'
3333
})
34+
User.associate = (models) => {
35+
User.hasMany(models.UsersSkill, { foreignKey: 'userId', type: DataTypes.UUID })
36+
User.hasMany(models.Achievement, { foreignKey: 'userId', type: DataTypes.UUID })
37+
User.hasMany(models.UsersAttribute, { foreignKey: 'userId', type: DataTypes.UUID })
38+
User.hasMany(models.ExternalProfile, { foreignKey: 'userId', type: DataTypes.UUID })
39+
User.hasMany(models.UsersRole, { foreignKey: 'userId', type: DataTypes.UUID })
40+
}
41+
return User
3442
}

‎src/models/UserAttribute.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('UsersAttribute', {
7+
const UsersAttribute = sequelize.define('UsersAttribute', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -25,4 +25,9 @@ module.exports = (sequelize) => {
2525
updatedAt: 'updated',
2626
createdAt: 'created'
2727
})
28+
UsersAttribute.associate = (models) => {
29+
UsersAttribute.belongsTo(models.User, { foreignKey: 'userId', type: DataTypes.UUID })
30+
UsersAttribute.belongsTo(models.Attribute, { foreignKey: 'attributeId', type: DataTypes.UUID })
31+
}
32+
return UsersAttribute
2833
}

‎src/models/UsersRole.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
const { DataTypes } = require('sequelize')
55

66
module.exports = (sequelize) => {
7-
return sequelize.define('UsersRole', {
7+
const UsersRole = sequelize.define('UsersRole', {
88
id: {
99
primaryKey: true,
1010
type: DataTypes.UUID,
@@ -22,4 +22,9 @@ module.exports = (sequelize) => {
2222
updatedAt: 'updated',
2323
createdAt: 'created'
2424
})
25+
UsersRole.associate = (models) => {
26+
UsersRole.belongsTo(models.User, { foreignKey: 'userId', type: DataTypes.UUID })
27+
UsersRole.belongsTo(models.Role, { foreignKey: 'roleId', type: DataTypes.UUID })
28+
}
29+
return UsersRole
2530
}

‎src/models/UsersSkill.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { DataTypes } = require('sequelize')
22

33
module.exports = (sequelize) => {
4-
return sequelize.define('UsersSkill', {
4+
const UsersSkill = sequelize.define('UsersSkill', {
55
id: {
66
primaryKey: true,
77
type: DataTypes.UUID,
@@ -28,4 +28,9 @@ module.exports = (sequelize) => {
2828
updatedAt: 'updated',
2929
createdAt: 'created'
3030
})
31+
UsersSkill.associate = (models) => {
32+
UsersSkill.belongsTo(models.User, { foreignKey: 'userId', type: DataTypes.UUID })
33+
UsersSkill.belongsTo(models.Skill, { foreignKey: 'skillId', type: DataTypes.UUID })
34+
}
35+
return UsersSkill
3136
}

‎src/models/index.js

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
*/
44
const { Sequelize } = require('sequelize')
55
const config = require('config')
6+
const fs = require('fs')
7+
const path = require('path')
68
const logger = require('../common/logger')
7-
const dBHelper = require('../common/db-helper')
89

910
/**
1011
* the database instance
@@ -13,30 +14,21 @@ const sequelize = new Sequelize(
1314
`postgresql://${config.DB_USERNAME}:${config.DB_PASSWORD}@${config.DB_HOST}:${config.DB_PORT}/${config.DB_NAME}`
1415
)
1516

16-
const modelDefiners = [
17-
require('./Skill'),
18-
require('./SkillsProvider'),
19-
require('./UsersSkill'),
20-
require('./User'),
21-
require('./Organization'),
22-
require('./Achievement'),
23-
require('./AchievementsProvider'),
24-
require('./AttributeGroup'),
25-
require('./Attribute'),
26-
require('./UserAttribute'),
27-
require('./OrganizationSkillsProvider'),
28-
require('./ExternalProfile'),
29-
require('./Role'),
30-
require('./UsersRole')
31-
]
17+
const db = {}
3218

33-
// We define all models according to their files.
34-
for (const modelDefiner of modelDefiners) {
35-
modelDefiner(sequelize)
36-
}
19+
fs
20+
.readdirSync(__dirname)
21+
.filter(file => (file.indexOf('.') !== 0) && (file !== 'index.js'))
22+
.forEach((file) => {
23+
const model = require(path.join(__dirname, file))(sequelize)
24+
db[model.name] = model
25+
})
3726

38-
// Add relationships
39-
dBHelper.addRelationships(sequelize)
27+
Object.keys(db).forEach((modelName) => {
28+
if ('associate' in db[modelName]) {
29+
db[modelName].associate(db)
30+
}
31+
})
4032

4133
module.exports = sequelize
4234

@@ -45,15 +37,7 @@ module.exports = sequelize
4537
*/
4638
module.exports.init = async () => {
4739
logger.info('connect to database, check/create tables ...')
48-
49-
// create db
50-
await dBHelper.createDb()
51-
5240
// authenticate db
5341
await sequelize.authenticate()
5442
logger.info(`Connected to db ${config.DB_NAME} successfully`)
55-
56-
// sync db (create tables)
57-
await sequelize.sync()
58-
logger.info(`db ${config.DB_NAME} synced successfully`)
5943
}

0 commit comments

Comments
 (0)
This repository has been archived.