Files
test/src/file/file.service.ts
T
2025-11-26 17:07:07 +03:00

54 lines
1.4 KiB
TypeScript

// 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' },
});
}
}