今天添加一些早就想加入的功能,一个是评论,一个是up主列表。

修改个人信息 2020-02-16 12:37:09

个人信息页面的表单对齐太不美观。这是因为之前使用了Flex进行横向布局,然而这么操作不太科学,因为表单的text fieldbutton的大小非常不合适。之所以这么做写代码是因为不太了解vuetify的组件功能。

在新的版本中,我使用了append icon的方式处理按钮,使得整体更为美观。


添加了对email的修改。mail的修改最好能够通过邮件验证下用户,然而这样做太麻烦了,暂且放下。

评论功能 2020-02-16 13:28:00

评论打算根据页面路径来存储。每个页面都可以拥有评论。

用户可以发布评论,也可以顶或者踩评论。

顶或者踩评论可以获取积分。

发现以前的获取积分功能可以重构。

之前的获取积分功能采用AOP切面实现,但是实现得比较丑陋,需要在一个固定类里按照固定的参数类型和顺序的编写代码:

1
2
3
4
5
6
7
8
// com/jannchie/biliob/credit/handle/CreditHandle.java
public ResponseEntity<Result<String>> modifyUserName(User user, CreditConstant creditConstant, String newUserName) {
mongoTemplate.updateFirst(
Query.query(Criteria.where("_id").is(user.getId())),
Update.update("nickName", newUserName),
"user");
return getSuccessResponse(user, creditConstant, newUserName);
}

现在可以通过一个lambda函数来编写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// com/jannchie/biliob/credit/handle/CreditHandle.java
public ResponseEntity<Result<String>> doCreditOperation(User user, CreditConstant creditConstant, Execution execution) {
return getSuccessResponse(user, creditConstant, execution.execute());
}

@FunctionalInterface
public interface Execution {
/**
* 执行操作
*
* @return 并返回填充回执的文字
*/
String execute();
}

这样可以在调用出编写相关操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// com/jannchie/biliob/service/impl/UserCommentServiceImpl.java
/**
* 提交评论功能
*/
@Override
public ResponseEntity<Result<String>> postComment(Comment comment) {
User user = LoginChecker.checkInfo();
return creditHandle.doCreditOperation(user, CreditConstant.POST_COMMENT, () -> {
comment.setDate(Calendar.getInstance().getTime());
comment.setLikeList(new ArrayList<>());
comment.setDisLikeList(new ArrayList<>());
comment.setUserId(user.getId().toHexString());
mongoTemplate.save(comment);
return comment.getPath();
});
}

之所以以前没有使用这种方式,单纯是因为对Java的lambda表达式不熟悉。使用了lambda表达式后,终于感觉科学了!