NateFerrero/amna

View on GitHub
examples/uploader/amna_modules/upload.js

Summary

Maintainability
A
2 hrs
Test Coverage
'use strict';

var amna = module.exports = require('../../../src/index.js');
var fs = require('fs');
var path = require('path');

var uploadController = module.exports = amna.controller();

/**
 * Render the home page
 */
uploadController.get('/', function(self) {
    return self.render('index');
});

/**
 * Upload an image
 */
uploadController.post('/send', function(self) {
    if (!self.req.files.uploadFile) {
        return self.err('No file uploaded', 400);
    }

    var fileSize = self.req.files.uploadFile['size'];
    var fileType = self.req.files.uploadFile['mimetype'];

    if (fileSize < 1500) {
        return self.err('Uploaded file is too small', 400);
    }

    if (fileSize > 150000) {
        return self.err('Uploaded file is too big', 400);
    }

    if (fileType != 'image/jpeg' && fileType != 'image/png') {
        return self.err('Uploaded file must be a jpeg or png image', 400);
    }

    var fileName = path.basename(self.req.files.uploadFile.path);
    var oldPath = self.req.files.uploadFile.path;
    var newPath = process.cwd() + '/public/images/' + fileName;
    fs.rename(oldPath, newPath, function(err) {
        if (err) {
            return self.err('Unable to move uploaded file');
        }

        var upload = new amna.things.Upload.model({name: fileName});
        upload.save(function(err, result) {
            if (err) {
                return self.err(err);
            } else {
                return self.done(result);
            }
        });
    });
});

/**
 * List all uploads
 */
uploadController.get('/uploads', function(self) {
    var query = {};
    amna.things.Upload.model.find(query, function(err, result) {
        if (err) {
            return self.err(err);
        } else {
            return self.done(result);
        }
    });
});

/**
 * Delete upload
 */
 uploadController.delete('/uploads/:id', function(self) {
    var id = self.params.id;
    amna.things.Upload.model.findById(id, function(err, result) {
        if (err) {
            return self.err(err);
        }

        var fileName = result.name;
        fs.unlink('public/images/' + fileName, function(err) {
            if (err) {
                return self.err(err);
            }

            amna.things.Upload.model.remove({_id: self.params.id}, function(err, result) {
                if (err) {
                    return self.err(err);
                }
                return self.done(result);
            });
        });
    });
 });