···13 async executeImpl(req: AuthenticatedRequest, res: Response): Promise<any> {
14 try {
15 const { cardId } = req.params;
16+ const { collectionIds: collectionIdsParam } = req.query;
17 const curatorId = req.did;
1819 if (!curatorId) {
···24 return this.badRequest(res, 'Card ID is required');
25 }
2627+ if (!collectionIdsParam || typeof collectionIdsParam !== 'string') {
28+ return this.badRequest(
29+ res,
30+ 'Collection IDs query parameter is required',
31+ );
32+ }
33+34+ const collectionIds = collectionIdsParam
35+ .split(',')
36+ .filter((id) => id.trim() !== '');
37+38+ if (collectionIds.length === 0) {
39+ return this.badRequest(res, 'At least one collection ID is required');
40 }
4142 const result = await this.removeCardFromCollectionUseCase.execute({
+2-2
src/webapp/.storybook/vitest.setup.ts
···1-import * as a11yAddonAnnotations from "@storybook/addon-a11y/preview";
2import { setProjectAnnotations } from '@storybook/nextjs-vite';
3import * as projectAnnotations from './preview';
45// This is an important step to apply the right configuration when testing your stories.
6// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
7-setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]);
···1+import * as a11yAddonAnnotations from '@storybook/addon-a11y/preview';
2import { setProjectAnnotations } from '@storybook/nextjs-vite';
3import * as projectAnnotations from './preview';
45// This is an important step to apply the right configuration when testing your stories.
6// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
7+setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]);