bizmatch-project/bizmatch-server/src/file/file.service.ts

76 lines
2.7 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { fstat, readFileSync } from 'fs';
import { join } from 'path';
import { fileURLToPath } from 'url';
import path from 'path';
import fs from 'fs-extra';
import { ImageProperty } from 'src/models/main.model.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
@Injectable()
export class FileService {
private subscriptions: any;
constructor() {
this.loadSubscriptions();
fs.ensureDirSync(`./pictures`);
fs.ensureDirSync(`./pictures/profile`);
fs.ensureDirSync(`./pictures/logo`);
fs.ensureDirSync(`./pictures/property`);
}
private loadSubscriptions(): void {
const filePath = join(__dirname,'..', 'assets', 'subscriptions.json');
const rawData = readFileSync(filePath, 'utf8');
this.subscriptions = JSON.parse(rawData);
}
getSubscriptions() {
return this.subscriptions
}
async storeProfilePicture(file: Express.Multer.File,userId: string){
const suffix = file.mimetype.includes('png')?'png':'jpg'
await fs.outputFile(`./pictures/profile/${userId}`,file.buffer);
}
async storeCompanyLogo(file: Express.Multer.File,userId: string){
const suffix = file.mimetype.includes('png')?'png':'jpg'
await fs.outputFile(`./pictures/logo/${userId}`,file.buffer);
}
async getPropertyImages(listingId: string):Promise<ImageProperty[]>{
const result:ImageProperty[]=[]
const directory = `./pictures/property/${listingId}`
if (fs.existsSync(directory)){
const files = await fs.readdir(directory);
files.forEach(f=>{
const image:ImageProperty={name:f,id:'',code:''};
result.push(image)
})
return result;
} else {
return []
}
}
async storePropertyPicture(file: Express.Multer.File,listingId: string){
const suffix = file.mimetype.includes('png')?'png':'jpg'
const directory = `./pictures/property/${listingId}`
fs.ensureDirSync(`${directory}`);
const imageName = await this.getNextImageName(directory);
await fs.outputFile(`${directory}/${imageName}`,file.buffer);
}
async getNextImageName(directory) {
try {
const files = await fs.readdir(directory);
const imageNumbers = files
.map(file => parseInt(file, 10)) // Dateinamen direkt in Zahlen umwandeln
.filter(number => !isNaN(number)) // Sicherstellen, dass die Konvertierung gültig ist
.sort((a, b) => a - b); // Aufsteigend sortieren
const nextNumber = imageNumbers.length > 0 ? Math.max(...imageNumbers) + 1 : 1;
return `${nextNumber}`; // Keine Endung für den Dateinamen
} catch (error) {
console.error('Fehler beim Lesen des Verzeichnisses:', error);
return null;
}
}
}