mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 04:39:00 +08:00
fix(message): allow users to delete their own notifications
(cherry picked from commit ea051ea5d76ee9e553754f027e6d3c5ce3aec2b1)
This commit is contained in:
1 parent
ec93f78417
commit
9d5ff9c022
4 files changed
+57
No files matched your search
+7
@@ -157,6 +157,13 @@ public class SysMessageController {
|
||||
return R.ok(sysMessageService.readMessage(id));
|
||||
}
|
||||
|
||||
@Operation(summary = "删除当前用户消息", description = "仅删除当前用户的接收记录")
|
||||
@SysLog("删除当前用户消息")
|
||||
@DeleteMapping("/user/{id}")
|
||||
public R removeUserMessage(@PathVariable("id") Long id) {
|
||||
return R.ok(sysMessageService.removeUserMessage(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户公告
|
||||
*
|
||||
|
||||
+3
@@ -44,6 +44,9 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
*/
|
||||
Boolean readMessage(Long id);
|
||||
|
||||
/** 删除当前用户的消息接收记录。 */
|
||||
Boolean removeUserMessage(Long id);
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
|
||||
+8
@@ -217,6 +217,14 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean removeUserMessage(Long id) {
|
||||
relationMapper.delete(Wrappers.<SysMessageRelationEntity>lambdaQuery()
|
||||
.eq(SysMessageRelationEntity::getMsgId, id)
|
||||
.eq(SysMessageRelationEntity::getUserId, SecurityUtils.getUser().getId()));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.pig4cloud.pigx.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysMessageRelationEntity;
|
||||
import com.pig4cloud.pigx.admin.mapper.SysMessageRelationMapper;
|
||||
import com.pig4cloud.pigx.common.security.service.PigxUser;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class SysMessageDeletionTests {
|
||||
|
||||
@Test
|
||||
void deletesOnlyTheCurrentUsersReceipt() {
|
||||
TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), "relation"), SysMessageRelationEntity.class);
|
||||
var relations = mock(SysMessageRelationMapper.class);
|
||||
var service = new SysMessageServiceImpl(null, null, relations, null, null, null, null);
|
||||
var user = mock(PigxUser.class);
|
||||
when(user.getId()).thenReturn(1001L);
|
||||
try {
|
||||
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user, null));
|
||||
assertThat(service.removeUserMessage(123L)).isTrue();
|
||||
} finally {
|
||||
SecurityContextHolder.clearContext();
|
||||
}
|
||||
var condition = ArgumentCaptor.forClass(LambdaQueryWrapper.class);
|
||||
verify(relations).delete(condition.capture());
|
||||
assertThat(condition.getValue().getSqlSegment()).contains("msg_id =", "user_id =");
|
||||
assertThat(condition.getValue().getParamNameValuePairs().values()).containsExactlyInAnyOrder(123L, 1001L);
|
||||
verifyNoMoreInteractions(relations);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user