Просмотр исходного кода

return duplicate page bulk export job to client on duplicate error

Futa Arai 1 год назад
Родитель
Сommit
71ca751c3a

+ 4 - 1
apps/app/src/features/page-bulk-export/client/components/PageBulkExportSelectModal.tsx

@@ -6,6 +6,7 @@ import { Modal, ModalHeader, ModalBody } from 'reactstrap';
 import { apiv3Post } from '~/client/util/apiv3-client';
 import { toastError, toastSuccess } from '~/client/util/toastr';
 import { usePageBulkExportSelectModal } from '~/features/page-bulk-export/client/stores/modal';
+import type { IPageBulkExportJob } from '~/features/page-bulk-export/interfaces/page-bulk-export';
 import { PageBulkExportFormat } from '~/features/page-bulk-export/interfaces/page-bulk-export';
 import { useCurrentPagePath } from '~/stores/page';
 
@@ -15,7 +16,8 @@ const PageBulkExportSelectModal = (): JSX.Element => {
   const { data: currentPagePath } = useCurrentPagePath();
 
   const [isRestartModalOpened, setIsRestartModalOpened] = useState(false);
-  const [formatMemoForRestart, setFormatMemoForRestart] = useState<PageBulkExportFormat | null>(null);
+  const [formatMemoForRestart, setFormatMemoForRestart] = useState<PageBulkExportFormat | undefined>(undefined);
+  const [duplicateJob, setDuplicateJob] = useState<IPageBulkExportJob | undefined>(undefined);
 
   const startBulkExport = async(format: PageBulkExportFormat) => {
     try {
@@ -26,6 +28,7 @@ const PageBulkExportSelectModal = (): JSX.Element => {
     catch (e) {
       const errorCode = e?.[0].code ?? 'page_export.failed_to_export';
       if (errorCode === 'page_export.duplicate_bulk_export_job_error') {
+        setDuplicateJob(e[0].args.duplicateJob);
         setIsRestartModalOpened(true);
       }
       else {

+ 3 - 1
apps/app/src/features/page-bulk-export/server/routes/apiv3/page-bulk-export.ts

@@ -48,7 +48,9 @@ module.exports = (crowi: Crowi): Router => {
     catch (err) {
       logger.error(err);
       if (err instanceof DuplicateBulkExportJobError) {
-        return res.apiv3Err(new ErrorV3('Duplicate bulk export job is in progress', 'page_export.duplicate_bulk_export_job_error'), 409);
+        return res.apiv3Err(new ErrorV3(
+          'Duplicate bulk export job is in progress', 'page_export.duplicate_bulk_export_job_error', undefined, { duplicateJob: err.duplicateJob },
+        ), 409);
       }
       return res.apiv3Err(new ErrorV3('Failed to start bulk export', 'page_export.failed_to_export'));
     }

+ 8 - 1
apps/app/src/features/page-bulk-export/server/service/page-bulk-export/errors.ts

@@ -1,7 +1,14 @@
+import type { HydratedDocument } from 'mongoose';
+
+import type { PageBulkExportJobDocument } from '../../models/page-bulk-export-job';
+
 export class DuplicateBulkExportJobError extends Error {
 
-  constructor() {
+  duplicateJob: HydratedDocument<PageBulkExportJobDocument>;
+
+  constructor(duplicateJob: HydratedDocument<PageBulkExportJobDocument>) {
     super('Duplicate bulk export job is in progress');
+    this.duplicateJob = duplicateJob;
   }
 
 }

+ 1 - 1
apps/app/src/features/page-bulk-export/server/service/page-bulk-export/index.ts

@@ -94,7 +94,7 @@ class PageBulkExportService {
         this.restartBulkExportJob(duplicatePageBulkExportJobInProgress);
         return;
       }
-      throw new DuplicateBulkExportJobError();
+      throw new DuplicateBulkExportJobError(duplicatePageBulkExportJobInProgress);
     }
     const pageBulkExportJob: HydratedDocument<PageBulkExportJobDocument> = await PageBulkExportJob.create({
       user: currentUser, page: basePage, format, status: PageBulkExportJobStatus.initializing,