file service module added
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
// 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' },
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user