import {ResourceType} from '@prisma/client' import im, {Features} from 'imagemagick' import fs from 'node:fs' import path from 'node:path' import {db} from '@/lib/db/prisma/client' export const PUBLIC_UPLOAD_PRODUCTS_DIR = '/uploads/products' export const UPLOAD_PRODUCTS_DIR = path.resolve( `./public${PUBLIC_UPLOAD_PRODUCTS_DIR}` ) export function getFilesByProductId(id: number, fullPath: boolean = true) { const files = fs .readdirSync(UPLOAD_PRODUCTS_DIR) .filter(file => file.startsWith(`${id}-`)) return !fullPath ? files : files.map(file => path.join(UPLOAD_PRODUCTS_DIR, file)) } interface ProductImage { type: string productId: number filesize: number height: number width: number 'mime type'?: string mimeType: string quality: number properties: { signature: string } signature: string } export async function getMetaOfFile(id: number) { getFilesByProductId(id).forEach(file => { im.identify(file, async (err, features) => { if (err) throw err // { format: 'JPEG', width: 3904, height: 2622, depth: 8 } const data = features as ProductImage try { const result = await db.productResource.create({ data: { type: 'IMAGE' as ResourceType, productId: id, uri: PUBLIC_UPLOAD_PRODUCTS_DIR + '/' + path.basename(file), filesize: parseInt(data.filesize as unknown as string), height: data.height, width: data.width, quality: data.quality, mimeType: data['mime type'] || 'image/*', signature: data.properties.signature //meta: features } }) //return result } catch (e) { //console.log(e) } }) }) }