Authored by zhangxiaoru

star

@@ -45,12 +45,12 @@ const _processPublicData = (req, title) => { @@ -45,12 +45,12 @@ const _processPublicData = (req, title) => {
45 * @param {[object]} res 45 * @param {[object]} res
46 * @return {[type]} 46 * @return {[type]}
47 */ 47 */
48 -let index = (req, res, next) => { 48 +exports.index = (req, res, next) => {
49 const pageHeadTab = _.cloneDeep(headTab); 49 const pageHeadTab = _.cloneDeep(headTab);
50 50
51 pageHeadTab[0].cur = true; 51 pageHeadTab[0].cur = true;
52 52
53 - starModel.getIndexData().then((result) => { 53 + req.ctx(starModel).getIndexData().then((result) => {
54 md5Str = result.md5; 54 md5Str = result.md5;
55 res.render('star/index', _.assign({ 55 res.render('star/index', _.assign({
56 page: 'star', 56 page: 'star',
@@ -67,8 +67,8 @@ let index = (req, res, next) => { @@ -67,8 +67,8 @@ let index = (req, res, next) => {
67 }).catch(next); 67 }).catch(next);
68 }; 68 };
69 69
70 -let getIndexHtml = (req, res, next) => {  
71 - starModel.getIndexData().then((result) => { 70 +exports.getIndexHtml = (req, res, next) => {
  71 + req.ctx(starModel).getIndexData().then((result) => {
72 if (md5Str !== result.md5) { 72 if (md5Str !== result.md5) {
73 md5Str = result.md5; 73 md5Str = result.md5;
74 74
@@ -93,8 +93,8 @@ let getIndexHtml = (req, res, next) => { @@ -93,8 +93,8 @@ let getIndexHtml = (req, res, next) => {
93 * @param {[object]} res 93 * @param {[object]} res
94 * @return {[type]} 94 * @return {[type]}
95 */ 95 */
96 -let special = (req, res, next) => {  
97 - starModel.getSpecialData().then((result) => { 96 +exports.special = (req, res, next) => {
  97 + req.ctx(starModel).getSpecialData().then((result) => {
98 const pageHeadTab = _.cloneDeep(headTab); 98 const pageHeadTab = _.cloneDeep(headTab);
99 99
100 pageHeadTab[1].cur = true; 100 pageHeadTab[1].cur = true;
@@ -115,7 +115,7 @@ let special = (req, res, next) => { @@ -115,7 +115,7 @@ let special = (req, res, next) => {
115 * @param {[object]} res 115 * @param {[object]} res
116 * @return {[type]} 116 * @return {[type]}
117 */ 117 */
118 -let collocation = (req, res) => { 118 +exports.collocation = (req, res) => {
119 const pageHeadTab = _.cloneDeep(headTab); 119 const pageHeadTab = _.cloneDeep(headTab);
120 120
121 pageHeadTab[2].cur = true; 121 pageHeadTab[2].cur = true;
@@ -134,11 +134,11 @@ let collocation = (req, res) => { @@ -134,11 +134,11 @@ let collocation = (req, res) => {
134 * @param {[object]} res 134 * @param {[object]} res
135 * @return {[type]} 135 * @return {[type]}
136 */ 136 */
137 -let collocationList = (req, res, next) => { 137 +exports.collocationList = (req, res, next) => {
138 let params = req.query; 138 let params = req.query;
139 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0; // 客户端访问,不能使用 cookie 139 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0; // 客户端访问,不能使用 cookie
140 140
141 - starModel.getCollocationListData(params, uid).then((result) => { 141 + req.ctx(starModel).getCollocationListData(params, uid).then((result) => {
142 res.render('star/list', _.assign({ 142 res.render('star/list', _.assign({
143 layout: false, 143 layout: false,
144 params: params, 144 params: params,
@@ -154,14 +154,14 @@ let collocationList = (req, res, next) => { @@ -154,14 +154,14 @@ let collocationList = (req, res, next) => {
154 * @param {[type]} res [description] 154 * @param {[type]} res [description]
155 * @return {[type]} 155 * @return {[type]}
156 */ 156 */
157 -let setFavorite = (req, res, next) => { 157 +exports.setFavorite = (req, res, next) => {
158 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0; 158 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0;
159 let params = { 159 let params = {
160 articleId: req.body.articleId, 160 articleId: req.body.articleId,
161 type: req.body.type 161 type: req.body.type
162 }; 162 };
163 163
164 - starModel.setFavorite(params, uid).then((result) => { 164 + req.ctx(starModel).setFavorite(params, uid).then((result) => {
165 if (result.code === 400) { 165 if (result.code === 400) {
166 if (req.body.pageType === '1') { 166 if (req.body.pageType === '1') {
167 let urlEncode = '\/guang\/star\/collocation'; 167 let urlEncode = '\/guang\/star\/collocation';
@@ -185,7 +185,7 @@ let setFavorite = (req, res, next) => { @@ -185,7 +185,7 @@ let setFavorite = (req, res, next) => {
185 * @param {[object]} res 185 * @param {[object]} res
186 * @return {[type]} 186 * @return {[type]}
187 */ 187 */
188 -let detail = (req, res) => { 188 +exports.detail = (req, res) => {
189 res.render('star/detail', _.assign({ 189 res.render('star/detail', _.assign({
190 isStarDetailPage: true, 190 isStarDetailPage: true,
191 page: 'detail-list' 191 page: 'detail-list'
@@ -198,11 +198,11 @@ let detail = (req, res) => { @@ -198,11 +198,11 @@ let detail = (req, res) => {
198 * @param {[object]} res 198 * @param {[object]} res
199 * @return {[type]} 199 * @return {[type]}
200 */ 200 */
201 -let detailList = (req, res, next) => { 201 +exports.detailList = (req, res, next) => {
202 let params = req.query; 202 let params = req.query;
203 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0; 203 let uid = req.user.uid || req.query.uid || req.cookies.guangStarUid || 0;
204 204
205 - starModel.getDetailData(params, uid).then((result) => { 205 + req.ctx(starModel).getDetailData(params, uid).then((result) => {
206 res.render('star/list', _.assign({ 206 res.render('star/list', _.assign({
207 layout: false, 207 layout: false,
208 params: params, 208 params: params,
@@ -211,14 +211,3 @@ let detailList = (req, res, next) => { @@ -211,14 +211,3 @@ let detailList = (req, res, next) => {
211 })); 211 }));
212 }).catch(next); 212 }).catch(next);
213 }; 213 };
214 -  
215 -module.exports = {  
216 - index,  
217 - getIndexHtml,  
218 - special,  
219 - collocation,  
220 - collocationList,  
221 - setFavorite,  
222 - detail,  
223 - detailList  
224 -};  
@@ -15,258 +15,256 @@ const api = global.yoho.API; @@ -15,258 +15,256 @@ const api = global.yoho.API;
15 15
16 const contentCode = contentCodeConfig.guang; 16 const contentCode = contentCodeConfig.guang;
17 17
18 -/**  
19 - * 获取资源位数据  
20 - * @param {[string]} page  
21 - * @return {[array]}  
22 - */  
23 -const _getResources = (page) => {  
24 - return serviceAPI.get('operations/api/v5/resource/get', {  
25 - content_code: contentCode[page],  
26 - platform: 'iphone'  
27 - }, {  
28 - cache: true  
29 - }).then((result) => {  
30 - if (result && result.code === 200) {  
31 - return resourcesProcess(result.data);  
32 - } else {  
33 - logger.error('star class content resource return code no 200');  
34 - return [];  
35 - }  
36 - });  
37 -};  
38 -  
39 -/**  
40 - * 星潮教室首页数据处理  
41 - * @param {[array]} dataList  
42 - * @return {[array]}  
43 - */  
44 -const _processIndexData = (dataList) => {  
45 - const formatData = {  
46 - ads: [],  
47 - starAvatar: [],  
48 - articles: []  
49 - };  
50 -  
51 - let list = dataList.data || {};  
52 -  
53 -  
54 - formatData.md5 = dataList.md5; 18 +module.exports = class extends global.yoho.BaseModel {
  19 + constructor(ctx) {
  20 + super(ctx);
  21 + }
55 22
56 - // 首页资源位数据处理  
57 - if (list.ads) {  
58 - _.forEach(list.ads.data, (data) => {  
59 - formatData.ads.push({  
60 - src: data.src.replace('imageView/', 'imageView2/'),  
61 - url: data.url  
62 - }); 23 + /**
  24 + * 获取资源位数据
  25 + * @param {[string]} page
  26 + * @return {[array]}
  27 + */
  28 + _getResources(page) {
  29 + return serviceAPI.get('operations/api/v5/resource/get', {
  30 + content_code: contentCode[page],
  31 + platform: 'iphone'
  32 + }, {
  33 + cache: true
  34 + }).then((result) => {
  35 + if (result && result.code === 200) {
  36 + return resourcesProcess(result.data);
  37 + } else {
  38 + logger.error('star class content resource return code no 200');
  39 + return [];
  40 + }
63 }); 41 });
64 } 42 }
65 43
66 - // 首页明星文章数据处理  
67 - if (list.list) {  
68 - _.forEach(list.list, (data, index) => {  
69 - const avatar = {  
70 - tags: []  
71 - }; 44 + /**
  45 + * 星潮教室首页数据处理
  46 + * @param {[array]} dataList
  47 + * @return {[array]}
  48 + */
  49 + _processIndexData(dataList) {
  50 + const formatData = {
  51 + ads: [],
  52 + starAvatar: [],
  53 + articles: []
  54 + };
  55 +
  56 + let list = dataList.data || {};
  57 +
  58 +
  59 + formatData.md5 = dataList.md5;
  60 +
  61 + // 首页资源位数据处理
  62 + if (list.ads) {
  63 + _.forEach(list.ads.data, (data) => {
  64 + formatData.ads.push({
  65 + src: data.src.replace('imageView/', 'imageView2/'),
  66 + url: data.url
  67 + });
  68 + });
  69 + }
72 70
73 - if (data.ext.tags.length > 1) {  
74 - avatar.isSwiper = true;  
75 - } 71 + // 首页明星文章数据处理
  72 + if (list.list) {
  73 + _.forEach(list.list, (data, index) => {
  74 + const avatar = {
  75 + tags: []
  76 + };
76 77
77 - _.forEach(data.ext.tags, (tags, i) => {  
78 - if (i >= 1) {  
79 - return; 78 + if (data.ext.tags.length > 1) {
  79 + avatar.isSwiper = true;
80 } 80 }
81 81
82 - avatar.tags.push({  
83 - avatarUrl: `/guang/star/detail?tag=${tags.tagName}&openby:yohobuy{"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http://m.yohobuy.com/guang/star/detail","param":{"tag":"${tags.tagName}"}}}`, // eslint-disable-line  
84 - cover: tags.cover ? (tags.cover + '?imageView2/2/w/104/h/104') : tags.cover,  
85 - tagName: tags.tagName 82 + _.forEach(data.ext.tags, (tags, i) => {
  83 + if (i >= 1) {
  84 + return;
  85 + }
  86 +
  87 + avatar.tags.push({
  88 + avatarUrl: `/guang/star/detail?tag=${tags.tagName}&openby:yohobuy{"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http://m.yohobuy.com/guang/star/detail","param":{"tag":"${tags.tagName}"}}}`, // eslint-disable-line
  89 + cover: tags.cover ? (tags.cover + '?imageView2/2/w/104/h/104') : tags.cover,
  90 + tagName: tags.tagName
  91 + });
86 }); 92 });
87 - });  
88 93
89 - if (formatData.articles.length > 30) {  
90 - return;  
91 - } 94 + if (formatData.articles.length > 30) {
  95 + return;
  96 + }
92 97
93 - formatData.articles.push(_.merge({  
94 - noLazy: index < 2,  
95 - id: data.id,  
96 - url: data.url,  
97 - title: data.title,  
98 - articeTxt: data.intro,  
99 - src: data.src,  
100 - publish_time: helpers.dateFormat('MM月DD日 hh:mm', data.publish_time),  
101 - views_num: data.views_num  
102 - }, avatar));  
103 - });  
104 - } 98 + formatData.articles.push(_.merge({
  99 + noLazy: index < 2,
  100 + id: data.id,
  101 + url: data.url,
  102 + title: data.title,
  103 + articeTxt: data.intro,
  104 + src: data.src,
  105 + publish_time: helpers.dateFormat('MM月DD日 hh:mm', data.publish_time),
  106 + views_num: data.views_num
  107 + }, avatar));
  108 + });
  109 + }
105 110
106 111
107 - // 首页明星头像数据处理  
108 - if (list.tags) {  
109 - _.forEach(list.tags, (data) => {  
110 - let url = `/guang/star/detail?tag=${data.tagName}&openby:yohobuy{"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http://m.yohobuy.com/guang/star/detail","param":{"tag":"${data.tagName}"}}}`; // eslint-disable-line 112 + // 首页明星头像数据处理
  113 + if (list.tags) {
  114 + _.forEach(list.tags, (data) => {
  115 + let url = `/guang/star/detail?tag=${data.tagName}&openby:yohobuy{"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http://m.yohobuy.com/guang/star/detail","param":{"tag":"${data.tagName}"}}}`; // eslint-disable-line
111 116
112 - formatData.starAvatar.push({  
113 - // noLazy: index < 6,  
114 - url: url,  
115 - cover: data.cover ? (data.cover +  
116 - '?imageView2/2/w/180/h/180/q/90').replace('http:', '') : data.cover.replace('http:', '') 117 + formatData.starAvatar.push({
  118 + // noLazy: index < 6,
  119 + url: url,
  120 + cover: data.cover ? (data.cover +
  121 + '?imageView2/2/w/180/h/180/q/90').replace('http:', '') : data.cover.replace('http:', '')
  122 + });
117 }); 123 });
118 - });  
119 - } 124 + }
120 125
121 - return formatData;  
122 -}; 126 + return formatData;
  127 + }
123 128
124 129
125 -/**  
126 - * 明星专题列表及星搭配数据处理  
127 - * @param {[array]} list  
128 - * @param {[boolean]} flag 明星专题列表需要转换下日期格式  
129 - * @return {[array]}  
130 - */  
131 -const _processGuangData = (list, flag) => {  
132 - const formatData = []; 130 + /**
  131 + * 明星专题列表及星搭配数据处理
  132 + * @param {[array]} list
  133 + * @param {[boolean]} flag 明星专题列表需要转换下日期格式
  134 + * @return {[array]}
  135 + */
  136 + _processGuangData(list, flag) {
  137 + const formatData = [];
133 138
134 - list = list || []; 139 + list = list || [];
135 140
136 - _.forEach(list, (data, key) => {  
137 - if (flag) {  
138 - data.publish_time = helpers.dateFormat('MM月DD日 hh:mm', data.publish_time);  
139 - } 141 + _.forEach(list, (data, key) => {
  142 + if (flag) {
  143 + data.publish_time = helpers.dateFormat('MM月DD日 hh:mm', data.publish_time);
  144 + }
140 145
141 - if (data.isFavor === 'N') {  
142 - data.isCollected = false;  
143 - } else {  
144 - data.isCollected = true;  
145 - } 146 + if (data.isFavor === 'N') {
  147 + data.isCollected = false;
  148 + } else {
  149 + data.isCollected = true;
  150 + }
146 151
147 - // data.src += '/q/80'; 152 + // data.src += '/q/80';
148 153
149 - if (key < 2) {  
150 - data.islazy = true;  
151 - } 154 + if (key < 2) {
  155 + data.islazy = true;
  156 + }
152 157
153 - formatData.push(data);  
154 - }); 158 + formatData.push(data);
  159 + });
155 160
156 - return formatData;  
157 -}; 161 + return formatData;
  162 + }
158 163
159 -/**  
160 - * 星潮首页  
161 - */  
162 -const getIndexData = () => {  
163 - return api.get('', {  
164 - method: 'app.starClass.index',  
165 - code: '8adc27fcf5676f356602889afcfd2a8e'  
166 - }, {  
167 - cache: true  
168 - }).then((result) => {  
169 - if (result && result.code === 200) {  
170 - return _processIndexData(result);  
171 - } else {  
172 - logger.error('star class content resource return code no 200');  
173 - return {};  
174 - }  
175 - });  
176 -}; 164 + /**
  165 + * 星潮首页
  166 + */
  167 + getIndexData() {
  168 + return api.get('', {
  169 + method: 'app.starClass.index',
  170 + code: '8adc27fcf5676f356602889afcfd2a8e'
  171 + }, {
  172 + cache: true
  173 + }).then((result) => {
  174 + if (result && result.code === 200) {
  175 + return this._processIndexData(result);
  176 + } else {
  177 + logger.error('star class content resource return code no 200');
  178 + return {};
  179 + }
  180 + });
  181 + }
177 182
178 -/**  
179 - * 明星专题  
180 - */  
181 -const getDetailData = (params, uid) => {  
182 - return api.get('', {  
183 - method: 'app.starClass.lastTagArticle',  
184 - tag: params.tag,  
185 - page: params.page || 1,  
186 - size: 10,  
187 - uid: uid  
188 - }, {  
189 - cache: true  
190 - }).then((result) => {  
191 - if (result && result.code === 200) {  
192 - if (params.page > result.data.totalPage) {  
193 - return ''; 183 + /**
  184 + * 明星专题
  185 + */
  186 + getDetailData(params, uid) {
  187 + return api.get('', {
  188 + method: 'app.starClass.lastTagArticle',
  189 + tag: params.tag,
  190 + page: params.page || 1,
  191 + size: 10,
  192 + uid: uid
  193 + }, {
  194 + cache: true
  195 + }).then((result) => {
  196 + if (result && result.code === 200) {
  197 + if (params.page > result.data.totalPage) {
  198 + return '';
  199 + } else {
  200 + return this._processGuangData(result.data.list, true);
  201 + }
194 } else { 202 } else {
195 - return _processGuangData(result.data.list, true); 203 + logger.error('api app.starClass.lastTagArticle code no 200');
  204 + return [];
196 } 205 }
197 - } else {  
198 - logger.error('api app.starClass.lastTagArticle code no 200');  
199 - return [];  
200 - }  
201 - });  
202 -}; 206 + });
  207 + }
203 208
204 209
205 -/**  
206 - * 星专题  
207 - */  
208 -const getSpecialData = () => {  
209 - return _getResources('special').then((result) => { 210 + /**
  211 + * 星专题
  212 + */
  213 + getSpecialData() {
  214 + return this._getResources('special').then((result) => {
210 215
211 - // 数据结构嵌套太深  
212 - _.forEach(result, (data, key) => {  
213 - _.map(data.data, (item) => {  
214 - if (!_.isObject(item)) {  
215 - return;  
216 - } 216 + // 数据结构嵌套太深
  217 + _.forEach(result, (data, key) => {
  218 + _.map(data.data, (item) => {
  219 + if (!_.isObject(item)) {
  220 + return;
  221 + }
217 222
218 - // item.src += '/q/80'; 223 + // item.src += '/q/80';
219 224
220 - if (key < 4) {  
221 - item.islazy = true;  
222 - }  
223 - return item; 225 + if (key < 4) {
  226 + item.islazy = true;
  227 + }
  228 + return item;
  229 + });
224 }); 230 });
  231 +
  232 + return result;
225 }); 233 });
  234 + }
226 235
227 - return result;  
228 - });  
229 -}; 236 + /**
  237 + * 星搭配
  238 + */
  239 + getCollocationListData(params, uid) {
  240 + return serviceAPI.get('guang/api/v5/article/getStarClassroomArticleList', Object.assign({
  241 + limit: '20',
  242 + uid: uid
  243 + }, params), {
  244 + cache: true
  245 + }).then((result) => {
  246 + if (result && result.code === 200) {
  247 + return this._processGuangData(result.data.list.artList);
  248 + } else {
  249 + logger.error('getStarClassroomArticleList code no 200');
  250 + return [];
  251 + }
  252 + });
  253 + }
230 254
231 -/**  
232 - * 星搭配  
233 - */  
234 -const getCollocationListData = (params, uid) => {  
235 - return serviceAPI.get('guang/api/v5/article/getStarClassroomArticleList', Object.assign({  
236 - limit: '20',  
237 - uid: uid  
238 - }, params), {  
239 - cache: true  
240 - }).then((result) => {  
241 - if (result && result.code === 200) {  
242 - return _processGuangData(result.data.list.artList);  
243 - } else {  
244 - logger.error('getStarClassroomArticleList code no 200');  
245 - return []; 255 + setFavorite(params, uid) {
  256 + if (!uid) {
  257 + return Promise.resolve({
  258 + code: 400,
  259 + message: '未登录'
  260 + });
246 } 261 }
247 - });  
248 -};  
249 262
250 -const setFavorite = (params, uid) => {  
251 - if (!uid) {  
252 - return Promise.resolve({  
253 - code: 400,  
254 - message: '未登录' 263 + return api.get('', {
  264 + method: params.type === 'del' ? 'app.sns.cancelFavorBackCount' : 'app.sns.setFavorBackCount',
  265 + client_type: 'h5',
  266 + article_id: params.articleId,
  267 + uid: uid
255 }); 268 });
256 } 269 }
257 -  
258 - return api.get('', {  
259 - method: params.type === 'del' ? 'app.sns.cancelFavorBackCount' : 'app.sns.setFavorBackCount',  
260 - client_type: 'h5',  
261 - article_id: params.articleId,  
262 - uid: uid  
263 - });  
264 -};  
265 -  
266 -module.exports = {  
267 - getIndexData,  
268 - getSpecialData,  
269 - getCollocationListData,  
270 - setFavorite,  
271 - getDetailData  
272 }; 270 };