feat: use file save upsert logic rather than insert for avoid duplicate recording of the same file

pull/147/merge
moonrailgun 1 year ago
parent e768bd11f9
commit 9b72fc3ffe

@ -5,6 +5,7 @@ import {
Ref, Ref,
modelOptions, modelOptions,
Severity, Severity,
index,
} from '@typegoose/typegoose'; } from '@typegoose/typegoose';
import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'; import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';
import type { Types } from 'mongoose'; import type { Types } from 'mongoose';
@ -18,6 +19,7 @@ import { User } from './user/user';
allowMixed: Severity.ALLOW, allowMixed: Severity.ALLOW,
}, },
}) })
@index({ bucketName: 1, objectName: 1 })
export class File extends TimeStamps implements Base { export class File extends TimeStamps implements Base {
_id: Types.ObjectId; _id: Types.ObjectId;
id: string; id: string;

@ -288,15 +288,22 @@ class FileService extends TcService {
this.minioClient this.minioClient
.statObject(this.bucketName, objectName) .statObject(this.bucketName, objectName)
.then((stat) => .then((stat) =>
this.adapter.insert({ this.adapter.model.updateOne(
etag, {
userId: new Types.ObjectId(userId),
bucketName: this.bucketName, bucketName: this.bucketName,
objectName, objectName,
},
{
etag,
userId: new Types.ObjectId(userId),
url, url,
size: stat.size, size: stat.size,
metaData: stat.metaData, metaData: stat.metaData,
}) },
{
upsert: true,
}
)
) )
.catch((err) => { .catch((err) => {
this.logger.error(`持久化到数据库失败: ${objectName}`, err); this.logger.error(`持久化到数据库失败: ${objectName}`, err);

Loading…
Cancel
Save