refactor: migrate SysUserMessage to manage-notify module

This commit is contained in:
张翔
2026-03-14 10:29:23 +08:00
parent 4f1caaf758
commit 5840a880e3
7 changed files with 7 additions and 157 deletions
@@ -1,6 +1,6 @@
package cn.novalon.manage.db.converter;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.notify.core.domain.SysUserMessage;
import cn.novalon.manage.db.entity.SysUserMessageEntity;
import org.springframework.stereotype.Component;
@@ -1,7 +1,7 @@
package cn.novalon.manage.db.repository;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.sys.core.repository.ISysUserMessageRepository;
import cn.novalon.manage.notify.core.domain.SysUserMessage;
import cn.novalon.manage.notify.core.repository.ISysUserMessageRepository;
import cn.novalon.manage.db.converter.SysUserMessageConverter;
import cn.novalon.manage.db.entity.SysUserMessageEntity;
import cn.novalon.manage.db.dao.SysUserMessageDao;
@@ -1,13 +1,7 @@
package cn.novalon.manage.sys.core.domain;
package cn.novalon.manage.notify.core.domain;
import java.time.LocalDateTime;
/**
* 用户消息领域对象
*
* @author 张翔
* @date 2026-03-13
*/
public class SysUserMessage {
private Long id;
@@ -1,15 +1,9 @@
package cn.novalon.manage.sys.core.repository;
package cn.novalon.manage.notify.core.repository;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.notify.core.domain.SysUserMessage;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* 用户消息仓储接口
*
* @author 张翔
* @date 2026-03-13
*/
public interface ISysUserMessageRepository {
Flux<SysUserMessage> findByUserIdOrderByCreateTimeDesc(Long userId);
@@ -23,4 +17,4 @@ public interface ISysUserMessageRepository {
Mono<SysUserMessage> findById(Long id);
Mono<Void> deleteById(Long id);
}
}
@@ -1,14 +0,0 @@
package cn.novalon.manage.sys.core.service;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface ISysUserMessageService {
Flux<SysUserMessage> findByUserId(Long userId);
Flux<SysUserMessage> findByUserIdAndIsRead(Long userId, String isRead);
Mono<Long> countUnread(Long userId);
Mono<SysUserMessage> save(SysUserMessage message);
Mono<Void> markAsRead(Long id);
Mono<Void> deleteById(Long id);
}
@@ -1,69 +0,0 @@
package cn.novalon.manage.sys.core.service.impl;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.sys.core.repository.ISysUserMessageRepository;
import cn.novalon.manage.sys.core.service.ISysUserMessageService;
import cn.novalon.manage.sys.core.service.IWebSocketService;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* 用户消息服务实现类
*
* @author 张翔
* @date 2026-03-14
*/
@Service
public class SysUserMessageService implements ISysUserMessageService {
private final ISysUserMessageRepository repository;
private final IWebSocketService webSocketService;
public SysUserMessageService(ISysUserMessageRepository repository,
IWebSocketService webSocketService) {
this.repository = repository;
this.webSocketService = webSocketService;
}
@Override
public Flux<SysUserMessage> findByUserId(Long userId) {
return repository.findByUserIdOrderByCreateTimeDesc(userId);
}
@Override
public Flux<SysUserMessage> findByUserIdAndIsRead(Long userId, String isRead) {
return repository.findByUserIdAndIsReadOrderByCreateTimeDesc(userId, isRead);
}
@Override
public Mono<Long> countUnread(Long userId) {
return repository.countByUserIdAndIsRead(userId, "0");
}
@Override
public Mono<SysUserMessage> save(SysUserMessage message) {
return repository.save(message)
.flatMap(savedMessage -> {
return webSocketService.notifyNewMessage(
savedMessage.getUserId(),
savedMessage.getTitle(),
savedMessage.getContent()).thenReturn(savedMessage);
});
}
@Override
public Mono<Void> markAsRead(Long id) {
return repository.findById(id)
.flatMap(entity -> {
entity.setIsRead("1");
return repository.save(entity);
})
.then();
}
@Override
public Mono<Void> deleteById(Long id) {
return repository.deleteById(id);
}
}
@@ -1,55 +0,0 @@
package cn.novalon.manage.sys.handler.message;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.sys.core.service.ISysUserMessageService;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;
@Component
public class SysUserMessageHandler {
private final ISysUserMessageService messageService;
public SysUserMessageHandler(ISysUserMessageService messageService) {
this.messageService = messageService;
}
public Mono<ServerResponse> getMessagesByUser(ServerRequest request) {
Long userId = Long.valueOf(request.pathVariable("userId"));
return ServerResponse.ok()
.body(messageService.findByUserId(userId), SysUserMessage.class);
}
public Mono<ServerResponse> getUnreadCount(ServerRequest request) {
Long userId = Long.valueOf(request.pathVariable("userId"));
return messageService.countUnread(userId)
.flatMap(count -> ServerResponse.ok().bodyValue(count));
}
public Mono<ServerResponse> getUnreadList(ServerRequest request) {
Long userId = Long.valueOf(request.pathVariable("userId"));
return ServerResponse.ok()
.body(messageService.findByUserIdAndIsRead(userId, "0"), SysUserMessage.class);
}
public Mono<ServerResponse> createMessage(ServerRequest request) {
return request.bodyToMono(SysUserMessage.class)
.flatMap(messageService::save)
.flatMap(message -> ServerResponse.status(HttpStatus.CREATED).bodyValue(message));
}
public Mono<ServerResponse> markAsRead(ServerRequest request) {
Long id = Long.valueOf(request.pathVariable("id"));
return messageService.markAsRead(id)
.then(ServerResponse.ok().build());
}
public Mono<ServerResponse> deleteMessage(ServerRequest request) {
Long id = Long.valueOf(request.pathVariable("id"));
return messageService.deleteById(id)
.then(ServerResponse.noContent().build());
}
}