diff --git a/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java new file mode 100644 index 0000000..74a7dab --- /dev/null +++ b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java @@ -0,0 +1,59 @@ +package cn.novalon.manage.sys.core.service.impl; + +import cn.novalon.manage.sys.core.domain.SysNotice; +import cn.novalon.manage.sys.core.service.ISysNoticeService; +import cn.novalon.manage.sys.core.service.IWebSocketService; +import cn.novalon.manage.sys.infrastructure.db.converter.SysNoticeConverter; +import cn.novalon.manage.sys.infrastructure.db.dao.SysNoticeDao; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@Service +public class SysNoticeService implements ISysNoticeService { + + private final SysNoticeDao dao; + private final SysNoticeConverter converter; + private final IWebSocketService webSocketService; + + public SysNoticeService(SysNoticeDao dao, SysNoticeConverter converter, IWebSocketService webSocketService) { + this.dao = dao; + this.converter = converter; + this.webSocketService = webSocketService; + } + + @Override + public Flux findAll() { + return dao.findByDeletedAtIsNull() + .map(converter::toDomain); + } + + @Override + public Flux findByStatus(String status) { + return dao.findByStatusAndDeletedAtIsNull(status) + .map(converter::toDomain); + } + + @Override + public Mono findById(Long id) { + return dao.findById(id) + .map(converter::toDomain); + } + + @Override + public Mono save(SysNotice notice) { + return dao.save(converter.toEntity(notice)) + .map(converter::toDomain) + .flatMap(savedNotice -> { + return webSocketService.notifyNewNotice( + savedNotice.getNoticeTitle(), + savedNotice.getNoticeContent() + ).thenReturn(savedNotice); + }); + } + + @Override + public Mono deleteById(Long id) { + return dao.deleteByIdAndDeletedAtIsNull(id); + } +}