Преглед изворни кода

:recycle: refactor to use profile_id in membershios | adding a lot more response mock data

tags/0.0.1
j пре 4 година
родитељ
комит
6e4479b143

+ 1
- 1
backend/db/migrations/20210527174440_create_memberships_table.js Прегледај датотеку

1
 exports.up = function (knex) {
1
 exports.up = function (knex) {
2
     return knex.schema.createTable('memberships', function (table) {
2
     return knex.schema.createTable('memberships', function (table) {
3
         table.increments('membership_id').primary()
3
         table.increments('membership_id').primary()
4
-        table.integer('user_id').notNullable() // From
4
+        table.integer('profile_id').notNullable() // From
5
         table.integer('grouping_id').notNullable() // To
5
         table.integer('grouping_id').notNullable() // To
6
         table.string('membership_type', 128).notNullable() // Don't over normalize
6
         table.string('membership_type', 128).notNullable() // Don't over normalize
7
         table.boolean('can_edit').notNullable()
7
         table.boolean('can_edit').notNullable()

+ 582
- 24
backend/db/mock.js Прегледај датотеку

35
             is_admin: false,
35
             is_admin: false,
36
             is_poster: false,
36
             is_poster: false,
37
         },
37
         },
38
+        {
39
+            user_id: 6,
40
+            user_name: 'monkey',
41
+            user_email: 'catcat@cats.com',
42
+            is_admin: false,
43
+            is_poster: true,
44
+        },
45
+        {
46
+            user_id: 7,
47
+            user_name: 'lady',
48
+            user_email: 'really_just@allcats.com',
49
+            is_admin: false,
50
+            is_poster: false,
51
+        },
38
     ],
52
     ],
39
     profiles: [
53
     profiles: [
40
-        { profile_id: 1, user_id: 2 },
54
+        { profile_id: 1, user_id: 1 },
41
         { profile_id: 2, user_id: 2 },
55
         { profile_id: 2, user_id: 2 },
42
         { profile_id: 3, user_id: 3 },
56
         { profile_id: 3, user_id: 3 },
43
         { profile_id: 4, user_id: 4 },
57
         { profile_id: 4, user_id: 4 },
44
-        { profile_id: 5, user_id: 4 },
45
-        { profile_id: 6, user_id: 4 },
58
+        { profile_id: 5, user_id: 5 },
59
+        { profile_id: 6, user_id: 6 },
60
+        { profile_id: 7, user_id: 7 },
46
     ],
61
     ],
47
     response_keys: [
62
     response_keys: [
48
         {
63
         {
59
         },
74
         },
60
         {
75
         {
61
             response_key_id: 3,
76
             response_key_id: 3,
62
-            response_key_category: 'grit',
77
+            response_key_category: 'bravery',
63
             response_key_prompt: 'what is your quest',
78
             response_key_prompt: 'what is your quest',
64
             response_key_description: null,
79
             response_key_description: null,
65
         },
80
         },
70
                 'what is the average flight speed of an unladen swallow',
85
                 'what is the average flight speed of an unladen swallow',
71
             response_key_description: null,
86
             response_key_description: null,
72
         },
87
         },
88
+        {
89
+            response_key_id: 5,
90
+            response_key_category: 'grit',
91
+            response_key_prompt: 'name what is your',
92
+            response_key_description: null,
93
+        },
94
+        {
95
+            response_key_id: 6,
96
+            response_key_category: 'honesty',
97
+            response_key_prompt: 'what is your favorite color',
98
+            response_key_description: null,
99
+        },
100
+        {
101
+            response_key_id: 7,
102
+            response_key_category: 'respect',
103
+            response_key_prompt: 'what is your quest',
104
+            response_key_description: null,
105
+        },
106
+        {
107
+            response_key_id: 8,
108
+            response_key_category: 'empathy',
109
+            response_key_prompt:
110
+                'flight speed of an unladen swallow what is the average',
111
+            response_key_description: null,
112
+        },
113
+        {
114
+            response_key_id: 9,
115
+            response_key_category: 'respect',
116
+            response_key_prompt: 'what is your name',
117
+            response_key_description: null,
118
+        },
119
+        {
120
+            response_key_id: 10,
121
+            response_key_category: 'openness',
122
+            response_key_prompt: 'color what is your favorite',
123
+            response_key_description: null,
124
+        },
125
+        {
126
+            response_key_id: 11,
127
+            response_key_category: 'bravery',
128
+            response_key_prompt: 'quest what is your ',
129
+            response_key_description: null,
130
+        },
131
+        {
132
+            response_key_id: 12,
133
+            response_key_category: 'honesty',
134
+            response_key_prompt:
135
+                'what is the average flight speed of an unladen swallow',
136
+            response_key_description: null,
137
+        },
138
+        {
139
+            response_key_id: 13,
140
+            response_key_category: 'locationPref',
141
+            response_key_prompt: 'where are you looking to work',
142
+            response_key_description: null,
143
+        },
144
+        {
145
+            response_key_id: 14,
146
+            response_key_category: 'languagePref',
147
+            response_key_prompt: 'languages are you proficient in',
148
+            response_key_description: null,
149
+        },
150
+        {
151
+            response_key_id: 15,
152
+            response_key_category: 'durationPref',
153
+            response_key_prompt: 'what kind of schedule are you looking for',
154
+            response_key_description: null,
155
+        },
73
     ],
156
     ],
74
     responses: [
157
     responses: [
75
-        { response_id: 1, profile_id: 2, response_key_id: 2, val: '80' },
76
-        { response_id: 2, profile_id: 2, response_key_id: 1, val: '70' },
77
-        { response_id: 3, profile_id: 2, response_key_id: 1, val: '50' },
158
+        {
159
+            response_id: 1,
160
+            profile_id: 1,
161
+            response_key_id: 0,
162
+            val: '160',
163
+        },
164
+        {
165
+            response_id: 2,
166
+            profile_id: 1,
167
+            response_key_id: 1,
168
+            val: '140',
169
+        },
170
+        {
171
+            response_id: 3,
172
+            profile_id: 1,
173
+            response_key_id: 2,
174
+            val: '180',
175
+        },
78
         {
176
         {
79
             response_id: 4,
177
             response_id: 4,
80
-            profile_id: 2,
178
+            profile_id: 1,
81
             response_key_id: 3,
179
             response_key_id: 3,
82
-            val: 'I am actually a very experienced cat.',
180
+            val: '120',
83
         },
181
         },
84
         {
182
         {
85
             response_id: 5,
183
             response_id: 5,
184
+            profile_id: 1,
185
+            response_key_id: 4,
186
+            val: '140',
187
+        },
188
+        {
189
+            response_id: 6,
190
+            profile_id: 1,
191
+            response_key_id: 5,
192
+            val: '120',
193
+        },
194
+        {
195
+            response_id: 7,
196
+            profile_id: 1,
197
+            response_key_id: 6,
198
+            val: '120',
199
+        },
200
+        {
201
+            response_id: 8,
202
+            profile_id: 1,
203
+            response_key_id: 7,
204
+            val: '120',
205
+        },
206
+        {
207
+            response_id: 9,
208
+            profile_id: 1,
209
+            response_key_id: 8,
210
+            val: '140',
211
+        },
212
+        {
213
+            response_id: 10,
214
+            profile_id: 1,
215
+            response_key_id: 9,
216
+            val: '200',
217
+        },
218
+        {
219
+            response_id: 11,
220
+            profile_id: 1,
221
+            response_key_id: 10,
222
+            val: '200',
223
+        },
224
+        {
225
+            response_id: 12,
226
+            profile_id: 1,
227
+            response_key_id: 11,
228
+            val: '160',
229
+        },
230
+        {
231
+            response_id: 13,
232
+            profile_id: 2,
233
+            response_key_id: 0,
234
+            val: '180',
235
+        },
236
+        {
237
+            response_id: 14,
238
+            profile_id: 2,
239
+            response_key_id: 1,
240
+            val: '200',
241
+        },
242
+        {
243
+            response_id: 15,
244
+            profile_id: 2,
245
+            response_key_id: 2,
246
+            val: '120',
247
+        },
248
+        {
249
+            response_id: 16,
250
+            profile_id: 2,
251
+            response_key_id: 3,
252
+            val: '140',
253
+        },
254
+        {
255
+            response_id: 17,
256
+            profile_id: 2,
257
+            response_key_id: 4,
258
+            val: '180',
259
+        },
260
+        {
261
+            response_id: 18,
262
+            profile_id: 2,
263
+            response_key_id: 5,
264
+            val: '180',
265
+        },
266
+        {
267
+            response_id: 19,
268
+            profile_id: 2,
269
+            response_key_id: 6,
270
+            val: '120',
271
+        },
272
+        {
273
+            response_id: 20,
274
+            profile_id: 2,
275
+            response_key_id: 7,
276
+            val: '140',
277
+        },
278
+        {
279
+            response_id: 21,
280
+            profile_id: 2,
281
+            response_key_id: 8,
282
+            val: '180',
283
+        },
284
+        {
285
+            response_id: 22,
286
+            profile_id: 2,
287
+            response_key_id: 9,
288
+            val: '140',
289
+        },
290
+        {
291
+            response_id: 23,
292
+            profile_id: 2,
293
+            response_key_id: 10,
294
+            val: '160',
295
+        },
296
+        {
297
+            response_id: 24,
298
+            profile_id: 2,
299
+            response_key_id: 11,
300
+            val: '180',
301
+        },
302
+        {
303
+            response_id: 25,
304
+            profile_id: 3,
305
+            response_key_id: 0,
306
+            val: '160',
307
+        },
308
+        {
309
+            response_id: 26,
310
+            profile_id: 3,
311
+            response_key_id: 1,
312
+            val: '140',
313
+        },
314
+        {
315
+            response_id: 27,
316
+            profile_id: 3,
317
+            response_key_id: 2,
318
+            val: '140',
319
+        },
320
+        {
321
+            response_id: 28,
86
             profile_id: 3,
322
             profile_id: 3,
87
             response_key_id: 3,
323
             response_key_id: 3,
88
-            val: 'I am not a person but I need a job',
324
+            val: '200',
89
         },
325
         },
90
         {
326
         {
91
-            response_id: 6,
327
+            response_id: 29,
328
+            profile_id: 3,
329
+            response_key_id: 4,
330
+            val: '180',
331
+        },
332
+        {
333
+            response_id: 30,
334
+            profile_id: 3,
335
+            response_key_id: 5,
336
+            val: '200',
337
+        },
338
+        {
339
+            response_id: 31,
340
+            profile_id: 3,
341
+            response_key_id: 6,
342
+            val: '160',
343
+        },
344
+        {
345
+            response_id: 32,
346
+            profile_id: 3,
347
+            response_key_id: 7,
348
+            val: '200',
349
+        },
350
+        {
351
+            response_id: 33,
352
+            profile_id: 3,
353
+            response_key_id: 8,
354
+            val: '120',
355
+        },
356
+        {
357
+            response_id: 34,
358
+            profile_id: 3,
359
+            response_key_id: 9,
360
+            val: '180',
361
+        },
362
+        {
363
+            response_id: 35,
364
+            profile_id: 3,
365
+            response_key_id: 10,
366
+            val: '120',
367
+        },
368
+        {
369
+            response_id: 36,
370
+            profile_id: 3,
371
+            response_key_id: 11,
372
+            val: '200',
373
+        },
374
+        {
375
+            response_id: 37,
376
+            profile_id: 4,
377
+            response_key_id: 0,
378
+            val: '140',
379
+        },
380
+        {
381
+            response_id: 38,
382
+            profile_id: 4,
383
+            response_key_id: 1,
384
+            val: '180',
385
+        },
386
+        {
387
+            response_id: 39,
388
+            profile_id: 4,
389
+            response_key_id: 2,
390
+            val: '160',
391
+        },
392
+        {
393
+            response_id: 40,
92
             profile_id: 4,
394
             profile_id: 4,
93
             response_key_id: 3,
395
             response_key_id: 3,
94
-            val: 'Just a job that needs grit',
396
+            val: '160',
95
         },
397
         },
96
-        { response_id: 7, profile_id: 4, response_key_id: 2, val: '30' },
97
-        { response_id: 8, profile_id: 4, response_key_id: 1, val: '100' },
98
         {
398
         {
99
-            response_id: 9,
399
+            response_id: 41,
400
+            profile_id: 4,
401
+            response_key_id: 4,
402
+            val: '140',
403
+        },
404
+        {
405
+            response_id: 42,
406
+            profile_id: 4,
407
+            response_key_id: 5,
408
+            val: '140',
409
+        },
410
+        {
411
+            response_id: 43,
412
+            profile_id: 4,
413
+            response_key_id: 6,
414
+            val: '120',
415
+        },
416
+        {
417
+            response_id: 44,
418
+            profile_id: 4,
419
+            response_key_id: 7,
420
+            val: '140',
421
+        },
422
+        {
423
+            response_id: 45,
424
+            profile_id: 4,
425
+            response_key_id: 8,
426
+            val: '120',
427
+        },
428
+        {
429
+            response_id: 46,
430
+            profile_id: 4,
431
+            response_key_id: 9,
432
+            val: '120',
433
+        },
434
+        {
435
+            response_id: 47,
436
+            profile_id: 4,
437
+            response_key_id: 10,
438
+            val: '200',
439
+        },
440
+        {
441
+            response_id: 48,
442
+            profile_id: 4,
443
+            response_key_id: 11,
444
+            val: '140',
445
+        },
446
+        {
447
+            response_id: 49,
448
+            profile_id: 5,
449
+            response_key_id: 0,
450
+            val: '200',
451
+        },
452
+        {
453
+            response_id: 50,
454
+            profile_id: 5,
455
+            response_key_id: 1,
456
+            val: '160',
457
+        },
458
+        {
459
+            response_id: 51,
460
+            profile_id: 5,
461
+            response_key_id: 2,
462
+            val: '200',
463
+        },
464
+        {
465
+            response_id: 52,
466
+            profile_id: 5,
467
+            response_key_id: 3,
468
+            val: '140',
469
+        },
470
+        {
471
+            response_id: 53,
472
+            profile_id: 5,
473
+            response_key_id: 4,
474
+            val: '180',
475
+        },
476
+        {
477
+            response_id: 54,
478
+            profile_id: 5,
479
+            response_key_id: 5,
480
+            val: '200',
481
+        },
482
+        {
483
+            response_id: 55,
484
+            profile_id: 5,
485
+            response_key_id: 6,
486
+            val: '200',
487
+        },
488
+        {
489
+            response_id: 56,
490
+            profile_id: 5,
491
+            response_key_id: 7,
492
+            val: '180',
493
+        },
494
+        {
495
+            response_id: 57,
496
+            profile_id: 5,
497
+            response_key_id: 8,
498
+            val: '140',
499
+        },
500
+        {
501
+            response_id: 58,
502
+            profile_id: 5,
503
+            response_key_id: 9,
504
+            val: '140',
505
+        },
506
+        {
507
+            response_id: 59,
508
+            profile_id: 5,
509
+            response_key_id: 10,
510
+            val: '180',
511
+        },
512
+        {
513
+            response_id: 60,
100
             profile_id: 5,
514
             profile_id: 5,
515
+            response_key_id: 11,
516
+            val: '160',
517
+        },
518
+        {
519
+            response_id: 61,
520
+            profile_id: 6,
521
+            response_key_id: 0,
522
+            val: '120',
523
+        },
524
+        {
525
+            response_id: 62,
526
+            profile_id: 6,
527
+            response_key_id: 1,
528
+            val: '180',
529
+        },
530
+        {
531
+            response_id: 63,
532
+            profile_id: 6,
533
+            response_key_id: 2,
534
+            val: '160',
535
+        },
536
+        {
537
+            response_id: 64,
538
+            profile_id: 6,
539
+            response_key_id: 3,
540
+            val: '120',
541
+        },
542
+        {
543
+            response_id: 65,
544
+            profile_id: 6,
545
+            response_key_id: 4,
546
+            val: '140',
547
+        },
548
+        {
549
+            response_id: 66,
550
+            profile_id: 6,
551
+            response_key_id: 5,
552
+            val: '140',
553
+        },
554
+        {
555
+            response_id: 67,
556
+            profile_id: 6,
557
+            response_key_id: 6,
558
+            val: '140',
559
+        },
560
+        {
561
+            response_id: 68,
562
+            profile_id: 6,
563
+            response_key_id: 7,
564
+            val: '160',
565
+        },
566
+        {
567
+            response_id: 69,
568
+            profile_id: 6,
569
+            response_key_id: 8,
570
+            val: '180',
571
+        },
572
+        {
573
+            response_id: 70,
574
+            profile_id: 6,
575
+            response_key_id: 9,
576
+            val: '200',
577
+        },
578
+        {
579
+            response_id: 71,
580
+            profile_id: 6,
581
+            response_key_id: 10,
582
+            val: '180',
583
+        },
584
+        {
585
+            response_id: 72,
586
+            profile_id: 6,
587
+            response_key_id: 11,
588
+            val: '160',
589
+        },
590
+        {
591
+            response_id: 73,
592
+            profile_id: 7,
593
+            response_key_id: 0,
594
+            val: '160',
595
+        },
596
+        {
597
+            response_id: 74,
598
+            profile_id: 7,
599
+            response_key_id: 1,
600
+            val: '140',
601
+        },
602
+        {
603
+            response_id: 75,
604
+            profile_id: 7,
605
+            response_key_id: 2,
606
+            val: '140',
607
+        },
608
+        {
609
+            response_id: 76,
610
+            profile_id: 7,
101
             response_key_id: 3,
611
             response_key_id: 3,
102
-            val: 'This job posting is awful',
612
+            val: '160',
613
+        },
614
+        {
615
+            response_id: 77,
616
+            profile_id: 7,
617
+            response_key_id: 4,
618
+            val: '200',
619
+        },
620
+        {
621
+            response_id: 78,
622
+            profile_id: 7,
623
+            response_key_id: 5,
624
+            val: '120',
625
+        },
626
+        {
627
+            response_id: 79,
628
+            profile_id: 7,
629
+            response_key_id: 6,
630
+            val: '160',
631
+        },
632
+        {
633
+            response_id: 80,
634
+            profile_id: 7,
635
+            response_key_id: 7,
636
+            val: '160',
637
+        },
638
+        {
639
+            response_id: 81,
640
+            profile_id: 7,
641
+            response_key_id: 8,
642
+            val: '160',
643
+        },
644
+        {
645
+            response_id: 82,
646
+            profile_id: 7,
647
+            response_key_id: 9,
648
+            val: '120',
649
+        },
650
+        {
651
+            response_id: 83,
652
+            profile_id: 7,
653
+            response_key_id: 10,
654
+            val: '180',
655
+        },
656
+        {
657
+            response_id: 84,
658
+            profile_id: 7,
659
+            response_key_id: 11,
660
+            val: '180',
103
         },
661
         },
104
     ],
662
     ],
105
     memberships: [
663
     memberships: [
106
         {
664
         {
107
             membership_id: 1,
665
             membership_id: 1,
108
-            user_id: 1,
666
+            profile_id: 1,
109
             grouping_id: 1,
667
             grouping_id: 1,
110
             membership_type: '_admin',
668
             membership_type: '_admin',
111
             can_edit: true,
669
             can_edit: true,
113
         },
671
         },
114
         {
672
         {
115
             membership_id: 2,
673
             membership_id: 2,
116
-            user_id: 1,
674
+            profile_id: 1,
117
             grouping_id: 2,
675
             grouping_id: 2,
118
             membership_type: 'recruiter',
676
             membership_type: 'recruiter',
119
             can_edit: true,
677
             can_edit: true,
121
         },
679
         },
122
         {
680
         {
123
             membership_id: 3,
681
             membership_id: 3,
124
-            user_id: 1,
682
+            profile_id: 1,
125
             grouping_id: 3,
683
             grouping_id: 3,
126
             membership_type: 'participant',
684
             membership_type: 'participant',
127
             can_edit: false,
685
             can_edit: false,
129
         },
687
         },
130
         {
688
         {
131
             membership_id: 4,
689
             membership_id: 4,
132
-            user_id: 2,
690
+            profile_id: 2,
133
             grouping_id: 3,
691
             grouping_id: 3,
134
             membership_type: 'participant',
692
             membership_type: 'participant',
135
             can_edit: false,
693
             can_edit: false,
137
         },
695
         },
138
         {
696
         {
139
             membership_id: 5,
697
             membership_id: 5,
140
-            user_id: 4,
698
+            profile_id: 4,
141
             grouping_id: 4,
699
             grouping_id: 4,
142
             membership_type: 'participant',
700
             membership_type: 'participant',
143
             can_edit: false,
701
             can_edit: false,
145
         },
703
         },
146
         {
704
         {
147
             membership_id: 6,
705
             membership_id: 6,
148
-            user_id: 2,
706
+            profile_id: 2,
149
             grouping_id: 4,
707
             grouping_id: 4,
150
             membership_type: 'participant',
708
             membership_type: 'participant',
151
             can_edit: false,
709
             can_edit: false,
153
         },
711
         },
154
         {
712
         {
155
             membership_id: 7,
713
             membership_id: 7,
156
-            user_id: 3,
714
+            profile_id: 3,
157
             grouping_id: 5,
715
             grouping_id: 5,
158
             membership_type: 'participant',
716
             membership_type: 'participant',
159
             can_edit: false,
717
             can_edit: false,
161
         },
719
         },
162
         {
720
         {
163
             membership_id: 8,
721
             membership_id: 8,
164
-            user_id: 1,
722
+            profile_id: 1,
165
             grouping_id: 5,
723
             grouping_id: 5,
166
             membership_type: 'participant',
724
             membership_type: 'participant',
167
             can_edit: false,
725
             can_edit: false,

+ 10
- 9
backend/db/seeds/04-responses.js Прегледај датотеку

1
-const mock = require('../mock');
1
+const mock = require('../mock')
2
 
2
 
3
-exports.seed = function(knex) {
4
-  // Deletes ALL existing entries
5
-  return knex('responses').truncate()
6
-    .then(function () {
7
-      // Inserts seed entries
8
-      return knex('responses').insert(mock.responses);
9
-    });
10
-};
3
+exports.seed = function (knex) {
4
+    // Deletes ALL existing entries
5
+    return knex('responses')
6
+        .truncate()
7
+        .then(function () {
8
+            // Inserts seed entries
9
+            return knex('responses').insert(mock.responses)
10
+        })
11
+}

+ 7
- 4
backend/db/survey-generator.js Прегледај датотеку

1
+const fs = require('fs')
1
 const similarity = require('compute-cosine-similarity')
2
 const similarity = require('compute-cosine-similarity')
2
 const magic = 1000 // Multiply cosine similary by this
3
 const magic = 1000 // Multiply cosine similary by this
3
 
4
 
160
     return profiles
161
     return profiles
161
 }
162
 }
162
 
163
 
163
-const generatedSeekers = generateDummyProfiles(100, 0)
164
-const generatedProviders = generateDummyProfiles(80, generatedSeekers.length)
164
+const generatedSeekers = generateDummyProfiles(20, 0)
165
+const generatedProviders = generateDummyProfiles(5, generatedSeekers.length)
165
 const balanceSeekersAndProviders = (seekers, providers) => {
166
 const balanceSeekersAndProviders = (seekers, providers) => {
166
     let diff = 0
167
     let diff = 0
167
     let smallerList = null
168
     let smallerList = null
242
                   .indexOf(generatedProviders[0].otp.id) + 1
243
                   .indexOf(generatedProviders[0].otp.id) + 1
243
             : generatedProviders[0].otp,
244
             : generatedProviders[0].otp,
244
     )
245
     )
245
-    console.log(generatedProviders[0].matchPref.map(m => m.id))
246
+    // console.log(generatedProviders[0].matchPref.map(m => m.id))
247
+    console.log(generatedProviders[0])
246
 
248
 
247
     console.log('---')
249
     console.log('---')
248
 
250
 
257
                   .indexOf(generatedSeekers[0].otp.id) + 1
259
                   .indexOf(generatedSeekers[0].otp.id) + 1
258
             : generatedSeekers[0].otp,
260
             : generatedSeekers[0].otp,
259
     )
261
     )
260
-    console.log(generatedSeekers[0].matchPref.map(m => m.id))
262
+    console.log(generatedSeekers[0])
263
+    // console.log(generatedSeekers[0].matchPref.map(m => m.id))
261
 }
264
 }

+ 1
- 1
backend/lib/models/membership.js Прегледај датотеку

8
     static get joiSchema() {
8
     static get joiSchema() {
9
         return Joi.object({
9
         return Joi.object({
10
             membership_id: Joi.number(),
10
             membership_id: Joi.number(),
11
-            user_id: Joi.number().required(),
11
+            profile_id: Joi.number().required(),
12
             grouping_id: Joi.number().allow(null),
12
             grouping_id: Joi.number().allow(null),
13
             membership_type: Joi.string().required(),
13
             membership_type: Joi.string().required(),
14
             can_edit: Joi.boolean().required(),
14
             can_edit: Joi.boolean().required(),

+ 5
- 3
backend/lib/routes/membership/active.js Прегледај датотеку

34
 
34
 
35
 module.exports = {
35
 module.exports = {
36
     method: 'GET',
36
     method: 'GET',
37
-    path: '/active/{user_id}',
37
+    path: '/active/{profile_id}',
38
     options: {
38
     options: {
39
         ...pluginConfig.docs,
39
         ...pluginConfig.docs,
40
         tags: ['api'],
40
         tags: ['api'],
43
 
43
 
44
         handler: async function (request, h) {
44
         handler: async function (request, h) {
45
             const { membershipService } = request.services()
45
             const { membershipService } = request.services()
46
-            const userId = request.params.user_id
47
-            const groupings = await membershipService.findGroupingsById(userId)
46
+            const profileId = request.params.profile_id
47
+            const groupings = await membershipService.findGroupingsById(
48
+                profileId,
49
+            )
48
             try {
50
             try {
49
                 return {
51
                 return {
50
                     ok: true,
52
                     ok: true,

+ 2
- 2
backend/lib/routes/membership/join.js Прегледај датотеку

11
 const validators = {
11
 const validators = {
12
     join: {
12
     join: {
13
         payload: Joi.object({
13
         payload: Joi.object({
14
-            user_id: Joi.number().required(),
14
+            profile_id: Joi.number().required(),
15
             target_id: Joi.number().allow(null),
15
             target_id: Joi.number().allow(null),
16
             grouping_id: Joi.number().allow(null),
16
             grouping_id: Joi.number().allow(null),
17
             grouping_name: Joi.string().allow(null),
17
             grouping_name: Joi.string().allow(null),
52
 
52
 
53
                 /** User membership service method to create membership */
53
                 /** User membership service method to create membership */
54
                 const memberships = await membershipService.joinGrouping(
54
                 const memberships = await membershipService.joinGrouping(
55
-                    res.user_id,
55
+                    res.profile_id,
56
                     res.target_id,
56
                     res.target_id,
57
                     groupingToWrite,
57
                     groupingToWrite,
58
                     role,
58
                     role,

+ 28
- 23
backend/lib/services/membership.js Прегледај датотеку

7
 
7
 
8
     /**
8
     /**
9
      * Internal method to get list of grouping_ids for this user
9
      * Internal method to get list of grouping_ids for this user
10
-     * @param {number} userId
10
+     * @param {number} profileId
11
      * @returns {Array} List of all grouping_ids for user
11
      * @returns {Array} List of all grouping_ids for user
12
      */
12
      */
13
-    async _getGroupIdsForUserId(userId) {
13
+    async _getGroupIdsForProfileId(profileId) {
14
         const { Membership } = this.server.models()
14
         const { Membership } = this.server.models()
15
 
15
 
16
         /** Grab every Membership associated with this id */
16
         /** Grab every Membership associated with this id */
17
-        const allMemberships = await Membership.query().where('user_id', userId)
17
+        const allMemberships = await Membership.query().where(
18
+            'profile_id',
19
+            profileId,
20
+        )
18
 
21
 
19
         /** Copy a list of the just the Groupings */
22
         /** Copy a list of the just the Groupings */
20
         const groupingIdsToGrab = allMemberships.map(
23
         const groupingIdsToGrab = allMemberships.map(
52
 
55
 
53
     /**
56
     /**
54
      * Get a list of groupings for user
57
      * Get a list of groupings for user
55
-     * @param {number} userId
58
+     * @param {number} profileId
56
      * @returns {Array}
59
      * @returns {Array}
57
      */
60
      */
58
-    async findGroupingsById(userId) {
61
+    async findGroupingsById(profileId) {
59
         const { Grouping } = this.server.models()
62
         const { Grouping } = this.server.models()
60
 
63
 
61
-        const dedupedGroupings = await this._getGroupIdsForUserId(userId)
64
+        const dedupedGroupings = await this._getGroupIdsForProfileId(profileId)
62
 
65
 
63
         /** Grab just the Groupings this id has a Membership for */
66
         /** Grab just the Groupings this id has a Membership for */
64
         return await Grouping.query()
67
         return await Grouping.query()
66
             .whereIn('grouping_id', dedupedGroupings)
69
             .whereIn('grouping_id', dedupedGroupings)
67
     }
70
     }
68
 
71
 
69
-    async _groupingIdsInCommon(userId, targetId) {
70
-        const dedupedUserGroupingIds = await this._getGroupIdsForUserId(userId)
71
-        const dedupedTargetGroupingIds = await this._getGroupIdsForUserId(
72
+    async _groupingIdsInCommon(profileId, targetId) {
73
+        const dedupedUserGroupingIds = await this._getGroupIdsForProfileId(
74
+            profileId,
75
+        )
76
+        const dedupedTargetGroupingIds = await this._getGroupIdsForProfileId(
72
             targetId,
77
             targetId,
73
         )
78
         )
74
 
79
 
77
             dedupedTargetGroupingIds.includes(groupingId),
82
             dedupedTargetGroupingIds.includes(groupingId),
78
         )
83
         )
79
     }
84
     }
80
-    async _patchMembership(memberships, userId, patch) {
85
+    async _patchMembership(memberships, profileId, patch) {
81
         const { Membership } = this.server.models()
86
         const { Membership } = this.server.models()
82
 
87
 
83
         /** Set membership as active only if the user initiates it */
88
         /** Set membership as active only if the user initiates it */
84
         for (let membershipInfo of memberships) {
89
         for (let membershipInfo of memberships) {
85
             await Membership.query()
90
             await Membership.query()
86
                 .where('membership_id', membershipInfo.membership_id)
91
                 .where('membership_id', membershipInfo.membership_id)
87
-                .where('user_id', userId)
92
+                .where('user_id', profileId)
88
                 .patch(patch)
93
                 .patch(patch)
89
         }
94
         }
90
     }
95
     }
91
 
96
 
92
-    async attemptMatch(userId, targetId) {
97
+    async attemptMatch(profileId, targetId) {
93
         const { Membership } = this.server.models()
98
         const { Membership } = this.server.models()
94
 
99
 
95
         /** If both people have groups in common */
100
         /** If both people have groups in common */
96
         const matchingGroupingIds = await this._groupingIdsInCommon(
101
         const matchingGroupingIds = await this._groupingIdsInCommon(
97
-            userId,
102
+            profileId,
98
             targetId,
103
             targetId,
99
         )
104
         )
100
 
105
 
106
             )
111
             )
107
 
112
 
108
             /** Set membership as active only if the user initiates it */
113
             /** Set membership as active only if the user initiates it */
109
-            await this._patchMembership(memberships, userId, {
114
+            await this._patchMembership(memberships, profileId, {
110
                 is_active: true,
115
                 is_active: true,
111
             })
116
             })
112
 
117
 
121
     /**
126
     /**
122
      * Check for grouping membership then add membership record and set to active
127
      * Check for grouping membership then add membership record and set to active
123
      * or create a new grouping and add membership record for user and membership record for target
128
      * or create a new grouping and add membership record for user and membership record for target
124
-     * @param {number} userId
129
+     * @param {number} profileId
125
      * @param {number} targetId
130
      * @param {number} targetId
126
      * @param {object} groupingToWrite
131
      * @param {object} groupingToWrite
127
      * @param {string} role
132
      * @param {string} role
128
      * @returns
133
      * @returns
129
      */
134
      */
130
-    async joinGrouping(userId, targetId, groupingToWrite, role, txn) {
135
+    async joinGrouping(profileId, targetId, groupingToWrite, role, txn) {
131
         const { Membership } = this.server.models()
136
         const { Membership } = this.server.models()
132
 
137
 
133
         /** If both people have groups in common */
138
         /** If both people have groups in common */
134
         const matchingGroupingIds = await this._groupingIdsInCommon(
139
         const matchingGroupingIds = await this._groupingIdsInCommon(
135
-            userId,
140
+            profileId,
136
             targetId,
141
             targetId,
137
         )
142
         )
138
 
143
 
144
             )
149
             )
145
 
150
 
146
             /** Set membership as active only if the user initiates it */
151
             /** Set membership as active only if the user initiates it */
147
-            await this._patchMembership(memberships, userId, {
152
+            await this._patchMembership(memberships, profileId, {
148
                 is_active: true,
153
                 is_active: true,
149
             })
154
             })
150
 
155
 
162
             const groupingId = await this.findOrCreateGrouping(groupingToWrite)
167
             const groupingId = await this.findOrCreateGrouping(groupingToWrite)
163
 
168
 
164
             const userMembership = await Membership.query(txn).insert({
169
             const userMembership = await Membership.query(txn).insert({
165
-                user_id: userId,
170
+                profile_id: profileId,
166
                 grouping_id: groupingId,
171
                 grouping_id: groupingId,
167
                 membership_type: role,
172
                 membership_type: role,
168
                 can_edit: false,
173
                 can_edit: false,
170
             })
175
             })
171
 
176
 
172
             const targetMembership = await Membership.query(txn).insert({
177
             const targetMembership = await Membership.query(txn).insert({
173
-                user_id: targetId,
178
+                profile_id: profileId,
174
                 grouping_id: groupingId,
179
                 grouping_id: groupingId,
175
                 membership_type: role,
180
                 membership_type: role,
176
                 can_edit: false,
181
                 can_edit: false,
183
 
188
 
184
     /**
189
     /**
185
      * Remove membership record based on grouping_id
190
      * Remove membership record based on grouping_id
186
-     * @param {number} userId
191
+     * @param {number} profileId
187
      * @param {number} groupingId
192
      * @param {number} groupingId
188
      * @returns
193
      * @returns
189
      */
194
      */
190
-    async leaveGrouping(userId, groupingId) {
195
+    async leaveGrouping(profileId, groupingId) {
191
         const { Membership } = this.server.models()
196
         const { Membership } = this.server.models()
192
 
197
 
193
-        const dedupedGroupings = await this._getGroupIdsForUserId(userId)
198
+        const dedupedGroupings = await this._getGroupIdsForProfileId(profileId)
194
 
199
 
195
         /** Do NOTHING if NOT in Grouping */
200
         /** Do NOTHING if NOT in Grouping */
196
         if (!dedupedGroupings.includes(groupingId)) return
201
         if (!dedupedGroupings.includes(groupingId)) return

Loading…
Откажи
Сачувај