feat: 实现 StoryItemService 业务逻辑
All checks were successful
test/timeline-server/pipeline/head This commit looks good

1. 在 StoryItemServiceImpl 中实现了分页查询、创建、更新、删除及详情获取等核心业务逻辑。
2. 重构了 StoryItem 实体类,将 time 字段更名为 storyItemTime。
3. 让 StoryItemVo 继承 StoryItem 以减少代码冗余,并支持更丰富的查询参数。
4. 引入了事务管理和分页插件支持。
This commit is contained in:
2026-02-11 16:11:57 +08:00
parent 8617a4f453
commit 073f5af70a
3 changed files with 58 additions and 20 deletions

View File

@@ -10,7 +10,7 @@ public class StoryItem {
private String instanceId;
private String storyInstanceId;
private String content;
private LocalDateTime time;
private LocalDateTime storyItemTime;
private String type;
private String status;
private String cover;

View File

@@ -1,74 +1,110 @@
package com.timeline.story.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.timeline.common.utils.IdUtils;
import com.timeline.common.utils.UserContextUtils;
import com.timeline.story.dao.StoryItemMapper;
import com.timeline.story.entity.StoryItem;
import com.timeline.story.service.StoryItemService;
import com.timeline.story.vo.StoryItemAddVo;
import com.timeline.story.vo.StoryItemShareVo;
import com.timeline.story.vo.StoryItemVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class StoryItemServiceImpl implements StoryItemService {
@Autowired
private StoryItemMapper storyItemMapper;
@Override
public Map<String, Object> getItemsByMasterItem(StoryItemVo storyItemVo) {
// TODO: Implement this method
PageHelper.startPage(storyItemVo.getCurrent() != null ? storyItemVo.getCurrent() : 1,
storyItemVo.getPageSize() != null ? storyItemVo.getPageSize() : 10);
Map<String, Object> params = new HashMap<>();
params.put("storyInstanceId", storyItemVo.getStoryInstanceId());
List<StoryItem> list = storyItemMapper.selectStoryItemByStoryInstanceId(params);
PageInfo<StoryItem> pageInfo = new PageInfo<>(list);
Map<String, Object> result = new HashMap<>();
result.put("list", Collections.emptyList());
result.put("total", 0);
result.put("list", pageInfo.getList());
result.put("total", pageInfo.getTotal());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createStoryItem(StoryItemAddVo storyItemAddVo, List<MultipartFile> images) {
// TODO: Implement this method
storyItemAddVo.setInstanceId(IdUtils.randomUuid());
storyItemAddVo.setCreateId(UserContextUtils.getCurrentUserId());
storyItemAddVo.setCreateTime(LocalDateTime.now());
storyItemAddVo.setUpdateTime(LocalDateTime.now());
storyItemAddVo.setIsDelete(0);
if (storyItemAddVo.getStoryItemTime() == null) {
storyItemAddVo.setStoryItemTime(LocalDateTime.now());
}
storyItemMapper.insert(storyItemAddVo);
// Images handling to be implemented
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateItem(StoryItemAddVo storyItemAddVo, List<MultipartFile> images) {
// TODO: Implement this method
storyItemAddVo.setUpdateId(UserContextUtils.getCurrentUserId());
storyItemAddVo.setUpdateTime(LocalDateTime.now());
storyItemMapper.update(storyItemAddVo);
// Images handling to be implemented
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteItem(String itemId) {
// TODO: Implement this method
storyItemMapper.deleteByItemId(itemId);
}
@Override
public StoryItem getItemById(String itemId) {
// TODO: Implement this method
return null;
return storyItemMapper.selectById(itemId);
}
@Override
public List<String> getStoryItemImages(String itemId) {
// TODO: Implement this method
return Collections.emptyList();
return storyItemMapper.selectImagesByItemId(itemId);
}
@Override
public Integer getStoryItemCount(String storyInstanceId) {
// TODO: Implement this method
return 0;
return storyItemMapper.countByStoryId(storyInstanceId);
}
@Override
public StoryItemShareVo getItemByShareId(String shareId) {
// TODO: Implement this method
return null;
return storyItemMapper.selectByShareIdWithAuthor(shareId);
}
@Override
public Map<String, Object> searchItems(String keyword, Integer pageNum, Integer pageSize) {
// TODO: Implement this method
PageHelper.startPage(pageNum, pageSize);
List<StoryItemVo> list = storyItemMapper.searchItems(keyword);
PageInfo<StoryItemVo> pageInfo = new PageInfo<>(list);
Map<String, Object> result = new HashMap<>();
result.put("list", Collections.emptyList());
result.put("total", 0);
result.put("list", pageInfo.getList());
result.put("total", pageInfo.getTotal());
return result;
}
}

View File

@@ -1,10 +1,12 @@
package com.timeline.story.vo;
import com.timeline.story.entity.StoryItem;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
public class StoryItemVo {
private String storyInstanceId;
@EqualsAndHashCode(callSuper = true)
public class StoryItemVo extends StoryItem {
private Integer current;
private Integer pageSize;
}