Skip to content

Commit 23848d8

Browse files
committed
feat: send ItemOpFeedback after the end of the transaction
1 parent 61aaa33 commit 23848d8

3 files changed

Lines changed: 85 additions & 75 deletions

File tree

src/services/item/plugins/action/index.ts

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -161,24 +161,27 @@ const plugin: FastifyPluginAsync<GraaspActionsOptions> = async (fastify) => {
161161
} = request;
162162
db.transaction(async (manager) => {
163163
const repositories = buildRepositories(manager);
164-
const item = await requestExportService.request(member, repositories, itemId);
165-
if (member && item) {
166-
websockets.publish(
167-
memberItemsTopic,
168-
member.id,
169-
ItemOpFeedbackEvent('export', [itemId], { data: { [item.id]: item }, errors: [] }),
170-
);
171-
}
172-
}).catch((e: Error) => {
173-
log.error(e);
174-
if (member) {
175-
websockets.publish(
176-
memberItemsTopic,
177-
member.id,
178-
ItemOpFeedbackEvent('export', [itemId], { error: e }),
179-
);
180-
}
181-
});
164+
return await requestExportService.request(member, repositories, itemId);
165+
})
166+
.then((item) => {
167+
if (member && item) {
168+
websockets.publish(
169+
memberItemsTopic,
170+
member.id,
171+
ItemOpFeedbackEvent('export', [itemId], { data: { [item.id]: item }, errors: [] }),
172+
);
173+
}
174+
})
175+
.catch((e: Error) => {
176+
log.error(e);
177+
if (member) {
178+
websockets.publish(
179+
memberItemsTopic,
180+
member.id,
181+
ItemOpFeedbackEvent('export', [itemId], { error: e }),
182+
);
183+
}
184+
});
182185

183186
// reply no content and let the server create the archive and send the mail
184187
reply.status(StatusCodes.NO_CONTENT);

src/services/item/plugins/recycled/index.ts

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -73,25 +73,27 @@ const plugin: FastifyPluginAsync<RecycledItemDataOptions> = async (fastify, opti
7373
log,
7474
} = request;
7575
db.transaction(async (manager) => {
76-
const items = await recycleBinService.recycleMany(member, buildRepositories(manager), ids);
77-
if (member) {
78-
websockets.publish(
79-
memberItemsTopic,
80-
member.id,
81-
ItemOpFeedbackEvent('recycle', ids, items),
82-
);
83-
}
84-
return items;
85-
}).catch((e: Error) => {
86-
log.error(e);
87-
if (member) {
88-
websockets.publish(
89-
memberItemsTopic,
90-
member.id,
91-
ItemOpFeedbackEvent('recycle', ids, { error: e }),
92-
);
93-
}
94-
});
76+
return await recycleBinService.recycleMany(member, buildRepositories(manager), ids);
77+
})
78+
.then((items) => {
79+
if (member) {
80+
websockets.publish(
81+
memberItemsTopic,
82+
member.id,
83+
ItemOpFeedbackEvent('recycle', ids, items),
84+
);
85+
}
86+
})
87+
.catch((e: Error) => {
88+
log.error(e);
89+
if (member) {
90+
websockets.publish(
91+
memberItemsTopic,
92+
member.id,
93+
ItemOpFeedbackEvent('recycle', ids, { error: e }),
94+
);
95+
}
96+
});
9597

9698
reply.status(StatusCodes.ACCEPTED);
9799
return ids;
@@ -124,24 +126,27 @@ const plugin: FastifyPluginAsync<RecycledItemDataOptions> = async (fastify, opti
124126
log.info(`Restoring items ${ids}`);
125127

126128
db.transaction(async (manager) => {
127-
const items = await recycleBinService.restoreMany(member, buildRepositories(manager), ids);
128-
if (member) {
129-
websockets.publish(
130-
memberItemsTopic,
131-
member.id,
132-
ItemOpFeedbackEvent('restore', ids, items),
133-
);
134-
}
135-
}).catch((e: Error) => {
136-
log.error(e);
137-
if (member) {
138-
websockets.publish(
139-
memberItemsTopic,
140-
member.id,
141-
ItemOpFeedbackEvent('restore', ids, { error: e }),
142-
);
143-
}
144-
});
129+
return await recycleBinService.restoreMany(member, buildRepositories(manager), ids);
130+
})
131+
.then((items) => {
132+
if (member) {
133+
websockets.publish(
134+
memberItemsTopic,
135+
member.id,
136+
ItemOpFeedbackEvent('restore', ids, items),
137+
);
138+
}
139+
})
140+
.catch((e: Error) => {
141+
log.error(e);
142+
if (member) {
143+
websockets.publish(
144+
memberItemsTopic,
145+
member.id,
146+
ItemOpFeedbackEvent('restore', ids, { error: e }),
147+
);
148+
}
149+
});
145150
reply.status(StatusCodes.ACCEPTED);
146151
return ids;
147152
},

src/services/item/plugins/validation/index.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -82,26 +82,28 @@ const plugin: FastifyPluginAsync<GraaspPluginValidationOptions> = async (fastify
8282
throw new UnauthorizedMember();
8383
}
8484
const repositories = buildRepositories(manager);
85-
const item = await validationService.post(member, repositories, itemId);
86-
87-
// the process could take long time, so let the process run in the background and return the itemId instead
88-
if (member) {
89-
websockets.publish(
90-
memberItemsTopic,
91-
member.id,
92-
ItemOpFeedbackEvent('validate', [itemId], { data: { [item.id]: item }, errors: [] }),
93-
);
94-
}
95-
}).catch((e: Error) => {
96-
log.error(e);
97-
if (member) {
98-
websockets.publish(
99-
memberItemsTopic,
100-
member.id,
101-
ItemOpFeedbackEvent('validate', [itemId], { error: e }),
102-
);
103-
}
104-
});
85+
return await validationService.post(member, repositories, itemId);
86+
})
87+
.then((item) => {
88+
// the process could take long time, so let the process run in the background and return the itemId instead
89+
if (member) {
90+
websockets.publish(
91+
memberItemsTopic,
92+
member.id,
93+
ItemOpFeedbackEvent('validate', [itemId], { data: { [item.id]: item }, errors: [] }),
94+
);
95+
}
96+
})
97+
.catch((e: Error) => {
98+
log.error(e);
99+
if (member) {
100+
websockets.publish(
101+
memberItemsTopic,
102+
member.id,
103+
ItemOpFeedbackEvent('validate', [itemId], { error: e }),
104+
);
105+
}
106+
});
105107
reply.status(StatusCodes.ACCEPTED);
106108
return itemId;
107109
},

0 commit comments

Comments
 (0)