Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 93 additions & 77 deletions src/services/item/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,23 +198,27 @@ const plugin: FastifyPluginAsync = async (fastify) => {
repositories,
resultOfToList(items),
);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('update', ids, items),
);
}
}).catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('update', ids, { error: e }),
);
}
});
return items;
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('update', ids, items),
);
}
})
.catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('update', ids, { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return ids;
},
Expand All @@ -236,26 +240,30 @@ const plugin: FastifyPluginAsync = async (fastify) => {
const repositories = buildRepositories(manager);
const items = await itemService.deleteMany(member, repositories, ids);
await actionItemService.postManyDeleteAction(request, reply, repositories, items);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('delete', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
}).catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('delete', ids, { error: e }),
);
}
});
return items;
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('delete', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
})
.catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('delete', ids, { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return ids;
},
Expand All @@ -275,26 +283,30 @@ const plugin: FastifyPluginAsync = async (fastify) => {
const repositories = buildRepositories(manager);
const items = await itemService.moveMany(member, repositories, ids, parentId);
await actionItemService.postManyMoveAction(request, reply, repositories, items);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('move', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
}).catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('move', ids, { error: e }),
);
}
});
return items;
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('move', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
})
.catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('move', ids, { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return ids;
},
Expand All @@ -319,26 +331,30 @@ const plugin: FastifyPluginAsync = async (fastify) => {
parentId,
});
await actionItemService.postManyCopyAction(request, reply, repositories, items);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('copy', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
}).catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('copy', ids, { error: e }),
);
}
});
return items;
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('copy', ids, {
data: Object.fromEntries(items.map((i) => [i.id, i])),
errors: [],
}),
);
}
})
.catch((e) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('copy', ids, { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return ids;
},
Expand Down
39 changes: 21 additions & 18 deletions src/services/item/plugins/action/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,24 +161,27 @@ const plugin: FastifyPluginAsync<GraaspActionsOptions> = async (fastify) => {
} = request;
db.transaction(async (manager) => {
const repositories = buildRepositories(manager);
const item = await requestExportService.request(member, repositories, itemId);
if (member && item) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('export', [itemId], { data: { [item.id]: item }, errors: [] }),
);
}
}).catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('export', [itemId], { error: e }),
);
}
});
return await requestExportService.request(member, repositories, itemId);
})
.then((item) => {
if (member && item) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('export', [itemId], { data: { [item.id]: item }, errors: [] }),
);
}
})
.catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('export', [itemId], { error: e }),
);
}
});

// reply no content and let the server create the archive and send the mail
reply.status(StatusCodes.NO_CONTENT);
Expand Down
79 changes: 42 additions & 37 deletions src/services/item/plugins/recycled/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,25 +73,27 @@ const plugin: FastifyPluginAsync<RecycledItemDataOptions> = async (fastify, opti
log,
} = request;
db.transaction(async (manager) => {
const items = await recycleBinService.recycleMany(member, buildRepositories(manager), ids);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('recycle', ids, items),
);
}
return items;
}).catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('recycle', ids, { error: e }),
);
}
});
return await recycleBinService.recycleMany(member, buildRepositories(manager), ids);
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('recycle', ids, items),
);
}
})
.catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('recycle', ids, { error: e }),
);
}
});

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

db.transaction(async (manager) => {
const items = await recycleBinService.restoreMany(member, buildRepositories(manager), ids);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('restore', ids, items),
);
}
}).catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('restore', ids, { error: e }),
);
}
});
return await recycleBinService.restoreMany(member, buildRepositories(manager), ids);
})
.then((items) => {
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('restore', ids, items),
);
}
})
.catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('restore', ids, { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return ids;
},
Expand Down
42 changes: 22 additions & 20 deletions src/services/item/plugins/validation/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,26 +82,28 @@ const plugin: FastifyPluginAsync<GraaspPluginValidationOptions> = async (fastify
throw new UnauthorizedMember();
}
const repositories = buildRepositories(manager);
const item = await validationService.post(member, repositories, itemId);

// the process could take long time, so let the process run in the background and return the itemId instead
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('validate', [itemId], { data: { [item.id]: item }, errors: [] }),
);
}
}).catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('validate', [itemId], { error: e }),
);
}
});
return await validationService.post(member, repositories, itemId);
})
.then((item) => {
// the process could take long time, so let the process run in the background and return the itemId instead
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('validate', [itemId], { data: { [item.id]: item }, errors: [] }),
);
}
})
.catch((e: Error) => {
log.error(e);
if (member) {
websockets.publish(
memberItemsTopic,
member.id,
ItemOpFeedbackEvent('validate', [itemId], { error: e }),
);
}
});
reply.status(StatusCodes.ACCEPTED);
return itemId;
},
Expand Down