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

Merge pull request #8274 from weseek/feat/78035-135776-bulk-export-related-models

page bulk export related models
Yuki Takei 2 лет назад
Родитель
Сommit
1091edfcc0

+ 31 - 0
apps/app/src/features/page-bulk-export/interfaces/page-bulk-export.ts

@@ -0,0 +1,31 @@
+import type {
+  IAttachment, IPage, IRevision, IUser, Ref,
+} from '@growi/core';
+
+export const PageBulkExportFormat = {
+  markdown: 'markdown',
+  pdf: 'pdf',
+} as const;
+
+type PageBulkExportFormat = typeof PageBulkExportFormat[keyof typeof PageBulkExportFormat]
+
+export interface IPageBulkExportJob {
+  user: Ref<IUser>, // user that started export job
+  page: Ref<IPage>, // the root page of page tree to export
+  lastUploadedPagePath: string, // the path of page that was uploaded last
+  uploadId: string, // upload ID of multipart upload of S3/GCS
+  format: PageBulkExportFormat,
+  expireAt: Date, // the date at which job execution expires
+}
+
+export interface IPageBulkExportResult {
+  attachment: Ref<IAttachment>,
+  expireAt: Date, // the date at which downloading of result expires
+}
+
+// snapshot of page info to upload
+export interface IPageBulkExportPageInfo {
+  pageBulkExportJob: Ref<IPageBulkExportJob>,
+  path: string, // page path when export was stared
+  revision: Ref<IRevision>, // page revision when export was stared
+}

+ 20 - 0
apps/app/src/features/page-bulk-export/server/models/page-bulk-export-job.ts

@@ -0,0 +1,20 @@
+import { type Document, type Model, Schema } from 'mongoose';
+
+import { getOrCreateModel } from '~/server/util/mongoose-utils';
+
+import { IPageBulkExportJob, PageBulkExportFormat } from '../../interfaces/page-bulk-export';
+
+export interface PageBulkExportJobDocument extends IPageBulkExportJob, Document {}
+
+export type PageBulkExportJobModel = Model<PageBulkExportJobDocument>
+
+const pageBulkExportJobSchema = new Schema<PageBulkExportJobDocument>({
+  user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
+  page: { type: Schema.Types.ObjectId, ref: 'Page', required: true },
+  lastUploadedPagePath: { type: String, required: true },
+  uploadId: { type: String, required: true },
+  format: { type: String, enum: Object.values(PageBulkExportFormat), required: true },
+  expireAt: { type: Date, required: true },
+}, { timestamps: true });
+
+export default getOrCreateModel<PageBulkExportJobDocument, PageBulkExportJobModel>('PageBulkExportJob', pageBulkExportJobSchema);

+ 17 - 0
apps/app/src/features/page-bulk-export/server/models/page-bulk-export-page-info.ts

@@ -0,0 +1,17 @@
+import { type Document, type Model, Schema } from 'mongoose';
+
+import { getOrCreateModel } from '~/server/util/mongoose-utils';
+
+import { IPageBulkExportPageInfo } from '../../interfaces/page-bulk-export';
+
+export interface PageBulkExportPageInfoDocument extends IPageBulkExportPageInfo, Document {}
+
+export type PageBulkExportPageInfoModel = Model<PageBulkExportPageInfoDocument>
+
+const pageBulkExportPageInfoSchema = new Schema<PageBulkExportPageInfoDocument>({
+  pageBulkExportJob: { type: Schema.Types.ObjectId, ref: 'PageBulkExportJob', required: true },
+  path: { type: String, required: true },
+  revision: { type: Schema.Types.ObjectId, ref: 'Revision', required: true },
+}, { timestamps: true });
+
+export default getOrCreateModel<PageBulkExportPageInfoDocument, PageBulkExportPageInfoModel>('PageBulkExportPageInfo', pageBulkExportPageInfoSchema);

+ 16 - 0
apps/app/src/features/page-bulk-export/server/models/page-bulk-export-result.ts

@@ -0,0 +1,16 @@
+import { type Document, type Model, Schema } from 'mongoose';
+
+import { getOrCreateModel } from '~/server/util/mongoose-utils';
+
+import { IPageBulkExportResult } from '../../interfaces/page-bulk-export';
+
+export interface PageBulkExportResultDocument extends IPageBulkExportResult, Document {}
+
+export type PageBulkExportResultModel = Model<PageBulkExportResultDocument>
+
+const pageBulkExportResultSchema = new Schema<PageBulkExportResultDocument>({
+  attachment: { type: Schema.Types.ObjectId, ref: 'Attachment', required: true },
+  expireAt: { type: Date, required: true },
+}, { timestamps: true });
+
+export default getOrCreateModel<PageBulkExportResultDocument, PageBulkExportResultModel>('PageBulkExportResult', pageBulkExportResultSchema);