Skip to content

Commit 7917c96

Browse files
sinchangJacksonTian
authored andcommitted
refactor: message related (#81)
* refactor: message related * chore: improve * test: improve * fix: signin page 500
1 parent 81282fe commit 7917c96

File tree

14 files changed

+208
-52
lines changed

14 files changed

+208
-52
lines changed

app/controller/message.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
const Controller = require('egg').Controller;
4+
5+
class MessageController extends Controller {
6+
async index() {
7+
const { ctx } = this;
8+
const userId = ctx.user._id;
9+
const msgService = ctx.service.message;
10+
const [ readMessageResults, unReadMessageResults ] = await Promise.all([
11+
msgService.getReadMessagesByUserId(userId),
12+
msgService.getUnreadMessagesByUserId(userId),
13+
]);
14+
const hasReadMessages = await Promise.all(readMessageResults.map(async message => await msgService.getMessageRelations(message)));
15+
const hasUnReadMessages = await Promise.all(unReadMessageResults.map(async message => await msgService.getMessageRelations(message)));
16+
17+
// 把未读消息全部设置成已读
18+
await msgService.updateMessagesToRead(userId, unReadMessageResults);
19+
await ctx.render('message/index.html', { has_read_messages: hasReadMessages, hasnot_read_messages: hasUnReadMessages });
20+
}
21+
}
22+
23+
module.exports = MessageController;

app/controller/reply.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class ReplyController extends Controller {
4646
service.topic.updateLastReply(topic_id, reply._id),
4747
]);
4848

49-
service.at.sendMessageToMentionUsers(newContent, topic_id, user_id, reply._id);
49+
await service.at.sendMessageToMentionUsers(newContent, topic_id, user_id, reply._id);
5050
if (topic.author_id.toString() !== user_id.toString()) {
5151
await service.message.sendReplyMessage(topic.author_id, user_id, topic._id, reply._id);
5252
}

app/controller/topic.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,7 @@ class TopicController extends Controller {
234234
await service.at.sendMessageToMentionUsers(
235235
content,
236236
topic._id,
237-
ctx.user._id,
238-
'at'
237+
ctx.user._id
239238
);
240239

241240
ctx.redirect('/topic/' + topic._id);

app/controller/user.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,6 @@ class UserController extends Controller {
223223
user.signature = signature;
224224
user.weibo = weibo;
225225
await user.save();
226-
227-
ctx.user = user.toObject({ virtual: true });
228226
return ctx.redirect('/setting?save=success');
229227
}
230228

app/router.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
module.exports = app => {
77
const { router, controller, config, middleware } = app;
88

9-
const { site, sign, user, topic, rss, search, page, reply } = controller;
9+
const { site, sign, user, topic, rss, search, page, reply, message } = controller;
1010

1111
const userRequired = middleware.userRequired();
1212
const adminRequired = middleware.adminRequired();
@@ -63,7 +63,7 @@ module.exports = app => {
6363
router.post('/user/:name/delete_all', adminRequired, user.deleteAll); // 删除某用户所有发言
6464

6565
// // message controler
66-
// router.get('/my/messages', userRequired, message.index); // 用户个人的所有消息页
66+
router.get('/my/messages', userRequired, message.index); // 用户个人的所有消息页
6767

6868
// topic
6969

app/service/at.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class AtService extends Service {
4848
* @param {String} type 回复类型
4949
* @param {String} reply_id 回复ID
5050
*/
51-
async sendMessageToMentionUsers(text, topicId, authorId, type, reply_id = null) {
51+
async sendMessageToMentionUsers(text, topicId, authorId, reply_id = null) {
5252
let users = await this.service.user.getUsersByNames(this.fetchUsers(text));
5353

5454
users = users.filter(user => {
@@ -61,7 +61,6 @@ class AtService extends Service {
6161
user._id,
6262
authorId,
6363
topicId,
64-
type,
6564
reply_id
6665
);
6766
})

app/service/message.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,22 @@ class MessageService extends Service {
118118
return this.ctx.model.Message.update(query, update, { multi: true }).exec();
119119
}
120120

121-
async sendAtMessage(userId, authorId, topicId, type, replyId) {
121+
async sendAtMessage(userId, authorId, topicId, replyId) {
122122
const message = this.ctx.model.Message();
123123

124-
message.type = type;
124+
message.type = 'at';
125+
message.master_id = userId;
126+
message.author_id = authorId;
127+
message.topic_id = topicId;
128+
message.reply_id = replyId;
129+
130+
return message.save();
131+
}
132+
133+
async sendReplyMessage(userId, authorId, topicId, replyId) {
134+
const message = this.ctx.model.Message();
135+
136+
message.type = 'reply';
125137
message.master_id = userId;
126138
message.author_id = authorId;
127139
message.topic_id = topicId;

app/view/message/index.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<%- include('../sidebar.html') %>
2+
3+
<div id='content'>
4+
<div class='panel'>
5+
<div class='header'>
6+
<ul class='breadcrumb'>
7+
<li><a href='/'>主页</a><span class='divider'>/</span></li>
8+
<li class='active'>新消息</li>
9+
</ul>
10+
</div>
11+
<% if (typeof(hasnot_read_messages) !== 'undefined' && hasnot_read_messages.length > 0) { %>
12+
<% hasnot_read_messages.map((message, index) => { %>
13+
<%- include('./message.html', { message, index }) %>
14+
<%}) %>
15+
<% } else { %>
16+
<div class='inner'>
17+
<p>无消息</p>
18+
</div>
19+
<% } %>
20+
</div>
21+
<div class='panel'>
22+
<div class='header'>
23+
<span class='col_fade'>过往信息</span>
24+
</div>
25+
<% if (typeof(has_read_messages) !== 'undefined' && has_read_messages.length > 0) { %>
26+
<% has_read_messages.map((message, index) => { %>
27+
<%- include('./message.html', { message, index }) %>
28+
<%}) %>
29+
<% } else { %>
30+
<div class='inner'>
31+
<p>无消息</p>
32+
</div>
33+
<% } %>
34+
</div>
35+
</div>

app/view/message/message.html

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<% if (message.has_read) { %>
2+
<div class='cell' message_id='<%= message._id %>'>
3+
<% } else { %>
4+
<div class='cell message' message_id='<%= message._id %>'>
5+
<% } %>
6+
<% if(message.type == 'reply'){ %>
7+
<span>
8+
<a href="/user/<%= message.author.loginname %>" target='_blank'><%= message.author.loginname %></a>
9+
回复了你的话题
10+
<a href="/topic/<%- message.topic.topic._id + (message.reply ? '#' + message.reply._id : '') %>" target='_blank'><%=
11+
message.topic.topic.title %></a>
12+
</span>
13+
<% } %>
14+
<% if(message.type == 'reply2'){ %>
15+
<span>
16+
<a href="/user/<%= message.author.loginname %>" target='_blank'><%= message.author.loginname %></a>
17+
在话题
18+
<a href="/topic/<%= message.topic.topic._id + (message.reply ? '#' + message.reply._id : '') %>" target='_blank'><%=
19+
message.topic.topic.title %></a>
20+
中回复了你的回复
21+
</span>
22+
<% } %>
23+
<% if(message.type == 'follow'){ %>
24+
<span>
25+
<a href="/user/<%= message.author.loginname %>" target='_blank'><%= message.author.loginname %></a>
26+
关注了你
27+
</span>
28+
<% } %>
29+
<% if (message.type == 'at'){ %>
30+
<span>
31+
<a href="/user/<%= message.author.loginname %>" target='_blank'><%= message.author.loginname %></a>
32+
在话题
33+
<a href="/topic/<%= message.topic.topic._id + (message.reply ? '#' + message.reply._id : '') %>" target='_blank'><%=
34+
message.topic.topic.title %></a>
35+
中@了你
36+
</span>
37+
<% } %>
38+
39+
</div>

app/view/sign/signin.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<%- include ../sidebar.html %>
1+
<%- include('../sidebar.html') %>
22

33
<div id='content'>
44
<div class='panel'>

0 commit comments

Comments
 (0)