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 instanceId;
private String storyInstanceId; private String storyInstanceId;
private String content; private String content;
private LocalDateTime time; private LocalDateTime storyItemTime;
private String type; private String type;
private String status; private String status;
private String cover; private String cover;

View File

@@ -1,74 +1,110 @@
package com.timeline.story.service.impl; 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.entity.StoryItem;
import com.timeline.story.service.StoryItemService; import com.timeline.story.service.StoryItemService;
import com.timeline.story.vo.StoryItemAddVo; import com.timeline.story.vo.StoryItemAddVo;
import com.timeline.story.vo.StoryItemShareVo; import com.timeline.story.vo.StoryItemShareVo;
import com.timeline.story.vo.StoryItemVo; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j
@Service @Service
public class StoryItemServiceImpl implements StoryItemService { public class StoryItemServiceImpl implements StoryItemService {
@Autowired
private StoryItemMapper storyItemMapper;
@Override @Override
public Map<String, Object> getItemsByMasterItem(StoryItemVo storyItemVo) { 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<>(); Map<String, Object> result = new HashMap<>();
result.put("list", Collections.emptyList()); result.put("list", pageInfo.getList());
result.put("total", 0); result.put("total", pageInfo.getTotal());
return result; return result;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void createStoryItem(StoryItemAddVo storyItemAddVo, List<MultipartFile> images) { 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 @Override
@Transactional(rollbackFor = Exception.class)
public void updateItem(StoryItemAddVo storyItemAddVo, List<MultipartFile> images) { 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 @Override
@Transactional(rollbackFor = Exception.class)
public void deleteItem(String itemId) { public void deleteItem(String itemId) {
// TODO: Implement this method storyItemMapper.deleteByItemId(itemId);
} }
@Override @Override
public StoryItem getItemById(String itemId) { public StoryItem getItemById(String itemId) {
// TODO: Implement this method return storyItemMapper.selectById(itemId);
return null;
} }
@Override @Override
public List<String> getStoryItemImages(String itemId) { public List<String> getStoryItemImages(String itemId) {
// TODO: Implement this method return storyItemMapper.selectImagesByItemId(itemId);
return Collections.emptyList();
} }
@Override @Override
public Integer getStoryItemCount(String storyInstanceId) { public Integer getStoryItemCount(String storyInstanceId) {
// TODO: Implement this method return storyItemMapper.countByStoryId(storyInstanceId);
return 0;
} }
@Override @Override
public StoryItemShareVo getItemByShareId(String shareId) { public StoryItemShareVo getItemByShareId(String shareId) {
// TODO: Implement this method return storyItemMapper.selectByShareIdWithAuthor(shareId);
return null;
} }
@Override @Override
public Map<String, Object> searchItems(String keyword, Integer pageNum, Integer pageSize) { 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<>(); Map<String, Object> result = new HashMap<>();
result.put("list", Collections.emptyList()); result.put("list", pageInfo.getList());
result.put("total", 0); result.put("total", pageInfo.getTotal());
return result; return result;
} }
} }

View File

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