From f51d78b6610e434b940fd8759a04ceba4a9c4f5a Mon Sep 17 00:00:00 2001 From: vincentlaucy Date: Tue, 29 Nov 2016 14:14:41 +0800 Subject: [PATCH 1/2] clean up --- ui/src/app/index.jsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ui/src/app/index.jsx b/ui/src/app/index.jsx index d2f6208..3a67aac 100644 --- a/ui/src/app/index.jsx +++ b/ui/src/app/index.jsx @@ -24,13 +24,6 @@ import { FETCH_AGG } from './store/actions' // won't auto update until gulp script let REACTION_TYPES = require('./meta.js').REACTION_TYPES -function getEndpoint (location, offset) { - var url = 'https://8zbfsx31e0.execute-api.ap-northeast-1.amazonaws.com/prod/reactions' - url += '?location=' + location - url += '&offset=' + offset || 0 - return url -} - // TODO by daily (HK) emotion? // http://stackoverflow.com/questions/260857/changing-website-favicon-dynamically (function () { From c38f0eed46a3f96e7c417275dee77de113eceab0 Mon Sep 17 00:00:00 2001 From: vincentlaucy Date: Tue, 29 Nov 2016 17:02:53 +0800 Subject: [PATCH 2/2] add types --- common/types-api.js | 31 +++++++++++++++++++ common/types-post.js | 30 +++++++++++++++++++ common/types-reactions.js | 15 ++++++++++ package.json | 11 ++++++- test/fixture-api.js | 1 + test/types.spec.js | 58 ++++++++++++++++++++++++++++++++++++ ui/src/app/fetchReactions.js | 24 +++++++++++---- 7 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 common/types-api.js create mode 100644 common/types-post.js create mode 100644 common/types-reactions.js create mode 100644 test/fixture-api.js create mode 100644 test/types.spec.js diff --git a/common/types-api.js b/common/types-api.js new file mode 100644 index 0000000..918da6d --- /dev/null +++ b/common/types-api.js @@ -0,0 +1,31 @@ +var factory = function() { + return {}; +}; + +var schema = { + type: 'object', + patternProperties: { + '.*_.*': { + type: 'object', + properties: { + reactions: { + type: 'object' + }, + tops: { + type: 'array', + minItems: 1, + items: require('./types-post') + }, + summary:{ + type: 'object' + } + }, + required: ['reactions', 'tops', 'summary'] + } + } +}; + +module.exports = { + schema: schema, + factory: factory +}; diff --git a/common/types-post.js b/common/types-post.js new file mode 100644 index 0000000..754bdad --- /dev/null +++ b/common/types-post.js @@ -0,0 +1,30 @@ +var factory = function() { + return {} +}; + +var schema = { + type: 'object', + properties: { + id: { + type: 'string', + pattern: '\\d+_\\d+' + }, + type:{ + enum : require('./fb-api').REACTION_TYPES + }, + count: { + type: 'number' + }, + message:{ + type: 'string' + }, + caption: { + type: 'string' + } + } +}; + +module.exports = { + schema: schema, + factory: factory +}; diff --git a/common/types-reactions.js b/common/types-reactions.js new file mode 100644 index 0000000..8dac60b --- /dev/null +++ b/common/types-reactions.js @@ -0,0 +1,15 @@ +var factory = function() { + return {} +}; + +var schema = { + type: 'object', + patternProperties: { + '.*': { type: 'integer', default: 0 } + } +}; + +module.exports = { + schema: schema, + factory: factory +}; diff --git a/package.json b/package.json index d633313..1ce49c5 100644 --- a/package.json +++ b/package.json @@ -4,20 +4,29 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "mocha test/**.spec.js", "deploy": "apex -s FB_APP_ID='$FB_APP_ID' -s FB_APP_SECRET=='$FB_APP_SECRET' deploy" }, "author": "", "license": "MIT", + "eslint": { + "extends": "google", + "rules": {} + }, "dependencies": { "bluebird": "^3.3.5", "chai": "^3.5.0", "dotenv": "^2.0.0", "limiter": "^1.1.0", "lodash": "*", + "mocha": "^3.2.0", "moment": "^2.13.0", "redis": "^2.6.0-1", "request-promise": "*", "winston": "^2.2.0" + }, + "devDependencies": { + "eslint": "^3.11.1", + "eslint-config-google": "^0.7.1" } } diff --git a/test/fixture-api.js b/test/fixture-api.js new file mode 100644 index 0000000..e90db0a --- /dev/null +++ b/test/fixture-api.js @@ -0,0 +1 @@ +module.exports = {"1480348800000_1480435199999":{"reactions":{"LIKE":1852,"LOVE":78,"WOW":87,"HAHA":247,"SAD":18,"ANGRY":293,"THANKFUL":0},"summary":{"total":2591,"postCount":17},"tops":[{"id":"105259197447_10155002711492448","type":"HAHA","count":98,"message":"周博賢、陳慧當選!\n\n(不斷更新)【藝發局選戰】黃秋生連任失敗 周博賢陳慧當選\nhttp://bit.ly/2fXKCRE\n【承認落敗提早離場 黃秋生:我唔理㗎嘞 返屋企瞓覺】\nhttp://bit.ly/2fXRHBx","description":"(點票結果不斷更新)【02:15】藝發局改選6個範疇初步結果如下:舞蹈(梅卓...","name":"(不斷更新)【藝發局選戰】黃秋生連任失敗 周博賢陳慧當選","created_time":"2016-11-28T18:30:48+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2fXKCRE"},{"id":"498203090239831_1244021125658020","type":"HAHA","count":76,"message":"【暫時唔告住】入稟人表示,經過慎重考慮和諮詢法律意見,決定刪去上述6個人的名字,強調只是「暫時唔告佢哋住」,而是待日後才作決定。\n報道: http://bit.ly/2gxKz2A\n\n【Emily Online】曾鈺成自爆對李慧琼第一印象:嘩,美貌少女! http://bit.ly/2gxHj7e\n【體察街頭民情談官民溝通 曾蔭權:只要有心,再大難題都可解】 http://bit.ly/2gxLr79 \n【短片:特首跑馬仔】曾鈺成查證下月中辭行會傳聞 葉劉:陷我於不義 適當時宣布參選 http://bit.ly/2gxHTSw\n\n#明報 #明報即時新聞 #愛港之聲 #宣誓風波 #司法覆核\n====================================\n【讚好「明報即時新聞」專頁】\n● 請於FB將專頁設定為「搶先看」(See First)\n● 請下載「明報」App,緊貼最新消息:\niPhone:http://apple.co/1foEZKS\nAndroid:http://bit.ly/1foESyU","description":"於翠華茶餐廳任職侍應的愛港之聲成員陳嘉偉,早前入稟高等法院申請司法覆核,要求法庭取消11名立法會議員就任資格,包括羅冠聰、朱凱廸、鄭松泰、梁國雄、邵家臻、陳志全、張超雄、尹兆堅、鄺俊宇、黃碧雲及林卓廷。他今日向高等法院申請,將立法會主席梁君彥加入為答辯人,並刪去針對陳志全、張超雄、尹兆堅、鄺俊宇、黃碧雲及林卓廷共6名立法會議員的訴訟,但將立法會議員姚松炎加入訴訟之中。","name":"【宣誓覆核】原促取消11議員資格 愛港之聲成員今刪6人但增姚松炎 梁君彥列答辯人 - 港聞","created_time":"2016-11-28T17:03:29+0000","caption":"news.mingpao.com","link":"http://bit.ly/2gxKz2A"},{"id":"498203090239831_1244012358992230","type":"ANGRY","count":71,"message":"【老問題】李天柱指民航處會加倍努力,確保航空交通安全有秩序,「用事實來證明一切」,惟大家不要「捕風捉影」地將一些舊系統一直都存在、外國空管都會出現的情況歸咎於新系統。\n報道: http://bit.ly/2gxq3Pf\n\n【新空管系統】兩客機距離低於標準 民航處強調無損安全 舊系統每月約1宗 http://bit.ly/2gxxcz8\n【隔空開火】任建峰批誹謗 梁美芬反斥亂指人誹謗都是誹謗 http://bit.ly/2gwJwjl\n【曾鈺成自爆對李慧琼第一印象:嘩,美貌少女!】 \nhttp://bit.ly/2fqhypC\n\n#明報 #明報即時新聞 #民航處 \n=====================================\n【讚好「明報即時新聞」專頁】\n● 請於FB將專頁設定為「搶先看」(See First)\n● 請下載「明報」App,緊貼最新消息:\niPhone:http://apple.co/1foEZKS\nAndroid:http://bit.ly/1foESyU","description":"民航處本月14日全面啟用新空管系統後,出現「鬼影」、航機消失、航機之間距離不足等問題,備受關注。連日來多次解畫的民航處長李天柱再次強調,新系統運作十分暢順,呼籲公眾不要「捕風捉影」,勿把一些舊系統一直都存在、外國空管都會出現的情況歸咎於新系統。","name":"【新空管系統】兩機距離低於標準 民航處長稱新系統適時提醒修正 - 港聞","created_time":"2016-11-28T19:30:00+0000","caption":"news.mingpao.com","link":"http://bit.ly/2gxq3Pf"}],"ratio":{"LIKE":0.714781937475878,"LOVE":0.03010420686993439,"WOW":0.033577769201080666,"HAHA":0.0953299884214589,"SAD":0.006947124662292551,"ANGRY":0.11308375144731764,"THANKFUL":0}},"1480262400000_1480348799999":{"reactions":{"LIKE":46501,"LOVE":898,"WOW":6761,"HAHA":7796,"SAD":934,"ANGRY":17347,"THANKFUL":0},"summary":{"total":80435,"postCount":74},"tops":[{"id":"105259197447_10155001568342448","type":"ANGRY","count":4445,"message":"禁得一時,就禁到一世?這裡還是香港嗎?\n\n#空管危機\n【譚文豪指民航處滅聲 發通告禁空管人員再爆料】\nhttp://bit.ly/2gxClYh\n【民航處處長投稿:新空管系統需時調整及優化】\nhttp://bit.ly/2gBjYPC","description":"早前踢爆新空管系統出現問題的公民黨譚文豪表示,民航處兩日前向空管人員發通告,要求不可將航班或空管系統...","name":"【空管危機】譚文豪指民航處滅聲 發通告禁空管人員再爆料","created_time":"2016-11-28T11:50:01+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161128&s=6996647&a=55977299"},{"id":"105259197447_10155001010077448","type":"ANGRY","count":3662,"message":"〈等睇原版被告侵權〉\n原作者Wendy Taylor表示,歐洲的版權法有效禁止類似情況,但「中國的法律有所不同」…\n\n【山寨強國】黃浦江翻抄倫敦地標 原作雕塑家轟:厚顏無恥\nhttp://bit.ly/2fUs190","description":"知識產權在中國蕩然無存,上海近日被揭發在黃浦江出現一座「山寨」雕塑,直接「複製」倫敦地標性藝術品,在...","name":"【山寨強國】黃浦江翻抄倫敦地標 原作雕塑家轟:厚顏無恥","created_time":"2016-11-28T06:09:00+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2fUs190"},{"id":"105259197447_10155000560662448","type":"ANGRY","count":3637,"message":"港人在外出事,中國政府會馬上這樣幫你啊~ ( 好似係 )\n\n【強拆港人內地廠房 黑公安電棍拘港人子】\nhttp://bit.ly/2gzbusn","description":"內地暴力強拆事件無日無之,港商亦無法倖免。港人鄭太在深圳南山區開設水泥廠17年,本月1日遭數百特警、...","name":"強拆港人內地廠房 黑公安電棍拘港人子","created_time":"2016-11-28T01:51:29+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2gzbusn港人"}],"ratio":{"LIKE":0.5781189780568161,"LOVE":0.01116429415055635,"WOW":0.08405544849878784,"HAHA":0.09692298128923976,"SAD":0.011611860508485112,"ANGRY":0.21566482252750668,"THANKFUL":0}},"1480176000000_1480262399999":{"reactions":{"LIKE":31422,"LOVE":909,"WOW":2632,"HAHA":2983,"SAD":2640,"ANGRY":11462,"THANKFUL":0},"summary":{"total":52172,"postCount":56},"tops":[{"id":"105259197447_10154997765192448","type":"ANGRY","count":5813,"message":"被割喉嘅唐狗小禾為咗自己骨肉,再痛都會忍。\n而狠下毒手嘅人,無論如何都唔能夠容忍。\n\n#逃過鬼門關\n【火炭唐狗遭割喉險1屍5命 義工:母愛令牠堅強】\nhttp://bit.ly/2fAiHGf ←短片\n【村民:小禾好乖 遭割喉好愕然】\nhttp://bit.ly/2gyoVZs","description":"「相信係母愛…才令小禾可以咁堅強捱過難關!」禾寮坑村懷孕唐狗女「小禾」,個多星期前因在寮屋外排泄觸怒...","name":"【突工隊】【逃過鬼門關】火炭唐狗遭割喉險1屍5命 義工:母愛令牠堅強","created_time":"2016-11-27T02:36:38+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161127&s=10829391&a=55971247&ref=tw"},{"id":"105259197447_10154997672637448","type":"ANGRY","count":3822,"message":"呢班成日話會睇候選者政綱嘅人,連自己嘅政綱都未寫好喎。#佢哋有得揀 #我哋冇得揀 #公平咩\n\n#特首選委戰\n【極醜惡!選委300自動當選 騎呢政綱笑到肚攣】\nhttp://bit.ly/2fA9cHb ←短片\n【四大家族政綱曝光 李嘉誠強調特首要為「港人帶來希望」】\nhttp://bit.ly/2gy46NI\n【由剝花生到爭選委 年輕工程師力抗「紅」潮】\nhttp://bit.ly/2gtK75m","description":"特首由小圈子1,200選委產生,絕大部份香港人都無份投票,但今屆選委其實不足1,200人。因為1,2...","name":"【特首選委戰】300選委自動當選 hea寫政綱盡顯小圈子醜陋","created_time":"2016-11-27T02:00:45+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161127&s=6996647&a=55971263&ref=tw"},{"id":"105259197447_10154995923227448","type":"WOW","count":1272,"message":"細個上堂望住課室把吊扇,最驚就係佢突然間…… (O_O) \n\n【巧驚驚】佛山餐廳吊扇從天而降 婦人臉部割傷\nhttp://bit.ly/2grSTk7","description":"佛山市襌城區的鄧姓女子,近日公開始在一間餐廳食飯「中頭獎」的經歷。她在一間餐廳用餐時,天花板的吊扇突...","name":"【巧驚驚】佛山餐廳吊扇從天而降 婦人臉部割傷","created_time":"2016-11-26T16:15:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161126&s=10793096&a=55969305&ref=tw"}],"ratio":{"LIKE":0.6022770834930614,"LOVE":0.017423138848424443,"WOW":0.050448516445603005,"HAHA":0.05717626312964809,"SAD":0.05060185540136471,"ANGRY":0.21969638886759182,"THANKFUL":0}},"1480089600000_1480175999999":{"reactions":{"LIKE":44752,"LOVE":2618,"WOW":1471,"HAHA":3714,"SAD":964,"ANGRY":12285,"THANKFUL":0},"summary":{"total":65973,"postCount":65},"tops":[{"id":"105259197447_10154993328622448","type":"ANGRY","count":8815,"message":"2年後嘅今日,朱經緯已經退休,律政司仲未提控,政府亦唔就案件回應,朱經緯佢有佢嘅生活,仲有一筆嚟自公帑嘅退休金...... #朱經緯打人 #氣難平 \n\n【律政司拖兩年未拉人 鳩嗚團周六晚遊行抗議】\nhttp://bit.ly/2fieKuA\n\n早前報道:\n【逾720日律政司仍未提控 保安局咁答…】\nhttp://bit.ly/2gh4jZp","name":"Timeline Photos","created_time":"2016-11-26T01:00:00+0000","link":"https://www.facebook.com/hk.nextmedia/photos/a.170516952447.149676.105259197447/10154993328622448/?type=3"},{"id":"105259197447_10154995350942448","type":"HAHA","count":1377,"message":"度劇名一定要叫呢班同學仔!佢哋真係好有創意咁表達咗有幾耐冇睇TVB…\n\n#蘋果動搞作\n【嫌TVB演員戲屎 學生睇Netflix超級英雄】\nhttp://bit.ly/2gvCcSn ←足本版\n【不理阿莫】裝Netflix後,7個改變的習慣\nhttp://bit.ly/2gvHD3I ←短片","name":"【嫌TVB演員戲屎 學生睇Netflix超級英雄】","created_time":"2016-11-26T08:15:00+0000","link":"https://www.facebook.com/hk.nextmedia/videos/10154995350942448/"},{"id":"105259197447_10154995737857448","type":"ANGRY","count":990,"message":"呢位校長完美演繹咩嘢叫愛國~ #舔舐\n\n【港專生畢業禮舉牌反釋法 校長斥辱國歌:外遊遇天災戰亂邊個救你?】\nhttp://bit.ly/2g2IvyO ←短片\n【畢業禮讚我國強大 港專校長:頭號帝國主義睇唔慣 想圍堵踩地底】\nhttp://bit.ly/2fBCus8 ←短片\n【和平舉牌被訓斥辱國歌 港專畢業生:人大侮辱緊港人】\nhttp://bit.ly/2gJHSLM","description":"為阻止青年新政游蕙禎和梁頌恆再宣誓就職立法會議員,人大委員長張德江未待本港法院宣判,主動提出人大釋法...","name":"港專生畢業禮舉牌反釋法 校長斥辱國歌:外遊遇天災戰亂邊個救你?","created_time":"2016-11-26T10:50:16+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161126&s=6996647&a=55968842&ref=tw"}],"ratio":{"LIKE":0.6783381080138845,"LOVE":0.039682900580540525,"WOW":0.022297000287996603,"HAHA":0.05629575735528171,"SAD":0.014612038258075274,"ANGRY":0.18621254149424765,"THANKFUL":0}},"1480003200000_1480089599999":{"reactions":{"LIKE":27736,"LOVE":828,"WOW":3040,"HAHA":3449,"SAD":4005,"ANGRY":11405,"THANKFUL":0},"summary":{"total":50589,"postCount":77},"tops":[{"id":"105259197447_10154992140057448","type":"ANGRY","count":3870,"message":"嘩,尊貴嘅教育局局長親自同你上一課「民與官交流技巧」,仲唔感恩?#曲 #好大嘅官威\n\n【吳克儉轟會面遲到節外生枝 團體反揭拒見青年擺官威】\nhttp://bit.ly/2grEPVq","description":"經常自稱樂意和學界交流的教育局局長吳克儉周四晚忽然在其facebook「爆seed」,點名批評民間組...","name":"吳克儉轟會面遲到節外生枝 團體反揭拒見青年擺官威","created_time":"2016-11-25T04:26:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161125&s=6996647&a=55962858&ref=tw"},{"id":"105259197447_10154991819537448","type":"ANGRY","count":2662,"message":"恐襲目標係充滿小朋友同埋歡樂嘅地方……\n\n【恐襲陰霾】IS謀下周四襲巴黎 目標包括迪士尼樂園】\nhttp://bit.ly/2glCVnS\n\n另看:\n【伊拉克汽車彈襲擊增至100死 遇害多伊朗朝聖者】\nhttp://bit.ly/2ga2n0l","description":"法國警方透露,極端組織「伊斯蘭國」(IS)計劃下周四在巴黎發動襲擊,目標包括迪士尼樂園和香榭麗舍大道...","name":"【恐襲陰霾】IS謀下周四襲巴黎 目標包括迪士尼樂園","created_time":"2016-11-25T02:15:01+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161125&s=10793140&a=55962381&ref=tw"},{"id":"105259197447_10154990127472448","type":"SAD","count":1678,"message":"士多現時每月要兩萬元租金,明年四月約滿,但方太表示做到下月八日就會結業,之後會專心陪伴丈夫接受電療化療,她現時只想盡快賣出存貨,亦希望有有心人頂手來換取醫藥費,大家有時間的話,不妨去看看,協助他們度過難關。\n\n【荃灣小店老闆末期癌症 老伴急散貨籌醫藥費】\nhttp://bit.ly/2fIe0vb","description":"【新增影片】位於荃灣沙咀道的生記士多,開業已經23年,主要賣煙酒飲品,身體一向健康的士多...","name":"荃灣小店老闆末期癌症 老伴急散貨籌醫藥費","created_time":"2016-11-25T00:00:00+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2fIe0vb"}],"ratio":{"LIKE":0.5482614797683291,"LOVE":0.01636719444938623,"WOW":0.060092114886635434,"HAHA":0.06817687639605448,"SAD":0.07916740793453123,"ANGRY":0.22544426654015695,"THANKFUL":0}},"1479916800000_1480003199999":{"reactions":{"LIKE":65968,"LOVE":3698,"WOW":3872,"HAHA":5800,"SAD":5577,"ANGRY":13522,"THANKFUL":0},"summary":{"total":98689,"postCount":77},"tops":[{"id":"105259197447_10154988796562448","type":"ANGRY","count":7081,"message":"真係好international lorrr~\n\n【大學收內地生氾濫成災 八大上年度收近1.2萬人】\nhttp://bit.ly/2f8JY7g\n【理大校長認宿位不足難多收非本地生 未來加建宿舍】\nhttp://bit.ly/2giXce1\n\n另看其他 #審計報告 報道:\n【開支10年增3倍豪待外地成員 教資會開13個會機票花1,180萬】\nhttp://bit.ly/2fGyHHu ←短片\n【公帑補貼38億處理廢料】\nhttp://bit.ly/2fGyHY0 ←短片\n【CCTV捉非法倒泥檢控率僅27% 近半個案車牌不清晰未能提告】\nhttp://bit.ly/2fGxzDS ←短片","description":"本港資助大學一直被指內地生氾濫,根據審計報告,上年度八大的15,730名非本地學生中,高達76%為內...","name":"【審計報告】大學收內地生氾濫成災 八大上年度收近1.2萬人","created_time":"2016-11-24T01:10:26+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161124&s=6996647&a=55957058&ref=tw"},{"id":"105259197447_10154989513132448","type":"ANGRY","count":2961,"message":"香港坐擁1,178公里長嘅海岸線,本來應該係中華白海豚嘅屋企。不過近年,香港唔少海灘都有垃圾湧現......呢個港,仲係我哋熟悉嘅「香」港?\n\n【香港海岸全部都係膠!CNN高空拍攝驚現「垃圾海」】\nhttp://bit.ly/2ftYDZo","description":"傳媒近月多次發現本港多處沙灘及海域充斥塑膠以至工業廢料,除了令港人關注,原來海洋垃圾問題最近也「揚威...","name":"香港海岸全部都係膠!CNN高空拍攝驚現「垃圾海」","created_time":"2016-11-24T08:30:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161124&s=6996647&a=55959272&ref=tw"},{"id":"105259197447_10154989696747448","type":"LOVE","count":2553,"message":"英國呢位爸爸患上糖尿病,某日因為血糖過低陷入昏迷,屋企嘅3歲小朋友模仿媽媽以前嘅做法,「擔櫈仔」開雪櫃攞乳酪。當唔夠高拎餐具,佢仲情急智生,諗到用「煮飯仔」玩具餵爸爸食,救番爸爸一命! <3 叻仔!\n\n【動畫●3歲識救人】爸爸血糖過低昏迷 英童搵煮飯仔玩具救番佢!\nhttp://bit.ly/2gDsZdD","description":"英國大曼徹斯特郡一位爸爸在家中血糖過低陷入糖尿昏迷,他的3歲兒子情急智生,不單「擔櫈仔」開雪櫃拿乳酪...","name":"【動畫●3歲識救人】爸爸血糖過低昏迷 英童搵煮飯仔玩具救番佢!","created_time":"2016-11-24T10:00:00+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2gDsZdD"}],"ratio":{"LIKE":0.66844329155225,"LOVE":0.03747124806209405,"WOW":0.03923436249227371,"HAHA":0.05877048100598851,"SAD":0.05651085733972378,"ANGRY":0.1370162834763753,"THANKFUL":0}},"1479830400000_1479916799999":{"reactions":{"LIKE":56281,"LOVE":2653,"WOW":4406,"HAHA":3366,"SAD":4340,"ANGRY":26301,"THANKFUL":0},"summary":{"total":97598,"postCount":75},"tops":[{"id":"105259197447_10154985921012448","type":"ANGRY","count":13145,"message":"女兒複述駱婆婆所指,「女看護話換尿片要20蚊一次,如果唔畀就會好大力打落嚟(屁股)」,女看護每日亦會向婆婆說「你快啲死啦」、「早啲死」。\n\n#虐老風波\n【獨家】八旬婆婆大腿瘀傷兼赤裸臥床 護老院女看護涉虐老被捕\nhttp://bit.ly/2fDm14v ←短片\n【中心回應:女院友自行脫褲有前科】\nhttp://bit.ly/2geHhx1\n【香港防止虐待長者協會︰強烈譴責涉事院舍】\nhttp://bit.ly/2geOldj","description":"深水埗一間護老中心發生懷疑虐老事件!年近八旬、半身不遂的患癌老婦,周二早上被家人發現下半身赤裸躺在床...","name":"【獨家】八旬婆婆大腿瘀傷兼赤裸臥床 護老院女看護涉虐老被捕","created_time":"2016-11-23T01:25:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161123&s=10829391&a=55952745&ref=tw"},{"id":"105259197447_10154986566027448","type":"ANGRY","count":5030,"message":"一係就銷毀,一係就連紀錄都冇。 #等你咩都查唔到\n\n【梁特上台後大量銷毀檔案 林鄭:只銷毀沒歷史價值檔案】\nhttp://bit.ly/2fpVoCt","description":"政務司長林鄭月娥今日於立法會回應議員質詢時表示,政府重視檔案管理,要求政策局和部門強制執行符合國際做...","name":"梁特上台後大量銷毀檔案 林鄭:只銷毀沒歷史價值檔案","created_time":"2016-11-23T07:03:40+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161123&s=6996647&a=55954782&ref=tw"},{"id":"105259197447_10154987300672448","type":"SAD","count":2219,"message":"冇媽媽一直支持,又點有囡囡畢業嘅一日。\n出嚟社大記得好好孝敬父母喇!\n#泰感動 #父母恩\n\n【女兒大學畢業邀出席典禮 窮媽:不怕讓妳丟架嗎?】\nhttp://bit.ly/2gljBsq","description":"有媽的孩子像個寶!泰國一名女網友邀請母親參加畢業禮時,母親卻為她着想擔心令她丟臉,場面令人心酸。","name":"【感動時刻】女兒大學畢業邀出席典禮 窮媽:不怕讓妳丟臉嗎?","created_time":"2016-11-23T15:00:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161123&s=10793140&a=55955228"}],"ratio":{"LIKE":0.576661406996045,"LOVE":0.02718293407651796,"WOW":0.04514436771245312,"HAHA":0.03448841164777967,"SAD":0.044468124346810384,"ANGRY":0.26948298120863134,"THANKFUL":0}},"1479744000000_1479830399999":{"reactions":{"LIKE":51017,"LOVE":1215,"WOW":6574,"HAHA":8447,"SAD":5740,"ANGRY":9245,"THANKFUL":0},"summary":{"total":82406,"postCount":78},"tops":[{"id":"105259197447_10154983286892448","type":"SAD","count":4982,"message":"天佑日本\n\n#福島強震\n【多地現地震異象「逆流川」 海嘯在河川逆流 水位上升】\nhttp://bit.ly/2gfNav9\n【不斷更新】【福島7.4級地震 有石油設施起火】\nhttp://bit.ly/2gDfFae\n【核電站冷卻系統一度停止 安倍籲沿海災民避離】\nhttp://bit.ly/2fWOrGU","description":"日本發生黎克特制7.4級地震,當局在當地時間約10時解除海嘯警報,但早前有市民拍攝到海嘯在河川逆流而...","name":"【福島強震】多地現地震異象「逆流川」 海嘯在河川逆流 水位上升","created_time":"2016-11-22T02:28:27+0000","caption":"hk.apple.nextmedia.com","link":"http://bit.ly/2gfNav9"},{"id":"105259197447_10154984157637448","type":"HAHA","count":4211,"message":"今次唔慌唔Super喇~\n#SuperSuperSuperSuper\n\n【節目狂宣傳「myTV SUPER」被罰20萬 TVB擬提司法覆核】\nhttp://bit.ly/2gxkjW9","description":"無綫早前為力谷旗下OTT業務「myTV SUPER」,推出多個節目宣傳「myTV SUPER」,通訊...","name":"TVB節目狂宣傳「myTV SUPER」 通訊局共接62宗投訴判罰20萬","created_time":"2016-11-22T12:10:00+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161122&s=6996647&a=55951208"},{"id":"105259197447_10154984172772448","type":"ANGRY","count":2018,"message":"我真係恭喜你哋呀^_^ 自動當選~ #曲\n\n【#特首選委戰】10人被DQ 300名候選人自動當選\nhttp://bit.ly/2ghq9bj","description":"政府公佈2016年選舉委員會界別分組一般選舉(除宗教界界別分組外)共1,539名候選人獲有效提名。今...","name":"【特首選委戰】10人被DQ 300名候選人自動當選","created_time":"2016-11-22T11:31:31+0000","caption":"hk.apple.nextmedia.com","link":"http://s.nextmedia.com/realtime/a.php?i=20161122&s=6996647&a=55951837&ref=tw"}],"ratio":{"LIKE":0.619093269907531,"LOVE":0.014744072033589788,"WOW":0.0797757444846249,"HAHA":0.10250467198990365,"SAD":0.06965512219983981,"ANGRY":0.11218843288110089,"THANKFUL":0}}} diff --git a/test/types.spec.js b/test/types.spec.js new file mode 100644 index 0000000..76b6477 --- /dev/null +++ b/test/types.spec.js @@ -0,0 +1,58 @@ +var Ajv = require('ajv'); +var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} +var ReactionsType = require('../common/types-reactions'); +var ApiType = require('../common/types-api'); +var PostType = require('../common/types-post') +var fixture = require('./fixture-api.js'); +describe('types', function() { + + describe('reactions', function() { + it('validate reaction types ', function () { + var reactions = _.cloneDeep(fixture["1480348800000_1480435199999"].reactions); + var isValid = ajv.validate(ReactionsType.schema, reactions); + console.error(ajv.errors); + expect(isValid).to.be.true; + }); + it('invalidate wrong reaction types ', function () { + var reactions = _.cloneDeep(fixture["1480348800000_1480435199999"].reactions); + reactions.HAHA = '0'; + var isValid = ajv.validate(ReactionsType.schema, reactions); + console.error(ajv.errors); + expect(isValid).to.be.false; + }); + }); + + describe('post', function() { + it('validate post', function () { + var post = _.cloneDeep(fixture["1480348800000_1480435199999"].tops)[0]; + var isValid = ajv.validate(PostType.schema, post); + console.error(ajv.errors); + expect(isValid).to.be.true; + }); + it('invalidate incorrect post', function () { + var post = _.cloneDeep(fixture["1480348800000_1480435199999"].tops)[0]; + post.type = 'HIHI' + var isValid = ajv.validate(PostType.schema, post); + console.error(ajv.errors); + expect(isValid).to.be.false; + }); + }); + + describe('api', function() { + it('validate api responses', function () { + var apiResponse = _.cloneDeep(fixture); + var isValid = ajv.validate(ApiType.schema, apiResponse); + console.error(ajv.errors); + expect(isValid).to.be.true; + }); + + it('invalidate incorrect api responses', function () { + var apiResponse = _.cloneDeep(fixture); + apiResponse["1480348800000_1480435199999"].tops = null + var isValid = ajv.validate(ApiType.schema, apiResponse); + console.error(ajv.errors); + expect(isValid).to.be.false; + }); + + }); +}); diff --git a/ui/src/app/fetchReactions.js b/ui/src/app/fetchReactions.js index ee0c270..1b7d8c9 100644 --- a/ui/src/app/fetchReactions.js +++ b/ui/src/app/fetchReactions.js @@ -1,10 +1,17 @@ import { FETCH_AGG, fetchAndUpdateSelectedDate } from './store/actions' -function getEndpoint (location, offset) { - var url = 'https://8zbfsx31e0.execute-api.ap-northeast-1.amazonaws.com/prod/reactions' - url += '?location=' + location - url += '&offset=' + offset || 0 - return url +const API_ENDPOINT = 'https://8zbfsx31e0.execute-api.ap-northeast-1.amazonaws.com/prod/reactions' + +var Ajv = require('ajv'); +var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} +var ApiType = require('../common/types-api'); + +var validateApi = ajv.compile(ApiType.schema) + +function getEndpoint (location, offset) { + offset = offset || 0 + location = location || '' + return `${API_ENDPOINT}?location=${location}&offset=${offset}` } export default (dispatch) => function (offset) { @@ -13,6 +20,13 @@ export default (dispatch) => function (offset) { .then(function (res) { return res.json() }) + .then(function (data) { + var isValid = validateApi(data) + console.log('API res valid:'+isValid); + console.log(ajv.errors); + // silent failure + return data; + }) .then(function (byDayData) { dispatch(fetchAndUpdateSelectedDate(location, byDayData)) })