mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-19 21:41:03 +08:00
Compare commits
8 Commits
codex/add-
...
codex/call
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d66cb48dc | ||
|
|
1fe2994743 | ||
|
|
126b10ce45 | ||
|
|
3b1843b6dd | ||
|
|
6a5d00f086 | ||
|
|
06368a6cf1 | ||
|
|
e9f25d3b1a | ||
|
|
fe167aa0b9 |
@@ -5,6 +5,7 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@@ -18,10 +19,10 @@ public class PostChangeLogDto {
|
||||
private String newTitle;
|
||||
private String oldContent;
|
||||
private String newContent;
|
||||
private String oldCategory;
|
||||
private String newCategory;
|
||||
private String oldTags;
|
||||
private String newTags;
|
||||
private CategoryDto oldCategory;
|
||||
private CategoryDto newCategory;
|
||||
private List<TagDto> oldTags;
|
||||
private List<TagDto> newTags;
|
||||
private Boolean oldClosed;
|
||||
private Boolean newClosed;
|
||||
private LocalDateTime oldPinnedAt;
|
||||
|
||||
@@ -1,11 +1,28 @@
|
||||
package com.openisle.mapper;
|
||||
|
||||
import com.openisle.dto.CategoryDto;
|
||||
import com.openisle.dto.PostChangeLogDto;
|
||||
import com.openisle.dto.TagDto;
|
||||
import com.openisle.model.*;
|
||||
import com.openisle.repository.CategoryRepository;
|
||||
import com.openisle.repository.TagRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class PostChangeLogMapper {
|
||||
|
||||
private final CategoryRepository categoryRepository;
|
||||
private final TagRepository tagRepository;
|
||||
private final CategoryMapper categoryMapper;
|
||||
private final TagMapper tagMapper;
|
||||
|
||||
public PostChangeLogDto toDto(PostChangeLog log) {
|
||||
PostChangeLogDto dto = new PostChangeLogDto();
|
||||
dto.setId(log.getId());
|
||||
@@ -22,11 +39,11 @@ public class PostChangeLogMapper {
|
||||
dto.setOldContent(c.getOldContent());
|
||||
dto.setNewContent(c.getNewContent());
|
||||
} else if (log instanceof PostCategoryChangeLog cat) {
|
||||
dto.setOldCategory(cat.getOldCategory());
|
||||
dto.setNewCategory(cat.getNewCategory());
|
||||
dto.setOldCategory(mapCategory(cat.getOldCategory()));
|
||||
dto.setNewCategory(mapCategory(cat.getNewCategory()));
|
||||
} else if (log instanceof PostTagChangeLog tag) {
|
||||
dto.setOldTags(tag.getOldTags());
|
||||
dto.setNewTags(tag.getNewTags());
|
||||
dto.setOldTags(mapTags(tag.getOldTags()));
|
||||
dto.setNewTags(mapTags(tag.getNewTags()));
|
||||
} else if (log instanceof PostClosedChangeLog cl) {
|
||||
dto.setOldClosed(cl.isOldClosed());
|
||||
dto.setNewClosed(cl.isNewClosed());
|
||||
@@ -39,4 +56,37 @@ public class PostChangeLogMapper {
|
||||
}
|
||||
return dto;
|
||||
}
|
||||
|
||||
private CategoryDto mapCategory(String name) {
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
return categoryRepository.findByName(name)
|
||||
.map(categoryMapper::toDto)
|
||||
.orElseGet(() -> {
|
||||
CategoryDto dto = new CategoryDto();
|
||||
dto.setName(name);
|
||||
return dto;
|
||||
});
|
||||
}
|
||||
|
||||
private List<TagDto> mapTags(String tags) {
|
||||
if (tags == null || tags.isBlank()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return Arrays.stream(tags.split(","))
|
||||
.map(String::trim)
|
||||
.map(this::mapTag)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private TagDto mapTag(String name) {
|
||||
return tagRepository.findByName(name)
|
||||
.map(tagMapper::toDto)
|
||||
.orElseGet(() -> {
|
||||
TagDto dto = new TagDto();
|
||||
dto.setName(name);
|
||||
return dto;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,10 @@ import com.openisle.model.Category;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface CategoryRepository extends JpaRepository<Category, Long> {
|
||||
List<Category> findByNameContainingIgnoreCase(String keyword);
|
||||
|
||||
Optional<Category> findByName(String name);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface TagRepository extends JpaRepository<Tag, Long> {
|
||||
List<Tag> findByNameContainingIgnoreCase(String keyword);
|
||||
@@ -15,4 +16,6 @@ public interface TagRepository extends JpaRepository<Tag, Long> {
|
||||
|
||||
List<Tag> findByCreatorOrderByCreatedAtDesc(User creator, Pageable pageable);
|
||||
List<Tag> findByCreator(User creator);
|
||||
|
||||
Optional<Tag> findByName(String name);
|
||||
}
|
||||
|
||||
@@ -368,6 +368,7 @@ public class PostService {
|
||||
for (User participant : pp.getParticipants()) {
|
||||
notificationService.createNotification(participant, NotificationType.POLL_RESULT_PARTICIPANT, pp, null, null, null, null, null);
|
||||
}
|
||||
postChangeLogService.recordVoteResult(pp);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -402,6 +403,7 @@ public class PostService {
|
||||
notificationService.createNotification(lp.getAuthor(), NotificationType.LOTTERY_DRAW, lp, null, null, null, null, null);
|
||||
notificationService.sendCustomPush(lp.getAuthor(), "抽奖已开奖", String.format("%s/posts/%d", websiteUrl, lp.getId()));
|
||||
}
|
||||
postChangeLogService.recordLotteryResult(lp);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,18 @@
|
||||
<span v-if="log.username" class="change-log-user">{{ log.username }}</span>
|
||||
<span v-if="log.type === 'CONTENT'" class="change-log-content">变更了文章内容</span>
|
||||
<span v-else-if="log.type === 'TITLE'" class="change-log-content">变更了文章标题</span>
|
||||
<span v-else-if="log.type === 'CATEGORY'" class="change-log-content">变更了文章分类</span>
|
||||
<span v-else-if="log.type === 'TAG'" class="change-log-content">变更了文章标签</span>
|
||||
<span v-else-if="log.type === 'CATEGORY'" class="change-log-content change-log-category">
|
||||
<div class="change-log-category-text">变更了文章分类, 从</div>
|
||||
<ArticleCategory :category="log.oldCategory" />
|
||||
<div class="change-log-category-text">修改为</div>
|
||||
<ArticleCategory :category="log.newCategory" />
|
||||
</span>
|
||||
<span v-else-if="log.type === 'TAG'" class="change-log-content change-log-category">
|
||||
<div class="change-log-category-text">变更了文章标签, 从</div>
|
||||
<ArticleTags :tags="log.oldTags" />
|
||||
<div class="change-log-category-text">修改为</div>
|
||||
<ArticleTags :tags="log.newTags" />
|
||||
</span>
|
||||
<span v-else-if="log.type === 'CLOSED'" class="change-log-content">
|
||||
<template v-if="log.newClosed">关闭了文章</template>
|
||||
<template v-else>重新打开了文章</template>
|
||||
@@ -46,6 +56,8 @@ import 'diff2html/bundles/css/diff2html.min.css'
|
||||
import BaseImage from '~/components/BaseImage.vue'
|
||||
import { navigateTo } from 'nuxt/app'
|
||||
import { themeState } from '~/utils/theme'
|
||||
import ArticleCategory from '~/components/ArticleCategory.vue'
|
||||
import ArticleTags from '~/components/ArticleTags.vue'
|
||||
const props = defineProps({
|
||||
log: Object,
|
||||
title: String,
|
||||
@@ -124,4 +136,11 @@ const diffHtml = computed(() => {
|
||||
.content-diff {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.change-log-category {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user