Browse Source

:recycle: rebuilt aspect and prescore table migrations

tags/0.0.1
J 4 years ago
parent
commit
b119e081c9

+ 1
- 1
backend/.env.sample View File

@@ -14,7 +14,7 @@ DB_USER=root
14 14
 DB_NAME=test
15 15
 DB_HOST=localhost
16 16
 DB_TYPE=mysql
17
-DB_PORT=3306
17
+DB_PORT=3307
18 18
 
19 19
 PSCALE_DB_BRANCH=main
20 20
 PSCALE_DB_NAME=planet-scale-db

+ 0
- 46
backend/db/data-generator/config.js View File

@@ -1,46 +0,0 @@
1
-const mockOutputPath = './db/generated'
2
-const magic = 1000
3
-
4
-// Insert here how many users you would like to generate:
5
-const total = 30
6
-const batchSize = 10
7
-
8
-// Amount of responses for a complete survey
9
-const questions = 7
10
-
11
-// Seekers per 100 profiles
12
-const percentageOfSeekers = 90
13
-
14
-const scoreVals = [100, 140, 180, 220, 260, 400]
15
-
16
-const header = `/**
17
-* GENERATED MOCK SIIMEE DATA
18
-* Generated at: ${Date.now()}
19
-*/
20
-`
21
-
22
-const possibleZipcodes = [
23
-    '90065', // Glassel
24
-    '90012', // Chinatown
25
-    '90240', // Downey
26
-    '91030', // South Pasadena
27
-    '91201', // Glendale
28
-    '91399', // Woodland Hills
29
-    '91401', // Van Nuys
30
-    '90840', // Long Beach
31
-    '91001', // Altadena
32
-    '91011', // La Canada Flintridge
33
-    '97075', // Beaverton
34
-]
35
-
36
-module.exports = {
37
-    mockOutputPath,
38
-    magic,
39
-    total,
40
-    batchSize,
41
-    questions,
42
-    percentageOfSeekers,
43
-    scoreVals,
44
-    header,
45
-    possibleZipcodes,
46
-}

+ 23
- 0
backend/db/data-generator/config.json View File

@@ -0,0 +1,23 @@
1
+{
2
+    "mockOutputPath": "./db/generated",
3
+    "magic": 10000,
4
+    "total": 30,
5
+    "batchSize": 10,
6
+    "questions": 7,
7
+    "percentageOfSeekers": 90,
8
+    "scoreVals": [107, 414, 721, 1028, 1336, 1648, 2056],
9
+    "header": "/**\n* GENERATED MOCK SIIMEE DATA\n*/",
10
+    "possibleZipcodes": [
11
+        "90065",
12
+        "90012",
13
+        "90240",
14
+        "91030",
15
+        "91201",
16
+        "91399",
17
+        "91401",
18
+        "90840",
19
+        "91001",
20
+        "91011",
21
+        "97075"
22
+    ]
23
+}

+ 21
- 20
backend/db/data-generator/generate.ipynb View File

@@ -2,7 +2,7 @@
2 2
  "cells": [
3 3
   {
4 4
    "cell_type": "code",
5
-   "execution_count": 6,
5
+   "execution_count": 15,
6 6
    "metadata": {},
7 7
    "outputs": [
8 8
     {
@@ -11,22 +11,22 @@
11 11
      "text": [
12 12
       "\n",
13 13
       "Scoring: ((107, 107), (1336, 1336))\n",
14
-      "10000\n",
14
+      "10000.0\n",
15 15
       "\n",
16 16
       "Scoring: ((414, 107), (414, 414))\n",
17
-      "8616\n",
17
+      "8616.0\n",
18 18
       "\n",
19 19
       "Scoring: ((414, 2056), (1648, 721))\n",
20
-      "5738\n",
20
+      "5738.0\n",
21 21
       "\n",
22 22
       "Scoring: ((1648, 721), (107, 414))\n",
23
-      "6173\n",
23
+      "6173.0\n",
24 24
       "\n",
25 25
       "Scoring: ((1336, 1648), (1028, 1648))\n",
26
-      "9924\n",
26
+      "9924.0\n",
27 27
       "\n",
28 28
       "Scoring: ((107, 414), (721, 721))\n",
29
-      "8616\n"
29
+      "8616.0\n"
30 30
      ]
31 31
     }
32 32
    ],
@@ -36,17 +36,18 @@
36 36
     "from itertools import product\n",
37 37
     "from scipy import spatial\n",
38 38
     "\n",
39
-    "config = {\n",
40
-    "    \"all_possible_responses\": [\n",
41
-    "        107, 414, 721, 1028, 1336, 1648, 2056\n",
42
-    "    ],\n",
43
-    "    \"aspect_size\": 2,\n",
44
-    "    \"magic\": 10000,\n",
45
-    "    \"write\": True,\n",
46
-    "    \"file\": \"test.js\",\n",
47
-    "    \"delimiter\": \"-\",\n",
48
-    "    \"version\": \"0.1.0\"\n",
49
-    "}\n",
39
+    " \n",
40
+    "f = open('./config.json')\n",
41
+    "from_json_config = json.load(f)\n",
42
+    "config = {}\n",
43
+    "config[\"all_possible_responses\"] = from_json_config[\"scoreVals\"]\n",
44
+    "config[\"magic\"] = from_json_config[\"magic\"]\n",
45
+    "config[\"aspect_size\"] = 2\n",
46
+    "config[\"write\"]= True\n",
47
+    "config[\"file\"] = \"../generated/prescore_matrix.json\"\n",
48
+    "config[\"delimiter\"] = \"-\"\n",
49
+    "config[\"version\"] = \"0.1.0\"\n",
50
+    "f.close()\n",
50 51
     "\n",
51 52
     "def createPermutations(possibilities, size):\n",
52 53
     "    return tuple(product(possibilities, repeat=size))\n",
@@ -135,10 +136,10 @@
135 136
     "    if(config[\"write\"] == True):\n",
136 137
     "        # Serializing json\n",
137 138
     "        str_m = {}\n",
138
-    "        for key, value in m.items():\n",
139
+    "        for key, values in m.items():\n",
139 140
     "            delimiter = config[\"delimiter\"]\n",
140 141
     "            str_key = delimiter.join([str(v) for v in key])\n",
141
-    "            str_m[str_key] = value\n",
142
+    "            str_m[str_key] = [int(val) for val in values]\n",
142 143
     "            str_m[\"_config\"] = config\n",
143 144
     "        json_object = json.dumps(str_m, indent = 4)\n",
144 145
     "        with open(config[\"file\"], \"w\") as file:\n",

+ 16
- 0
backend/db/migrations/20220313230903_create_scores_table.js View File

@@ -0,0 +1,16 @@
1
+const matrix = require('../generated/prescore_matrix.json')
2
+
3
+exports.up = function (knex) {
4
+    return knex.schema.createTable('prescored_aspects', function (table) {
5
+        table.integer('aspect_id').primary()
6
+        const firstRow = Object.keys(matrix)[0]
7
+        colVals = matrix[firstRow]
8
+        colVals.forEach((col, i) => {
9
+            table.smallint(`${i + 1}`).notNullable()
10
+        })
11
+    })
12
+}
13
+
14
+exports.down = function (knex) {
15
+    return knex.schema.dropTable('prescored_aspects')
16
+}

+ 13
- 0
backend/db/migrations/20220313233557_create_aspects_table.js View File

@@ -0,0 +1,13 @@
1
+const matrix = require('../generated/prescore_matrix.json')
2
+
3
+exports.up = function (knex) {
4
+    return knex.schema.createTable('aspect_labels', function (table) {
5
+        table.integer('aspect_id').primary()
6
+        table.smallint('a').notNullable()
7
+        table.smallint('b').notNullable()
8
+    })
9
+}
10
+
11
+exports.down = function (knex) {
12
+    return knex.schema.dropTable('aspect_labels')
13
+}

+ 3
- 1
backend/db/seeds/01-users.js View File

@@ -6,7 +6,9 @@ const generatedDataPath = './db/generated'
6 6
 let fileNames = fs.readdirSync(generatedDataPath)
7 7
 for (let name of fileNames) {
8 8
     const data = require(`../generated/${name}`)
9
-    users = [...users, ...data.users]
9
+    if(name[0] == '_') {
10
+        users = [...users, ...data.users]
11
+    }
10 12
 }
11 13
 
12 14
 exports.seed = knex => {

+ 3
- 1
backend/db/seeds/02-profiles.js View File

@@ -6,7 +6,9 @@ const generatedDataPath = './db/generated'
6 6
 let fileNames = fs.readdirSync(generatedDataPath)
7 7
 for (let name of fileNames) {
8 8
     const data = require(`../generated/${name}`)
9
-    profiles = [...profiles, ...data.profiles]
9
+    if(name[0] == '_') {
10
+        profiles = [...profiles, ...data.profiles]
11
+    }
10 12
 }
11 13
 
12 14
 exports.seed = knex => {

+ 1
- 1
backend/db/seeds/03-response_keys.js View File

@@ -6,7 +6,7 @@ const generatedDataPath = './db/generated'
6 6
 let fileNames = fs.readdirSync(generatedDataPath)
7 7
 for (let name of fileNames) {
8 8
     const data = require(`../generated/${name}`)
9
-    if(data?.response_keys) {
9
+    if(name[0] == '_' && data?.response_keys) {
10 10
         response_keys = [...response_keys, ...data.response_keys]
11 11
     }
12 12
 }

+ 3
- 1
backend/db/seeds/04-responses.js View File

@@ -6,7 +6,9 @@ const generatedDataPath = './db/generated'
6 6
 let fileNames = fs.readdirSync(generatedDataPath)
7 7
 for (let name of fileNames) {
8 8
     const data = require(`../generated/${name}`)
9
-    responses = [...responses, ...data.responses]
9
+    if(name[0] == '_') {
10
+        responses = [...responses, ...data.responses]
11
+    }
10 12
 }
11 13
 
12 14
 exports.seed = knex => {

+ 29
- 0
backend/db/seeds/10-scores.js View File

@@ -0,0 +1,29 @@
1
+const aspects = require('../generated/prescore_matrix.json')
2
+
3
+exports.seed = function (knex) {
4
+    // Deletes ALL existing entries
5
+    return knex('prescored_aspects')
6
+        .truncate()
7
+        .then(function () {
8
+            let rowCount = 1
9
+            const makeRow = scores => {
10
+                scoreMap = {}
11
+                scores.forEach((score, i) => {
12
+                    scoreMap['aspect_id'] = rowCount
13
+                    scoreMap[i + 1] = score
14
+                })
15
+                return scoreMap
16
+            }
17
+            
18
+            const rows = []
19
+            Object.values(aspects).forEach(rowOfScores => {
20
+                if(Array.isArray(rowOfScores)) {
21
+                    const row = makeRow(rowOfScores)
22
+                    rows.push(row)
23
+                    rowCount++
24
+                }
25
+            })
26
+            // Inserts seed entries
27
+            return knex('prescored_aspects').insert(rows)
28
+        })
29
+}

+ 25
- 0
backend/db/seeds/11-aspects.js View File

@@ -0,0 +1,25 @@
1
+const aspects = require('../generated/prescore_matrix.json')
2
+
3
+exports.seed = function (knex) {
4
+    // Deletes ALL existing entries
5
+    return knex('aspect_labels')
6
+        .truncate()
7
+        .then(function () {
8
+            let rowCount = 1
9
+            const rows = []
10
+            Object.keys(aspects).forEach(label => {
11
+                if(label != '_config') {
12
+                    const row = {
13
+                        aspect_id: rowCount
14
+                    }
15
+                    const ab = label.split('-')
16
+                    row.a = parseInt(ab[0])
17
+                    row.b = parseInt(ab[1])
18
+                    rows.push(row)
19
+                    rowCount++
20
+                }
21
+            })
22
+            // Inserts seed entries
23
+            return knex('aspect_labels').insert(rows)
24
+        })
25
+}

+ 1
- 1
backend/knexfile.js View File

@@ -15,7 +15,7 @@ const pscale = {
15 15
     port: process.env.PSCALE_DB_PORT ? process.env.PSCALE_DB_PORT : 3306
16 16
 }
17 17
 
18
-const connectionSettings = process.env.USE_LOCAL_DB == true ? local : pscale
18
+const connectionSettings = process.env.USE_LOCAL_DB == "true" ? local : pscale
19 19
 
20 20
 module.exports = {
21 21
     development: {

Loading…
Cancel
Save