// src/file/file.service.ts import { Injectable, Inject } from '@nestjs/common'; import { PrismaService } from 'src/prisma/prisma.service'; import type { IStorageProvider } from './storage-providers/storage-provider.interface'; @Injectable() export class FileService { constructor( private prisma: PrismaService, @Inject('StorageProvider') private readonly storageProvider: IStorageProvider, ) {} async uploadFile(file: any, folder: string) { const lastVersion = await this.prisma.file.findFirst({ where: { folder, originalName: file.originalname }, orderBy: { version: 'desc' }, }); const nextVersion = lastVersion ? lastVersion.version + 1 : 1; const storagePath = await this.storageProvider.upload(file, folder); return this.prisma.file.create({ data: { originalName: file.originalname, storagePath, folder, mimeType: file.mimetype, size: file.size, version: nextVersion, }, }); } async deleteFile(id: string) { const file = await this.prisma.file.findUnique({ where: { id } }); if (!file) return; await this.storageProvider.delete(file.storagePath); await this.prisma.file.delete({ where: { id } }); } async getFileVersions(originalName: string, folder: string) { return this.prisma.file.findMany({ where: { folder, originalName }, orderBy: { version: 'asc' }, }); } }