summaryrefslogtreecommitdiff
path: root/src/models/drive-file-thumbnail.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/drive-file-thumbnail.ts')
-rw-r--r--src/models/drive-file-thumbnail.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/models/drive-file-thumbnail.ts b/src/models/drive-file-thumbnail.ts
new file mode 100644
index 0000000000..46de24379f
--- /dev/null
+++ b/src/models/drive-file-thumbnail.ts
@@ -0,0 +1,61 @@
+import * as mongo from 'mongodb';
+import monkDb, { nativeDbConn } from '../db/mongodb';
+
+const DriveFileThumbnail = monkDb.get<IDriveFileThumbnail>('driveFileThumbnails.files');
+DriveFileThumbnail.createIndex('metadata.originalId', { sparse: true, unique: true });
+export default DriveFileThumbnail;
+
+export const DriveFileThumbnailChunk = monkDb.get('driveFileThumbnails.chunks');
+
+export const getDriveFileThumbnailBucket = async (): Promise<mongo.GridFSBucket> => {
+ const db = await nativeDbConn();
+ const bucket = new mongo.GridFSBucket(db, {
+ bucketName: 'driveFileThumbnails'
+ });
+ return bucket;
+};
+
+export type IMetadata = {
+ originalId: mongo.ObjectID;
+};
+
+export type IDriveFileThumbnail = {
+ _id: mongo.ObjectID;
+ uploadDate: Date;
+ md5: string;
+ filename: string;
+ contentType: string;
+ metadata: IMetadata;
+};
+
+/**
+ * DriveFileThumbnailを物理削除します
+ */
+export async function deleteDriveFileThumbnail(driveFile: string | mongo.ObjectID | IDriveFileThumbnail) {
+ let d: IDriveFileThumbnail;
+
+ // Populate
+ if (mongo.ObjectID.prototype.isPrototypeOf(driveFile)) {
+ d = await DriveFileThumbnail.findOne({
+ _id: driveFile
+ });
+ } else if (typeof driveFile === 'string') {
+ d = await DriveFileThumbnail.findOne({
+ _id: new mongo.ObjectID(driveFile)
+ });
+ } else {
+ d = driveFile as IDriveFileThumbnail;
+ }
+
+ if (d == null) return;
+
+ // このDriveFileThumbnailのチャンクをすべて削除
+ await DriveFileThumbnailChunk.remove({
+ files_id: d._id
+ });
+
+ // このDriveFileThumbnailを削除
+ await DriveFileThumbnail.remove({
+ _id: d._id
+ });
+}