import { Observable } from 'rx'; import dedent from 'dedent'; import moment from 'moment'; import { observeMethod } from '../utils/rx'; function numberWithCommas(x) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } export default function about(app) { const router = app.loopback.Router(); const User = app.models.User; const userCount$ = observeMethod(User, 'count'); function showAbout(req, res, next) { const daysRunning = moment().diff(new Date('10/15/2014'), 'days'); Observable.combineLatest( userCount$(), userCount$({ isFrontEndCert: true }), userCount$({ isDataVisCert: true }), userCount$({ isBackEndCert: true }), ( userCount, frontEndCount = 0, dataVisCount = 0, backEndCount = 0 ) => ({ userCount: numberWithCommas(userCount), frontEndCount, dataVisCount, backEndCount }) ) .doOnNext(({ userCount, frontEndCount, dataVisCount, backEndCount }) => { res.render('resources/about', { userCount, frontEndCount, dataVisCount, backEndCount, daysRunning, title: dedent` About our Open Source Community, our social media presence, and how to contact us `.split('\n').join(' '), globalCompletedCount: numberWithCommas( 5612952 + (Math.floor((Date.now() - 1446268581061) / 1800)) ), globalPledgedAmount: numberWithCommas(Math.floor( 28000 + ((Date.now() - 1456207176902) / (2629746000 / 2000) * 8.30) )) }); }) .subscribe(() => {}, next); } router.get('/about', showAbout); app.use(router); }