import { Schema } from "mongoose"; import { EnumMap,IJson,IDocument,IObject,IInstance,IModel,IAction,IActionTypes,ILocation } from "@onebro/oba-common"; export enum FinavigatorUploadStatuses { N = "New", S = "Saved", Y = "Sent", Z = "Seen/Read", A = "Accepted", D = "Declined", R = "Revised", E = "Expired", C = "Cancelled",} export type FinavigatorUploadStatus = keyof typeof FinavigatorUploadStatuses; export type FinavigatorUploadConfig = { name:string; featured:boolean; loc:ILocation;}; export type FinavigatorUploadType = IObject & FinavigatorUploadConfig; export interface FinavigatorUploadDocument extends IDocument,FinavigatorUploadType {} export interface FinavigatorUpload extends IInstance,FinavigatorUploadDocument {} export interface FinavigatorUploadModel extends IModel {} export type FinavigatorUploadPublicKeys = "name"|"featured"|"loc"; export type FinavigatorUploadPublicData = Pick; export type FinavigatorUploadJson = IJson & FinavigatorUploadPublicData & {added:Date;}; export type FinavigatorUploadSchemaMap = {upload:Schema;}; export type FinavigatorUploadActionTypes = IActionTypes; export type FinavigatorUploadActions = EnumMap; import fs from "fs"; import sharp from "sharp"; import {Request} from "express"; export type CustomStorageCallback = (...a:any[]) => void; export type CustomMulterFileCallback = (req:Request,file:any,cb:CustomStorageCallback) => void; export type CustomMulterStorageOpts = {destination:string;filename:CustomMulterFileCallback;}; export interface CustomMulterStorage extends CustomMulterStorageOpts {} export class CustomMulterStorage { constructor(opts:CustomMulterStorageOpts){Object.assign(this,opts);} _handleFile(req:Request,file:any,cb:CustomStorageCallback){ const outStream = fs.createWriteStream(this.destination); const transform = sharp().resize(200,200).jpeg(); const size = outStream.bytesWritten; file.stream.pipe(transform).pipe(outStream); outStream.on("error",cb); outStream.on("finish",() => cb(null,{path:this.destination,size}));} _removeFile(req:Request,file:any,cb:CustomStorageCallback){fs.unlink(file.path,cb);} }