ソースを参照

:sparkles: adding matcher to watch frontend for match notifications

tags/0.0.1^2
J 3年前
コミット
a1b56ab824

+ 0
- 11
backend/lib/routes/membership/active.js ファイルの表示

@@ -81,17 +81,6 @@ module.exports = {
81 81
                 return g
82 82
             })
83 83
 
84
-            request.server.methods.notify(
85
-                `${profileId}.stonk`,
86
-                {
87
-                    name: 'MSHRM',
88
-                    price: (500 + Math.floor(Math.random() * 100)).toString(),
89
-                    order: null,
90
-                    type: 'info',
91
-                },
92
-                h,
93
-            )
94
-
95 84
             try {
96 85
                 return {
97 86
                     ok: true,

+ 15
- 3
backend/lib/routes/membership/join.js ファイルの表示

@@ -74,6 +74,20 @@ module.exports = {
74 74
                     role,
75 75
                 )
76 76
                 // console.log(memberships)
77
+                const hasMatch = memberships.every(
78
+                    membership => membership.is_active == true,
79
+                )
80
+                if (hasMatch) {
81
+                    request.server.methods.notify(
82
+                        `${profileId}.match`,
83
+                        {
84
+                            name: 'Match Fffound',
85
+                            target: res.target_id,
86
+                            type: 'info',
87
+                        },
88
+                        h,
89
+                    )
90
+                }
77 91
 
78 92
                 return h
79 93
                     .response({
@@ -81,9 +95,7 @@ module.exports = {
81 95
                         handler: pluginConfig.handlerType,
82 96
                         data: {
83 97
                             memberships,
84
-                            hasMatch: memberships.every(
85
-                                membership => membership.is_active == true,
86
-                            ),
98
+                            hasMatch,
87 99
                         },
88 100
                     })
89 101
                     .code(200)

+ 8
- 1
frontend/src/services/login.service.js ファイルの表示

@@ -1,5 +1,10 @@
1 1
 import { ref } from 'vue'
2
-import { fetchResponsesByProfileId, Chatter, StonkAlert } from '../services'
2
+import {
3
+    fetchResponsesByProfileId,
4
+    Chatter,
5
+    StonkAlert,
6
+    MatchAlert,
7
+} from '../services'
3 8
 import { surveyFactory } from '../utils'
4 9
 
5 10
 
@@ -18,6 +23,7 @@ class Login {
18 23
         this.tags = []
19 24
 
20 25
         this.toaster = null
26
+        this.matcher = null
21 27
         this.chatter = null
22 28
     }
23 29
     get isLoading() {
@@ -100,6 +106,7 @@ class Login {
100 106
      */
101 107
     setupToaster(waveCb) {
102 108
         this.toaster = new StonkAlert(this.id.value, waveCb)
109
+        this.matcher = new MatchAlert(this.id.value, waveCb)
103 110
     }
104 111
     setupChatter() {
105 112
         this.chatter = new Chatter()

+ 16
- 1
frontend/src/services/notification.service.js ファイルの表示

@@ -37,5 +37,20 @@ class StonkAlert extends Toaster {
37 37
         return `${parsed.name}: ${parsed.profile_id} ${parsed.order} at ${parsed.price}`
38 38
     }
39 39
 }
40
+class MatchAlert extends Toaster {
41
+    constructor(profileId, waveCb) {
42
+        super(profileId)
43
+        this.event = 'match'
44
+        this.matches = {}
45
+        this.listenFor(`${profileId}.${this.event}`, message => {
46
+            const parsed = JSON.parse(message.data)
47
+            this.matches[parsed.target] = parsed
48
+            waveCb(this._formatToast(parsed), parsed.type)
49
+        })
50
+    }
51
+    _formatToast(parsed) {
52
+        return `${parsed.name}: ${parsed.target}`
53
+    }
54
+}
40 55
 
41
-export { Toaster, StonkAlert }
56
+export { Toaster, StonkAlert, MatchAlert }

読み込み中…
キャンセル
保存