From 8d1cd6e8711cad3550ebbe69e2a2dcf471f3ee67 Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Sat, 21 Oct 2017 18:07:44 +0300 Subject: Handle loading latest images --- package.json | 1 + server.js | 35 +++++++++++++++++++++++++++++++++-- yarn.lock | 4 ++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 572e8b5..f2f13f3 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "aws-sdk": "^2.138.0", "express": "^4.16.2", "mapbox-gl": "^0.40.1", + "moment": "^2.19.1", "pug": "^2.0.0-rc.4", "redis": "^2.8.0", "request": "^2.83.0", diff --git a/server.js b/server.js index 6d2b33c..e612391 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,8 @@ const app = express() const redis = require('redis') const client = redis.createClient(process.env.REDIS_URL) +const moment = require('moment') + const request = require('request') const aws = require('aws-sdk') const s3 = new aws.S3() @@ -38,7 +40,7 @@ function fetchImages() { console.log(`Uploading to bucket`) s3.putObject({ Bucket: 'imgs.geshem.space', - Key: `${r}/${d}/${t}.png`, + Key: `${d}/${t}/${r}.png`, ContentType: response.headers['content-type'], ContentLength: response.headers['content-length'], Body: body, @@ -49,7 +51,10 @@ function fetchImages() { client.del(key) } else { - client.set(key, data.ETag.slice(1, -1)) + client.multi([ + ['set', key, data.ETag.slice(1, -1)], + ['del', 'images:latest'] + ]).exec() } }) } @@ -87,6 +92,32 @@ app.use('/', function (req, res, next){ next() }); +app.get('/imgs', function (req, res) { + res.setHeader('Content-Type', 'application/json'); + client.get('images:latest', (err, reply) => { + if (err) { + console.log(err) + } + else if (!reply) { + s3.listObjectsV2({ + Bucket: 'imgs.geshem.space', + //StartAfter: moment().subtract(1, 'days').format('YYYYMMDD') + }, (err, data) => { + const imgs = data.Contents.slice(-20).map( (d) => d.Key) + const imgres = JSON.stringify({ + '140': imgs.filter( (d) => d.endsWith('140.png') ), + '280': imgs.filter( (d) => d.endsWith('280.png') ) + }) + client.set('images:latest', imgres) + res.send(imgres) + }) + } + else { + res.send(reply) + } + }) +}) + app.get('/', function (req, res) { res.render('index', { prod: process.env.NODE_ENV === 'production' }) }) diff --git a/yarn.lock b/yarn.lock index 11d4776..f5f2dae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2991,6 +2991,10 @@ mixin-object@^2.0.1: dependencies: minimist "0.0.8" +moment@^2.19.1: + version "2.19.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -- cgit v1.3.1