feat: complete cmpp platform phases 0-5

This commit is contained in:
hectorzhao
2026-07-01 13:22:04 +08:00
parent 824a8b334f
commit ee926fea04
86 changed files with 10490 additions and 14 deletions
+60
View File
@@ -0,0 +1,60 @@
import { Injectable } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
import { ObjectStorageService } from './object-storage.service';
export interface CreateFileObjectDto {
tenantId?: string;
bucket: string;
objectKey: string;
fileName: string;
contentType: string;
sizeBytes: number | string;
checksum?: string;
purpose: string;
}
export interface CreatePresignedUploadDto {
objectKey: string;
expiresInSeconds?: number;
}
@Injectable()
export class FilesService {
constructor(
private readonly prisma: PrismaService,
private readonly objectStorage: ObjectStorageService,
) {}
list(tenantId?: string) {
return this.prisma.fileObject.findMany({
where: tenantId ? { tenantId } : undefined,
orderBy: { createdAt: 'desc' },
take: 100,
});
}
create(data: CreateFileObjectDto) {
const createData: Prisma.FileObjectUncheckedCreateInput = {
tenantId: data.tenantId,
bucket: data.bucket,
objectKey: data.objectKey,
fileName: data.fileName,
contentType: data.contentType,
sizeBytes: BigInt(data.sizeBytes),
checksum: data.checksum,
purpose: data.purpose,
};
return this.prisma.fileObject.create({ data: createData });
}
async createPresignedUpload(data: CreatePresignedUploadDto) {
const uploadUrl = await this.objectStorage.presignedPutObject(data.objectKey, data.expiresInSeconds ?? 3600);
return {
bucket: this.objectStorage.getBucket(),
objectKey: data.objectKey,
uploadUrl,
expiresInSeconds: data.expiresInSeconds ?? 3600,
};
}
}