实现实体评论服务

• 评论中心的实现

 
 
• 评论中心
需要评论的各种场景服务:
评论中心的设计: 统一的评论服务,覆盖所有的实体,可以进行评论
通用的模块开发流程
1. Database Column
2. Model:模型定义,和数据库相匹配
3. DAO:数据读取
4. Service:服务包装
5. Controller:业务入口
6. Test
站内信开发流程
1. Database Column
id
content
entity_id ->questionId/commentId //表示任意实体的id;
entity_type question/comment //表示评论的对象
created_date
user_id
2. Model:模型定义,和数据库相匹配
package com.nowcoder.model ;
 
import java.util.Date ;
 
/**
* @Author liguo
* @Description
* @Data 2018-09-06 7:50
*/
public class Comment {
private int id ;
private int userId ;
private int entityId ;
private int entityType ;
private String content ;
private Date createdDate ;
private int status ;
 
public int getId () {
return id ;
}
 
public void setId ( int id ) {
this . id = id ;
}
 
public int getUserId () {
return userId ;
}
 
public void setUserId ( int userId ) {
this . userId = userId ;
}
 
public int getEntityId () {
return entityId ;
}
 
public void setEntityId ( int entityId ) {
this . entityId = entityId ;
}
 
public int getEntityType () {
return entityType ;
}
 
public void setEntityType ( int entityType ) {
this . entityType = entityType ;
}
 
public String getContent () {
return content ;
}
 
public void setContent ( String content ) {
this . content = content ;
}
 
public Date getCreatedDate () {
return createdDate ;
}
 
public void setCreatedDate ( Date createdDate ) {
this . createdDate = createdDate ;
}
 
public int getStatus () {
return status ;
}
 
public void setStatus ( int status ) {
this . status = status ;
}
}
 
3. DAO:数据读取
 
//数据库接口的crud
@Mapper
public interface CommentDAO {
String TABLE_NAME = " comment " ;
String INSERT_FIELDS = " user_id, content, created_date, entity_id, entity_type, status " ;
String SELECT_FIELDS = " id, " + INSERT_FIELDS ;
 
@Insert ( { "insert into " , TABLE_NAME , "(" , INSERT_FIELDS ,
") values (#{userId},#{content},#{createdDate},#{entityId},#{entityType},#{status})" } )
int addComment ( Comment comment ) ;
 
@Select ( { "select " , SELECT_FIELDS , " from " , TABLE_NAME , " where id=#{id}" } )
Comment getCommentById ( int id ) ;
 
@Select ( { "select " , SELECT_FIELDS , " from " , TABLE_NAME ,
" where entity_id=#{entityId} and entity_type=#{entityType} order by created_date desc" } )
List < Comment > selectCommentByEntity ( @Param ( "entityId" ) int entityId , @Param ( "entityType" ) int entityType ) ;
 
@Select ( { "select count(id) from " , TABLE_NAME , " where entity_id=#{entityId} and entity_type=#{entityType}" } )
int getCommentCount ( @Param ( "entityId" ) int entityId , @Param ( "entityType" ) int entityType ) ;
 
@Update ( { "update comment set status=#{status} where id=#{id}" } )
int updateStatus ( @Param ( "id" ) int id , @Param ( "status" ) int status ) ;
 
@Select ( { "select count(id) from " , TABLE_NAME , " where user_id=#{userId}" } )
int getUserCommentCount ( int userId ) ;
 
4. Service:服务包装
package com.LG.service ;
 
import com.LG.dao. CommentDAO ;
import org.springframework.beans.factory.annotation. Autowired ;
import org.springframework.stereotype. Service ;
import org.springframework.web.util. HtmlUtils ;
 
import java.util. List ;
 
/**
* @Author liguo
* @Description
* @Data 2018-09-06 8:54
*/
 
@Service
public class CommentService {
@Autowired
CommentDAO commentDAO ;
 
@Autowired
SensitiveService sensitiveService ;
 
public List < Comment > getCommentsByEntity ( int entityId , int entityType ) {
return commentDAO . selectCommentByEntity ( entityId , entityType ) ;
}
//过滤敏感词后进行插入
public int addComment ( Comment comment ) {
comment . setContent ( HtmlUtils . htmlEscape ( comment . getContent () ) ) ;
comment . setContent ( sensitiveService . filter ( comment . getContent () ) ) ;
return commentDAO . addComment ( comment ) > 0 ? comment . getId () : 0 ;
}
 
public int getCommentCount ( int entityId , int entityType ) {
return commentDAO . getCommentCount ( entityId , entityType ) ;
}
 
public int getUserCommentCount ( int userId ) {
return commentDAO . getUserCommentCount ( userId ) ;
}
 
public boolean deleteComment ( int commentId ) {
return commentDAO . updateStatus ( commentId , 1 ) > 0 ;
}
 
public Comment getCommentById ( int id ) {
return commentDAO . getCommentById ( id ) ;
}
 
}
5. Controller:业务入口
package com.LG.controller ;
 
import com.LG.async.EventModel ;
import com.LG.async.EventProducer ;
import com.LG.async. EventType ;
import com.LG.model.EntityType ;
import com.LG.model.HostHolder ;
import com.LG.service.QuestionService ;
import com.LG.util.WendaUtil ;
import org.slf4j. Logger ;
import org.slf4j.LoggerFactory ;
import org.springframework.beans.factory.annotation. Autowired ;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.bind.annotation. RequestMethod ;
import org.springframework.web.bind.annotation. RequestParam ;
 
import java.util.Date ;
 
/**
* @Author liguo
* @Description
* @Data 2018-09-06 8:53
*/
 
@Controller
public class CommentController {
private static final Logger logger = LoggerFactory . getLogger ( CommentController . class ) ;
@Autowired
HostHolder hostHolder ;
 
@Autowired
CommentService commentService ;
 
@Autowired
QuestionService questionService ;
 
@Autowired
EventProducer eventProducer ;
 
 
@RequestMapping ( path = { "/addComment" }, method = { RequestMethod . POST } )
public String addComment ( @RequestParam ( "questionId" ) int questionId ,
@RequestParam ( "content" ) String content ) {
try {
Comment comment = new Comment () ;
comment . setContent ( content ) ;
if ( hostHolder . getUser () != null ) {
comment . setUserId ( hostHolder . getUser () . getId ()) ;
} else {
comment . setUserId ( WendaUtil . ANONYMOUS_USERID ) ;
// return "redirect:/reglogin";
}
comment . setCreatedDate ( new Date ()) ;
comment . setEntityType ( EntityType . ENTITY_QUESTION ) ;
comment . setEntityId ( questionId ) ;
commentService . addComment ( comment ) ;
 
int count = commentService . getCommentCount ( comment . getEntityId () , comment . getEntityType ()) ;
questionService . updateCommentCount ( comment . getEntityId () , count ) ;
 
eventProducer . fireEvent ( new EventModel ( EventType . COMMENT ) . setActorId ( comment . getUserId () )
. setEntityId ( questionId )) ;
 
} catch ( Exception e ) {
logger . error ( "增加评论失败" + e . getMessage ()) ;
}
return "redirect:/question/" + questionId ;
}
}
}
 
 
 
 

转载于:https://www.cnblogs.com/liguo-wang/p/9597750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值