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

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

Loading…
Cancel
Save