| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- const Uploader = require("../models/uploader.js");
- const Gallery = require("../models/gallery.js");
- const createId = require("./createId.js");
- module.exports = {
- /*
- POST: create a new gallery
- req.body = {
- uploader: String (id of owner)
- password: String
- title: String
- tags: [String]
- coordinates: String
- }
- req.files = [images]
- */
- create: function(req, res){
- Uploader.findOne({_id: req.body.uploader})
- .then((uploader)=>{
- if(uploader === null) throw "uploader";
- if(req.body.password !== uploader.password) throw "pass";
- let coords = req.body.coordinates.split(", ")
- let gallery = new Gallery({
- owner: uploader._id,
- title: req.body.title,
- tags: req.body.tags.split(","),
- location: {
- type: "Point",
- coordinates: [parseFloat(coords[0]), parseFloat(coords[1])]
- },
- images: []
- });
- let handleImage = (fileData)=>{
- let fileString = `/galleryImages/${createId(25)}.webp`;
- fileData.mv(`${__dirname}/..${fileString}`);
- gallery.images.push(fileString)
- }
- if(req.files.images.length === undefined) handleImage(req.files.images);
- for(let i = 0; i < req.files.images.length; i++){
- handleImage(req.files.images[i]);
- };
- return gallery.save();
- })
- .then((gallery)=>{
- return res.redirect(`/gallery/${gallery._id}`);
- })
- .catch((err)=>{
- console.error(err);
- if(err === "uploader") return res.json("You do not have permission to upload");
- if(err === "pass") return res.json("Incorrect password");
- return res.json("ERROR: something went wrong");
- });
- },
- getGalleries: function(req, res){
- Gallery.find()
- .then((galleries)=>{
- return res.json({galleries: galleries, mapboxKey: process.env.MAPBOX_KEY});
- })
- .catch((err)=>{
- return res.json("ERROR: could not fetch galleries");
- });
- },
- /*
- GET: fetch the data for a single gallery
- req.params.id = String (gallery id)
- response = Gallery
- */
- getGallery: function(req, res){
- Gallery.findOne({_id: req.params.id})
- .then((gallery)=>{
- return res.json(gallery);
- })
- .catch((err)=>{
- return res.json("ERROR: could not fetch gallery");
- });
- },
- /*
- POST: updates a gallery
- req.body = {
- uploader: String
- password: String
- title: String
- tags: String
- location: String
- }
- req.files = {
- images: undefined || Image || [Image]
- }
- req.params.id = String (id of gallery)
- */
- updateGallery: function(req, res){
- Promise.all([
- Uploader.findOne({_id: req.body.uploader}),
- Gallery.findOne({_id: req.params.id})
- ])
- .then((response)=>{
- if(response[0] === null || response[1].owner.toString() !== req.body.uploader) throw "uploader";
- if(response[0].password !== req.body.password) throw "password";
- let coords = req.body.location.split(", ");
- response[1].title = req.body.title;
- response[1].tags = req.body.tags.split(",");
- response[1].location = {
- type: "Point",
- coordinates: [parseFloat(coords[0]), parseFloat(coords[1])]
- };
- let handleImage = (fileData)=>{
- let fileString = `/galleryImages/${createId(25)}.jpg`;
- fileData.mv(`${__dirname}/..${fileString}`);
- response[1].images.push(fileString);
- }
- if(req.files !== null){
- if(req.files.images.length === undefined) handleImage(req.files.images);
- for(let i = 0; i < req.files.images.length; i++){
- handleImage(req.files.images[i]);
- }
- }
- return response[1].save()
- })
- .then((gallery)=>{
- return res.redirect(`/gallery/${gallery._id}`);
- })
- .catch((err)=>{
- if(err === "uploader") return res.json("Incorrect uploader");
- if(err === "password") return res.json("Incorrect password");
- return res.json("ERROR: a whoopsie happened");
- })
- }
- }
|