tuned-city
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

api.js
application/javascript

Download raw (5.1 KB)

/*
 * routes.api
 *
 */

var models = require('../models');
var _utils_ = require('../lib/utils');
var settings = require('../settings').settings;
var fs = require('fs');
var _ = require('underscore');
var slugify = require('slug');

exports.get = function(req, res){
    var type = req.params.type;
    var model = models[type];
    var cond = {};
    if(req.params.id)
    {
        cond._id = req.params.id;
    }
    model.find(cond, function media_find(err, m){
        if(err) { res.send('500', err); }
        else
        {
            if(m.length > 0)
            {
                if(req.params.id)
                    res.send(m[0]);
                else
                    res.send(m);
            }
            else
                res.send('404', 'Could not find *it* on this server');
        }
    });
};


exports.post = function(req, res){
    var type = req.params.type;
    
    var posters = {
        Media:function(req, res){
//             console.log(settings.public);
            var media = req.files.media;
            var media_dir = settings.public.media_dir;
            var media_url = settings.public.media_url;
            fs.readFile(media.path, function (err, data){
                if(err){res.send(err)}
                else
                {
                    var fname = slugify(media.name);
                    var newPath =  media_dir + fname ;
                    fs.writeFile(newPath, data, function (err){
                        if(err){res.send(err)}
                        else
                        {
                            var t = media.type.split('/');
                            var subtype = t.pop();
                            var _type = t.pop();
                            if(subtype === 'webm')
                            {
                                if(_type === 'video')
                                    subtype = 'webmv';
                                else
                                    subtype = 'webma';
                            }
                            if(subtype === 'ogg')
                            {
                                if(_type === 'audio')
                                    subtype = 'oga';
                                else
                                    subtype = 'ogv';
                            }
                            var obj = {
                                url:  fname,
                                 type: _type+'/'+subtype,
                            };
                            var mm = new models.Media(obj);
                            mm.save();
                            res.send(mm);
                        }
                    });
                }
            });
        },
        _generic:function(type,req,res){
            var entity = req.body;
            var obj = new models[type](entity);
            obj.save();
            res.send(obj);
        },
    };
    
    if(posters[type] !== undefined)
    {
        posters[type](req, res);
    }
    else
    {
        posters._generic(type, req, res);
    }
};


exports.put = function(req, res){
    var type = req.params.type;
    
    var patchers = {
        _generic:function(type, req, res){
            var entity = req.body;
            models[type].update({_id: req.params.id},
                                _.omit(entity, '_id') , 
                                { upsert: true }, 
                                function(err, numberAffected, raw){
                                    if(err) { 
                                        res.send('500', _.extend(err,{
                                            entity:entity,
                                            params:{
                                                type:req.params.type,
                                                id:req.params.id,
                                            },
                                        }));
                                    }
                                    else
                                    {
                                        models[type].find({_id:req.params.id}, function(err, m){
                                            if(err) { res.send('500', err); }
                                            else
                                            {
                                                if(m.length > 0)
                                                    res.send(m[0]);
                                                else
                                                    res.send('404', 'Could not find *it* on this server');
                                            }
                                        });
                                    }
                                });
        },
    };
    
    if(patchers[type] !== undefined)
    {
        patchers[type](req, res);
    }
    else
    {
        patchers._generic(type, req, res);
    }
};

exports.destroy = function(req, res){
    var type = req.params.type;
    var id = req.params.id;
    models[type].remove({_id:id},
        function(err){
            console.log(err);
        }
    );
    res.status(204).send();
};