Skip to content

Commit 13a1cd8

Browse files
committed
feat(http): add message deduplication utility
1 parent 1a68dc5 commit 13a1cd8

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

api/analytic/nodes.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,5 @@ func GetNodesAnalytic(c *gin.Context) {
6666
}
6767

6868
time.Sleep(10 * time.Second)
69-
logger.Debug("[analytic nodes] sleep 10 seconds")
7069
}
7170
}

app/src/lib/http/index.ts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,25 @@ const instance = axios.create({
4545

4646
const nprogress = useNProgress()
4747

48+
// Add new dedupe utility at the top
49+
interface MessageDedupe {
50+
error: (content: string, duration?: number) => void
51+
}
52+
53+
function useMessageDedupe(interval = 5000): MessageDedupe {
54+
const lastMessages = new Map<string, number>()
55+
56+
return {
57+
async error(content, duration = 5) {
58+
const now = Date.now()
59+
if (!lastMessages.has(content) || (now - (lastMessages.get(content) || 0)) > interval) {
60+
lastMessages.set(content, now)
61+
message.error(content, duration)
62+
}
63+
},
64+
}
65+
}
66+
4867
instance.interceptors.request.use(
4968
config => {
5069
nprogress.start()
@@ -70,16 +89,16 @@ instance.interceptors.request.use(
7089
},
7190
)
7291

92+
const dedupe = useMessageDedupe()
93+
7394
instance.interceptors.response.use(
7495
response => {
7596
nprogress.done()
76-
7797
return Promise.resolve(response.data)
7898
},
7999
// eslint-disable-next-line sonarjs/cognitive-complexity
80100
async error => {
81101
nprogress.done()
82-
83102
const otpModal = use2FAModal()
84103
switch (error.response.status) {
85104
case 401:
@@ -110,26 +129,26 @@ instance.interceptors.response.use(
110129
const msg = errors?.[err.scope]?.[err.code]
111130

112131
if (msg) {
113-
// if err has parmas
132+
// if err has params
114133
if (err?.params && err.params.length > 0) {
115134
let res = msg()
116135

117136
err.params.forEach((param, index) => {
118137
res = res.replaceAll(`{${index}}`, param)
119138
})
120139

121-
message.error(res, 5)
140+
dedupe.error(res)
122141
}
123142
else {
124-
message.error(msg(), 5)
143+
dedupe.error(msg())
125144
}
126145
}
127146
else {
128-
message.error($gettext(err?.message ?? 'Server error'))
147+
dedupe.error($gettext(err?.message ?? 'Server error'))
129148
}
130149
}
131150
else {
132-
message.error($gettext(err?.message ?? 'Server error'))
151+
dedupe.error($gettext(err?.message ?? 'Server error'))
133152
}
134153

135154
return Promise.reject(error.response.data)

0 commit comments

Comments
 (0)