Skip to content

Commit f66f504

Browse files
authored
Bulk enrichment error messages (#477)
1 parent 36019f8 commit f66f504

4 files changed

Lines changed: 68 additions & 43 deletions

File tree

backend/src/services/premium/enrichment/memberEnrichmentService.ts

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -163,37 +163,44 @@ export default class MemberEnrichmentService extends LoggingBase {
163163
continue
164164
} else {
165165
this.log.error(`Failed to enrich member ${memberId}`, err)
166-
apiPubSubEmitter.emit(
167-
'user',
168-
new ApiWebsocketMessage(
169-
'bulk-enrichment',
170-
JSON.stringify({
171-
enrichedMembers,
172-
tenantId: this.options.currentTenant.id,
173-
success: false,
174-
}),
175-
undefined,
176-
this.options.currentTenant.id,
177-
),
178-
)
179166
}
180167
}
181168
}
182169

183-
// Send websocket message to frontend
184-
apiPubSubEmitter.emit(
185-
'user',
186-
new ApiWebsocketMessage(
187-
'bulk-enrichment',
188-
JSON.stringify({
189-
enrichedMembers,
190-
tenantId: this.options.currentTenant.id,
191-
success: true,
192-
}),
193-
undefined,
194-
this.options.currentTenant.id,
195-
),
196-
)
170+
// Send websocket messages to frontend after all requests have been made
171+
// Only send error message if all enrichments failed
172+
if (!enrichedMembers) {
173+
apiPubSubEmitter.emit(
174+
'user',
175+
new ApiWebsocketMessage(
176+
'bulk-enrichment',
177+
JSON.stringify({
178+
failedEnrichedMembers: memberIds.length - enrichedMembers,
179+
enrichedMembers,
180+
tenantId: this.options.currentTenant.id,
181+
success: false,
182+
}),
183+
undefined,
184+
this.options.currentTenant.id,
185+
),
186+
)
187+
}
188+
// Send success message if there were enrichedMembers
189+
else {
190+
apiPubSubEmitter.emit(
191+
'user',
192+
new ApiWebsocketMessage(
193+
'bulk-enrichment',
194+
JSON.stringify({
195+
enrichedMembers,
196+
tenantId: this.options.currentTenant.id,
197+
success: true,
198+
}),
199+
undefined,
200+
this.options.currentTenant.id,
201+
),
202+
)
203+
}
197204

198205
return { enrichedMemberCount: enrichedMembers }
199206
}

frontend/src/modules/auth/auth-socket.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
showEnrichmentSuccessMessage,
99
getEnrichmentMax
1010
} from '@/modules/member/member-enrichment'
11+
import pluralize from 'pluralize'
1112

1213
let socketIoClient
1314

@@ -79,16 +80,20 @@ export const connectSocket = (token) => {
7980
if (!data.success) {
8081
Message.closeAll()
8182
Message.error(
82-
`Bulk enrichment failed. We managed to enrich ${data.enrichedMembers} members.`
83+
`Failed to enrich ${pluralize(
84+
'member',
85+
data.failedEnrichedMembers,
86+
true
87+
)}.`
8388
)
8489
} else {
85-
Message.closeAll()
8690
const planEnrichmentCountMax = getEnrichmentMax(
8791
updatedTenant.tenant.plan
8892
)
8993

9094
// Show enrichment success message
9195
showEnrichmentSuccessMessage({
96+
enrichedMembers: data.enrichedMembers,
9297
memberEnrichmentCount:
9398
updatedTenant.tenant.memberEnrichmentCount,
9499
planEnrichmentCountMax,

frontend/src/modules/member/components/list/member-list-toolbar.vue

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
v-if="areSelectedMembersNotEnriched"
2323
placement="top"
2424
content="Selected members lack an associated GitHub profile or Email"
25-
:disabled="elegibleEnrichmentMembers.length"
25+
:disabled="elegibleEnrichmentMembersIds.length"
2626
popper-class="max-w-[260px]"
2727
>
2828
<span>
2929
<el-dropdown-item
3030
command="enrichMember"
31-
:disabled="!elegibleEnrichmentMembers.length"
31+
:disabled="
32+
!elegibleEnrichmentMembersIds.length
33+
"
3234
class="mb-1"
3335
>
3436
<app-svg
@@ -113,11 +115,14 @@ export default {
113115
).edit === false
114116
)
115117
},
116-
elegibleEnrichmentMembers() {
117-
return this.selectedRows.filter(
118-
(r) =>
119-
(r.username?.github || r.email) && !r.lastEnriched
120-
)
118+
elegibleEnrichmentMembersIds() {
119+
return this.selectedRows
120+
.filter(
121+
(r) =>
122+
(r.username?.github || r.email) &&
123+
!r.lastEnriched
124+
)
125+
.map((item) => item.id)
121126
},
122127
selectedIds() {
123128
return this.selectedRows
@@ -151,10 +156,12 @@ export default {
151156
} else if (command === 'enrichMember') {
152157
// All members are elegible for enrichment
153158
if (
154-
this.elegibleEnrichmentMembers.length ===
159+
this.elegibleEnrichmentMembersIds.length ===
155160
this.selectedIds.length
156161
) {
157-
await this.doBulkEnrich(this.selectedIds)
162+
await this.doBulkEnrich(
163+
this.elegibleEnrichmentMembersIds
164+
)
158165
} else {
159166
// Only a few members are elegible for enrichment
160167
try {
@@ -166,14 +173,16 @@ export default {
166173
'Member enrichment requires an associated GitHub profile or Email. If you proceed, only the members who fulfill this requirement will be enriched and counted towards your quota.',
167174
confirmButtonText: `Proceed with enrichment (${pluralize(
168175
'member',
169-
this.elegibleEnrichmentMembers.length,
176+
this.elegibleEnrichmentMembersIds.length,
170177
true
171178
)})`,
172179
cancelButtonText: 'Cancel',
173180
icon: 'ri-alert-line'
174181
})
175182
176-
await this.doBulkEnrich(this.selectedIds)
183+
await this.doBulkEnrich(
184+
this.elegibleEnrichmentMembersIds
185+
)
177186
} catch (error) {
178187
// no
179188
}

frontend/src/modules/member/member-enrichment.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ConfirmDialog from '@/shared/dialog/confirm-dialog'
44
import { formatNumber } from '@/utils/number'
55
import { h } from 'vue'
66
import Message from '@/shared/message/message'
7+
import pluralize from 'pluralize'
78

89
const growthEnrichmentMax = 1000
910
const essentialEnrichmentMax = 5
@@ -77,6 +78,7 @@ export const checkEnrichmentPlan = ({
7778
}
7879

7980
export const showEnrichmentSuccessMessage = ({
81+
enrichedMembers = 1,
8082
memberEnrichmentCount,
8183
planEnrichmentCountMax,
8284
plan,
@@ -112,9 +114,11 @@ export const showEnrichmentSuccessMessage = ({
112114

113115
Message.closeAll()
114116
Message.success(message, {
115-
title: `Successfully enriched ${
116-
isBulk ? 'members' : 'member'
117-
}`
117+
title: `Successfully enriched ${pluralize(
118+
'member',
119+
enrichedMembers,
120+
isBulk
121+
)}`
118122
})
119123
}
120124

0 commit comments

Comments
 (0)