Skip to content

Commit

Permalink
Step 12.12: Create pictures store
Browse files Browse the repository at this point in the history
  • Loading branch information
dotansimha authored and DAB0mB committed Feb 26, 2017
1 parent 9ea0480 commit 0287283
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions imports/collections/pictures.ts
@@ -0,0 +1,43 @@
import { MongoObservable } from 'meteor-rxjs';
import { UploadFS } from 'meteor/jalik:ufs';
import { Meteor } from 'meteor/meteor';
import { Picture, DEFAULT_PICTURE_URL } from '../models';

export interface PicturesCollection<T> extends MongoObservable.Collection<T> {
getPictureUrl(selector?: Object | string): string;
}

export const Pictures =
new MongoObservable.Collection<Picture>('pictures') as PicturesCollection<Picture>;

export const PicturesStore = new UploadFS.store.GridFS({
collection: Pictures.collection,
name: 'pictures',
filter: new UploadFS.Filter({
contentTypes: ['image/*']
}),
permissions: new UploadFS.StorePermissions({
insert: picturesPermissions,
update: picturesPermissions,
remove: picturesPermissions
}),
transformWrite(from, to) {
// The transformation function will only be invoked on the server. Accordingly,
// the 'sharp' library is a server-only library which will cause an error to be
// thrown when loaded on the global scope
const Sharp = Npm.require('sharp');
// Compress picture to 75% from its original quality
const transform = Sharp().png({ quality: 75 });
from.pipe(transform).pipe(to);
}
});

// Gets picture's url by a given selector
Pictures.getPictureUrl = function (selector) {
const picture = this.findOne(selector) || {};
return picture.url || DEFAULT_PICTURE_URL;
};

function picturesPermissions(userId: string): boolean {
return Meteor.isServer || !!userId;
}

0 comments on commit 0287283

Please sign in to comment.