完成消息提醒后端接口设计
This commit is contained in:
parent
09f889145e
commit
a2ecd7b06b
@ -0,0 +1,37 @@
|
|||||||
|
package com.example.controller;
|
||||||
|
|
||||||
|
import com.example.entity.RestBean;
|
||||||
|
import com.example.entity.vo.response.NotificationVO;
|
||||||
|
import com.example.service.NotificationService;
|
||||||
|
import com.example.utils.Const;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/notification")
|
||||||
|
public class NotificationController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
NotificationService service;
|
||||||
|
|
||||||
|
@GetMapping("/list")
|
||||||
|
public RestBean<List<NotificationVO>> listNotification(@RequestAttribute(Const.ATTR_USER_ID) int id) {
|
||||||
|
return RestBean.success(service.findUserNotification(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/delete")
|
||||||
|
public RestBean<List<NotificationVO>> deleteNotification(@RequestParam @Min(0) int id,
|
||||||
|
@RequestAttribute(Const.ATTR_USER_ID) int uid) {
|
||||||
|
service.deleteUserNotification(id, uid);
|
||||||
|
return RestBean.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/delete-all")
|
||||||
|
public RestBean<List<NotificationVO>> deleteAllNotification(@RequestAttribute(Const.ATTR_USER_ID) int uid) {
|
||||||
|
service.deleteUserAllNotification(uid);
|
||||||
|
return RestBean.success();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.example.entity.dto;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.example.entity.BaseData;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName("db_notification")
|
||||||
|
public class Notification implements BaseData {
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
Integer id;
|
||||||
|
Integer uid;
|
||||||
|
String title;
|
||||||
|
String content;
|
||||||
|
String type;
|
||||||
|
String url;
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.example.entity.vo.response;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class NotificationVO {
|
||||||
|
Integer id;
|
||||||
|
String title;
|
||||||
|
String content;
|
||||||
|
String type;
|
||||||
|
String url;
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.example.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.example.entity.dto.Notification;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface NotificationMapper extends BaseMapper<Notification> {
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.example.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.example.entity.dto.Notification;
|
||||||
|
import com.example.entity.vo.response.NotificationVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface NotificationService extends IService<Notification> {
|
||||||
|
List<NotificationVO> findUserNotification(int uid);
|
||||||
|
void deleteUserNotification(int id, int uid);
|
||||||
|
void deleteUserAllNotification(int uid);
|
||||||
|
void addNotification(int uid, String title, String content, String type, String url);
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.example.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.example.entity.dto.Notification;
|
||||||
|
import com.example.entity.vo.response.NotificationVO;
|
||||||
|
import com.example.mapper.NotificationMapper;
|
||||||
|
import com.example.service.NotificationService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class NotificationServiceImpl extends ServiceImpl<NotificationMapper, Notification> implements NotificationService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<NotificationVO> findUserNotification(int uid) {
|
||||||
|
return this.list(Wrappers.<Notification>query().eq("uid", uid))
|
||||||
|
.stream()
|
||||||
|
.map(notification -> notification.asViewObject(NotificationVO.class))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteUserNotification(int id, int uid){
|
||||||
|
this.remove(Wrappers.<Notification>query().eq("id", id).eq("uid", uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteUserAllNotification(int uid){
|
||||||
|
this.remove(Wrappers.<Notification>query().eq("uid", uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNotification(int uid, String title, String content, String type, String url) {
|
||||||
|
Notification notification = new Notification();
|
||||||
|
notification.setUid(uid);
|
||||||
|
notification.setTitle(title);
|
||||||
|
notification.setContent(content);
|
||||||
|
notification.setType(type);
|
||||||
|
notification.setUrl(url);
|
||||||
|
this.save(notification);
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,7 @@ import com.example.entity.vo.response.TopicDetailVO;
|
|||||||
import com.example.entity.vo.response.TopicPreviewVO;
|
import com.example.entity.vo.response.TopicPreviewVO;
|
||||||
import com.example.entity.vo.response.TopicTopVO;
|
import com.example.entity.vo.response.TopicTopVO;
|
||||||
import com.example.mapper.*;
|
import com.example.mapper.*;
|
||||||
|
import com.example.service.NotificationService;
|
||||||
import com.example.service.TopicService;
|
import com.example.service.TopicService;
|
||||||
import com.example.utils.CacheUtils;
|
import com.example.utils.CacheUtils;
|
||||||
import com.example.utils.Const;
|
import com.example.utils.Const;
|
||||||
@ -56,6 +57,9 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
|
|||||||
@Resource
|
@Resource
|
||||||
StringRedisTemplate template;
|
StringRedisTemplate template;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
NotificationService notificationService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TopicType> listType() {
|
public List<TopicType> listType() {
|
||||||
return typeMapper.selectList(null);
|
return typeMapper.selectList(null);
|
||||||
@ -171,6 +175,22 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
|
|||||||
BeanUtils.copyProperties(vo, comment);
|
BeanUtils.copyProperties(vo, comment);
|
||||||
comment.setTime(new Date());
|
comment.setTime(new Date());
|
||||||
commentMapper.insert(comment);
|
commentMapper.insert(comment);
|
||||||
|
Topic topic = baseMapper.selectById(vo.getTid());
|
||||||
|
Account account = accountMapper.selectById(uid);
|
||||||
|
if(vo.getQuote() > 0) {
|
||||||
|
TopicComment com = commentMapper.selectById(vo.getQuote());
|
||||||
|
if(!Objects.equals(com.getUid(), account.getId())) {
|
||||||
|
notificationService.addNotification(com.getUid(),
|
||||||
|
"您有新的帖子评论回复",
|
||||||
|
account.getUsername()+" 回复了你发表的评论,快去看看吧!",
|
||||||
|
"success", "/index/post-detail/"+com.getTid());
|
||||||
|
}
|
||||||
|
} else if(!Objects.equals(topic.getUid(), account.getId())) {
|
||||||
|
notificationService.addNotification(topic.getUid(),
|
||||||
|
"您有新的帖子回复",
|
||||||
|
account.getUsername()+" 回复了你发表的主题: "+topic.getTitle() +",快去看看吧!",
|
||||||
|
"success", "/index/post-detail/"+topic.getId());
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ function deleteComment(id) {
|
|||||||
:submit="updateTopic"/>
|
:submit="updateTopic"/>
|
||||||
<topic-comment-editor :show="comment.show" @close="comment.show = false"
|
<topic-comment-editor :show="comment.show" @close="comment.show = false"
|
||||||
:quote="comment.quote" :tid="tid"
|
:quote="comment.quote" :tid="tid"
|
||||||
@comment="comment.show = false;loadComments(Math.ceil(topic.data.commentCount / 10) - 1)"/>
|
@comment="comment.show = false;loadComments(Math.max(0, Math.ceil(topic.data.commentCount / 10) - 1))"/>
|
||||||
<div class="add-comment" @click="comment.show = true">
|
<div class="add-comment" @click="comment.show = true">
|
||||||
<el-icon><Plus /></el-icon>
|
<el-icon><Plus /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user