feat: 集成WebSocket到UserMessageService
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
|||||||
|
package cn.novalon.manage.sys.core.service.impl;
|
||||||
|
|
||||||
|
import cn.novalon.manage.sys.core.domain.SysUserMessage;
|
||||||
|
import cn.novalon.manage.sys.core.service.ISysUserMessageService;
|
||||||
|
import cn.novalon.manage.sys.core.service.IWebSocketService;
|
||||||
|
import cn.novalon.manage.sys.infrastructure.db.converter.SysUserMessageConverter;
|
||||||
|
import cn.novalon.manage.sys.infrastructure.db.dao.SysUserMessageDao;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SysUserMessageService implements ISysUserMessageService {
|
||||||
|
|
||||||
|
private final SysUserMessageDao dao;
|
||||||
|
private final SysUserMessageConverter converter;
|
||||||
|
private final IWebSocketService webSocketService;
|
||||||
|
|
||||||
|
public SysUserMessageService(SysUserMessageDao dao, SysUserMessageConverter converter,
|
||||||
|
IWebSocketService webSocketService) {
|
||||||
|
this.dao = dao;
|
||||||
|
this.converter = converter;
|
||||||
|
this.webSocketService = webSocketService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Flux<SysUserMessage> findByUserId(Long userId) {
|
||||||
|
return dao.findByUserIdOrderByCreateTimeDesc(userId)
|
||||||
|
.map(converter::toDomain);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Flux<SysUserMessage> findByUserIdAndIsRead(Long userId, String isRead) {
|
||||||
|
return dao.findByUserIdAndIsReadOrderByCreateTimeDesc(userId, isRead)
|
||||||
|
.map(converter::toDomain);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Long> countUnread(Long userId) {
|
||||||
|
return dao.countByUserIdAndIsRead(userId, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<SysUserMessage> save(SysUserMessage message) {
|
||||||
|
return dao.save(converter.toEntity(message))
|
||||||
|
.map(converter::toDomain)
|
||||||
|
.flatMap(savedMessage -> {
|
||||||
|
return webSocketService.notifyNewMessage(
|
||||||
|
savedMessage.getUserId(),
|
||||||
|
savedMessage.getTitle(),
|
||||||
|
savedMessage.getContent()).thenReturn(savedMessage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> markAsRead(Long id) {
|
||||||
|
return dao.findById(id)
|
||||||
|
.flatMap(entity -> {
|
||||||
|
entity.setIsRead("1");
|
||||||
|
return dao.save(entity);
|
||||||
|
})
|
||||||
|
.then();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user