UNPKG

@riturajgc/upload-manager-service

Version:

Upload manager service for bitnudge

99 lines (87 loc) 2.68 kB
const StorageTypes = require('../lib/utils/StorageTypes'); const setModel = function ( type, mongoose ) { const { ObjectId } = mongoose.Schema.Types; //Base schema for anytype of storage type const BaseSchema = { //source - from where user is uploading the image source: { device: {type:String,required:true}, userId: {type:ObjectId,ref:'User'}, creation: {type:String} }, isActive: {type:Boolean,default:true}, history: [{ _id: false, changedAt: {type:Date}, isActive: {type:Boolean}, actionBy: { device: {type:String,required:true}, userId: {type:ObjectId,ref:'User'}, } }], }; const ModelDecorators = { strict: false, timestamps: true, }; const StoreInDBSchema = { //file - all the property related to file //thumbnail - thumbnail of image //hash - store hash of file file:{ name:{type:String,required:true}, fileType:{type:String,required:true}, content:{type:Buffer,required:true}, height:{type:Number,required:true}, width:{type:Number,required:true}, size:{type:String,required:true} }, thumbnail:{ name:{type:String}, fileType:{type:String}, content:{type:Buffer} }, isThumbnailAvailable:{type:Boolean,default:false}, hash:{type:String,required:true} }; const StoreInFSSchema = { //TODO: Define mongoose schema for FS Storage type }; const StoreInS3Schema = { //TODO: Define mongoose schema for S3 Storage type }; let StorageModel, indexFields; if(type === StorageTypes.list.INDB){ StorageModel = new mongoose.Schema(Object.assign(StoreInDBSchema, BaseSchema), ModelDecorators); indexFields = [ 'source.userId', 'isActive' ]; }else if(type === StorageTypes.list.INFS){ StorageModel = new mongoose.Schema(Object.assign(StoreInFSSchema, BaseSchema), ModelDecorators); //TODO: Define index fields for FS Storage type indexFields = [ 'source.userId', 'isActive' ]; }else if(type === StorageTypes.list.INS3){ StorageModel = new mongoose.Schema(Object.assign(StoreInS3Schema, BaseSchema), ModelDecorators); //TODO: Define index fields for S3 Storage type indexFields = [ 'source.userId', 'isActive' ]; } let fields = {}; indexFields.forEach(function(field) { fields[field] = 1; }); StorageModel.index(fields, {background:true}); const modelName = 'FileStore'; if(!mongoose.modelNames().includes(modelName)){ return mongoose.model(modelName, StorageModel); }else{ return mongoose.model(modelName); } }; module.exports = setModel;