Просмотр исходного кода

:recycle: adding back queue

neo
toj 2 лет назад
Родитель
Сommit
08fbd08675

+ 29
- 0
backend/lib/models/match-queue.js Просмотреть файл

1
+const Schwifty = require('@hapipal/schwifty')
2
+
3
+const User = require('./user')
4
+const queueSchema = require('../schemas/match-queues')
5
+
6
+module.exports = class MatchQueue extends Schwifty.Model {
7
+    static get tableName() {
8
+        return 'match_queues'
9
+    }
10
+    static get relationMappings() {
11
+        return {
12
+            user: {
13
+                relation: Schwifty.Model.HasOneThroughRelation,
14
+                modelClass: User,
15
+                join: {
16
+                    from: 'match_queues.target_id',
17
+                    through: {
18
+                        from: 'profiles.profile_id',
19
+                        to: 'profiles.user_id',
20
+                    },
21
+                    to: 'users.user_id',
22
+                },
23
+            },
24
+        }
25
+    }
26
+    static get joiSchema() {
27
+        return queueSchema.single
28
+    }
29
+}

+ 12
- 0
backend/lib/models/response-key.js Просмотреть файл

1
+const Schwifty = require('@hapipal/schwifty')
2
+
3
+const responseKeySchema = require('../schemas/response-keys')
4
+
5
+module.exports = class ResponseKey extends Schwifty.Model {
6
+    static get tableName() {
7
+        return 'response_keys'
8
+    }
9
+    static get joiSchema() {
10
+        return responseKeySchema.single
11
+    }
12
+}

+ 12
- 0
backend/lib/models/response.js Просмотреть файл

1
+const Schwifty = require('@hapipal/schwifty')
2
+
3
+const responseSchema = require('../schemas/response')
4
+
5
+module.exports = class Response extends Schwifty.Model {
6
+    static get tableName() {
7
+        return 'responses'
8
+    }
9
+    static get joiSchema() {
10
+        return responseSchema.single
11
+    }
12
+}

+ 8
- 0
backend/lib/schemas/groupings.js Просмотреть файл

2
 
2
 
3
 const profileSchema = require('./profiles')
3
 const profileSchema = require('./profiles')
4
 
4
 
5
+/**
6
+ * Groupings
7
+ * A represents a match, an organization, or anything else
8
+ * that relates multiple profiles to each other.
9
+ */
10
+
11
+// validator is used to validate route input/output
5
 const validator = Joi.object({
12
 const validator = Joi.object({
6
     grouping_id: Joi.number(),
13
     grouping_id: Joi.number(),
7
     grouping_name: Joi.string(),
14
     grouping_name: Joi.string(),
12
 
19
 
13
 const list = Joi.array().items(validator).label('grouping__list_validator')
20
 const list = Joi.array().items(validator).label('grouping__list_validator')
14
 
21
 
22
+// single is used to define database models
15
 const single = Joi.object({
23
 const single = Joi.object({
16
     grouping_id: Joi.number(),
24
     grouping_id: Joi.number(),
17
     grouping_name: Joi.string(),
25
     grouping_name: Joi.string(),

+ 38
- 0
backend/lib/schemas/match-queues.js Просмотреть файл

1
+const Joi = require('joi')
2
+
3
+/**
4
+ * Match Queue
5
+ * A match queue record stores prematched target-profiles
6
+ * to display *in order* for the logged-in profile.
7
+ *
8
+ * example:
9
+ * { profile_id: 2, target_id: 54 }
10
+ * { profile_id: 2, target_id: 27 }
11
+ * { profile_id: 2, target_id: 83 }
12
+ *
13
+ * This example will display profiles 54, 27, 83 to
14
+ * profile 2 when they login.
15
+ */
16
+
17
+// validator is used to validate route input/output
18
+const validator = Joi.object({
19
+    match_queue_id: Joi.number(),
20
+    profile_id: Joi.number().required(),
21
+    target_id: Joi.number().required(),
22
+}).label('queue__single_validator')
23
+
24
+const list = Joi.array().items(validator).label('queue__list_validator')
25
+
26
+// single is used to define database models
27
+const single = Joi.object({
28
+    match_queue_id: Joi.number(),
29
+    profile_id: Joi.number().required(),
30
+    target_id: Joi.number().required(),
31
+    _is_deleted: Joi.boolean().required(),
32
+}).label('queue__single')
33
+
34
+module.exports = {
35
+    single,
36
+    validator,
37
+    list,
38
+}

+ 6
- 0
backend/lib/schemas/memberships.js Просмотреть файл

1
 const Joi = require('joi')
1
 const Joi = require('joi')
2
 
2
 
3
+/**
4
+ * Memberships
5
+ * A membership relates a profile to a grouping.
6
+ */
7
+
8
+// validator is used to validate route input/output
3
 const validator = Joi.object({
9
 const validator = Joi.object({
4
     membership_id: Joi.number(),
10
     membership_id: Joi.number(),
5
     profile_id: Joi.number(),
11
     profile_id: Joi.number(),

+ 3
- 3
backend/lib/schemas/profile.js Просмотреть файл

1
 const Joi = require('joi')
1
 const Joi = require('joi')
2
-// const surveyResponseSchema = require('./responses')
2
+const responseSchema = require('./responses')
3
 const userSchema = require('./users')
3
 const userSchema = require('./users')
4
 const associationSchema = require('./tag-associations')
4
 const associationSchema = require('./tag-associations')
5
 
5
 
13
 const validator = Joi.object({
13
 const validator = Joi.object({
14
     profile_id: Joi.number(),
14
     profile_id: Joi.number(),
15
     user: userSchema.single,
15
     user: userSchema.single,
16
-    // responses: surveyResponseSchema.list,
17
-    // reveal: Joi.array().items(),
16
+    responses: responseSchema.list,
17
+    reveal: Joi.array().items(),
18
     tags: associationSchema.list,
18
     tags: associationSchema.list,
19
     profile_description: Joi.string().allow(null, ''),
19
     profile_description: Joi.string().allow(null, ''),
20
 }).label('profile__single_validator')
20
 }).label('profile__single_validator')

+ 9
- 0
backend/lib/schemas/response-keys.js Просмотреть файл

1
 const Joi = require('joi')
1
 const Joi = require('joi')
2
 
2
 
3
+/**
4
+ * Response Keys
5
+ * A response key is a question in the onboarding survey.
6
+ * We track the questions we ask to aggregate analytics 
7
+ * about survey effectiveness.
8
+ */
9
+
10
+// validator is used to validate route input/output
3
 const validator = Joi.object({
11
 const validator = Joi.object({
4
     response_key_id: Joi.number().required(),
12
     response_key_id: Joi.number().required(),
5
     response_key_category: Joi.string().required(),
13
     response_key_category: Joi.string().required(),
9
 
17
 
10
 const list = Joi.array().items(validator).label('question__list_validator')
18
 const list = Joi.array().items(validator).label('question__list_validator')
11
 
19
 
20
+// single is used to define database models
12
 const single = Joi.object({
21
 const single = Joi.object({
13
     response_key_id: Joi.number().required(),
22
     response_key_id: Joi.number().required(),
14
     response_key_category: Joi.string().required(),
23
     response_key_category: Joi.string().required(),

+ 8
- 0
backend/lib/schemas/responses.js Просмотреть файл

1
 const Joi = require('joi')
1
 const Joi = require('joi')
2
 
2
 
3
+/**
4
+ * Responses
5
+ * A response records how a profile answers
6
+ * a specific question (response-key).
7
+ */
8
+
9
+// validator is used to validate route input/output
3
 const validator = Joi.object({
10
 const validator = Joi.object({
4
     response_key_id: Joi.number(),
11
     response_key_id: Joi.number(),
5
     response_id: Joi.number(),
12
     response_id: Joi.number(),
9
 
16
 
10
 const list = Joi.array().items(validator).label('response__list_validator')
17
 const list = Joi.array().items(validator).label('response__list_validator')
11
 
18
 
19
+// single is used to define database models
12
 const single = Joi.object({
20
 const single = Joi.object({
13
     response_key_id: Joi.number(),
21
     response_key_id: Joi.number(),
14
     response_id: Joi.number(),
22
     response_id: Joi.number(),

Загрузка…
Отмена
Сохранить