diff --git a/.idea/ApifoxUploaderProjectSetting.xml b/.idea/ApifoxUploaderProjectSetting.xml
index 9fc2e6c..f5d1b88 100644
--- a/.idea/ApifoxUploaderProjectSetting.xml
+++ b/.idea/ApifoxUploaderProjectSetting.xml
@@ -5,6 +5,7 @@
diff --git a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleCategoryRelRepository.java b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleCategoryRelRepository.java
index b35300c..59486f7 100644
--- a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleCategoryRelRepository.java
+++ b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleCategoryRelRepository.java
@@ -17,4 +17,6 @@ public interface ArticleCategoryRelRepository extends JpaRepository findByCategoryId(Long categoryId);
+
+ List findByArticleIdIn(List articleIds);
}
diff --git a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleTagRelRepository.java b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleTagRelRepository.java
index 171ebbc..e57c4e9 100644
--- a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleTagRelRepository.java
+++ b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/ArticleTagRelRepository.java
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import java.util.Collection;
import java.util.List;
public interface ArticleTagRelRepository extends JpaRepository {
@@ -16,4 +17,6 @@ public interface ArticleTagRelRepository extends JpaRepository findByArticleId(Long articleId);
List findByTagId(Long tagId);
+
+ List findByArticleIdIn(Collection articleIds);
}
diff --git a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/CategoryRepository.java b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/CategoryRepository.java
index b6da61a..2071d70 100644
--- a/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/CategoryRepository.java
+++ b/weblog-module-common/src/main/java/com/hanserwei/common/domain/repository/CategoryRepository.java
@@ -7,8 +7,13 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import java.util.Collection;
+import java.util.List;
+
public interface CategoryRepository extends JpaRepository, JpaSpecificationExecutor {
boolean existsCategoryByName(String name);
Page findAll(Specification specification, Pageable pageable);
+
+ List findAllByIdIn(Collection ids);
}
diff --git a/weblog-web/src/main/java/com/hanserwei/web/controller/ArticleController.java b/weblog-web/src/main/java/com/hanserwei/web/controller/ArticleController.java
new file mode 100644
index 0000000..5151a9a
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/controller/ArticleController.java
@@ -0,0 +1,33 @@
+package com.hanserwei.web.controller;
+
+import com.hanserwei.common.aspect.ApiOperationLog;
+import com.hanserwei.common.utils.PageResponse;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListReqVO;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListRspVO;
+import com.hanserwei.web.service.ArticleService;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 文章控制器
+ *
+ * @author hanserwei
+ */
+@RestController
+public class ArticleController {
+
+ @Resource
+ private ArticleService articleService;
+
+ /**
+ * 获取首页文章分页数据
+ */
+ @PostMapping("/article/list")
+ @ApiOperationLog(description = "获取首页文章分页数据")
+ public PageResponse findArticlePageList(@RequestBody FindIndexArticlePageListReqVO findIndexArticlePageListReqVO) {
+ return articleService.findArticlePageList(findIndexArticlePageListReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/controller/BlogSettingsController.java b/weblog-web/src/main/java/com/hanserwei/web/controller/BlogSettingsController.java
new file mode 100644
index 0000000..c3e1498
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/controller/BlogSettingsController.java
@@ -0,0 +1,31 @@
+package com.hanserwei.web.controller;
+
+import com.hanserwei.common.aspect.ApiOperationLog;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.blogsetting.FindBlogSettingsDetailRspVO;
+import com.hanserwei.web.service.BlogSettingsService;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 博客设置控制器
+ */
+@RestController
+@RequestMapping("/blog/settings")
+public class BlogSettingsController {
+
+ @Resource
+ private BlogSettingsService blogSettingsService;
+
+ /**
+ * 获取博客设置详情
+ */
+ @PostMapping("/detail")
+ @ApiOperationLog(description = "前台获取博客详情")
+ public Response findDetail() {
+ return blogSettingsService.findDetail();
+ }
+
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/controller/CategoryController.java b/weblog-web/src/main/java/com/hanserwei/web/controller/CategoryController.java
new file mode 100644
index 0000000..b82d8db
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/controller/CategoryController.java
@@ -0,0 +1,35 @@
+package com.hanserwei.web.controller;
+
+import com.hanserwei.common.aspect.ApiOperationLog;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.category.FindCategoryListRspVO;
+import com.hanserwei.web.service.CategoryService;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 分类控制器
+ *
+ * @author hanserwei
+ */
+@RestController
+@RequestMapping("/category")
+public class CategoryController {
+
+ @Resource
+ private CategoryService categoryService;
+
+ /**
+ * 前台获取分类列表
+ */
+ @PostMapping("/list")
+ @ApiOperationLog(description = "前台获取分类列表")
+ public Response> findCategoryList() {
+ return categoryService.findCategoryList();
+ }
+
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/controller/TagController.java b/weblog-web/src/main/java/com/hanserwei/web/controller/TagController.java
new file mode 100644
index 0000000..616f8cd
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/controller/TagController.java
@@ -0,0 +1,35 @@
+package com.hanserwei.web.controller;
+
+import com.hanserwei.common.aspect.ApiOperationLog;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.tag.FindTagListRspVO;
+import com.hanserwei.web.service.TagService;
+import jakarta.annotation.Resource;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 标签控制器
+ *
+ * @author hanserwei
+ */
+@RestController
+@RequestMapping("/tag")
+public class TagController {
+
+ @Resource
+ private TagService tagService;
+
+ /**
+ * 获取标签列表
+ */
+ @PostMapping("/list")
+ @ApiOperationLog(description = "前台获取标签列表")
+ public Response> findTagList() {
+ return tagService.findTagList();
+ }
+
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/User.java b/weblog-web/src/main/java/com/hanserwei/web/model/User.java
deleted file mode 100644
index 95eeb0f..0000000
--- a/weblog-web/src/main/java/com/hanserwei/web/model/User.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.hanserwei.web.model;
-
-import jakarta.validation.constraints.*;
-import lombok.Data;
-
-@Data
-public class User {
- // 用户名
- @NotBlank(message = "用户名不能为空") // 注解确保用户名不为空
- private String username;
- // 性别
- @NotNull(message = "性别不能为空") // 注解确保性别不为空
- private Integer sex;
-
- // 年龄
- @NotNull(message = "年龄不能为空")
- @Min(value = 18, message = "年龄必须大于或等于 18") // 注解确保年龄大于等于 18
- @Max(value = 100, message = "年龄必须小于或等于 100") // 注解确保年龄小于等于 100
- private Integer age;
-
- // 邮箱
- @NotBlank(message = "邮箱不能为空")
- @Email(message = "邮箱格式不正确") // 注解确保邮箱格式正确
- private String email;
-}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListReqVO.java b/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListReqVO.java
new file mode 100644
index 0000000..58c1645
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListReqVO.java
@@ -0,0 +1,12 @@
+package com.hanserwei.web.model.vo.article;
+
+import com.hanserwei.common.model.BasePageQuery;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Builder
+public class FindIndexArticlePageListReqVO extends BasePageQuery {
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListRspVO.java b/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListRspVO.java
new file mode 100644
index 0000000..820c061
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/model/vo/article/FindIndexArticlePageListRspVO.java
@@ -0,0 +1,47 @@
+package com.hanserwei.web.model.vo.article;
+
+import com.hanserwei.web.model.vo.category.FindCategoryListRspVO;
+import com.hanserwei.web.model.vo.tag.FindTagListRspVO;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class FindIndexArticlePageListRspVO {
+ /**
+ * 文章id
+ */
+ private Long id;
+ /**
+ * 封面url
+ */
+ private String cover;
+ /**
+ * 标题
+ */
+ private String title;
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createTime;
+ /**
+ * 摘要
+ */
+ private String summary;
+ /**
+ * 文章分类
+ */
+ private FindCategoryListRspVO category;
+
+ /**
+ * 文章标签
+ */
+ private List tags;
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/vo/blogsetting/FindBlogSettingsDetailRspVO.java b/weblog-web/src/main/java/com/hanserwei/web/model/vo/blogsetting/FindBlogSettingsDetailRspVO.java
new file mode 100644
index 0000000..bbd00e1
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/model/vo/blogsetting/FindBlogSettingsDetailRspVO.java
@@ -0,0 +1,53 @@
+package com.hanserwei.web.model.vo.blogsetting;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+
+/*
+ * 博客设置详情响应VO
+ */
+public class FindBlogSettingsDetailRspVO {
+ /**
+ * 博客Logo
+ */
+ private String logo;
+ /**
+ * 博客名称
+ */
+ private String name;
+ /**
+ * 作者名称
+ */
+ private String author;
+ /**
+ * 博客介绍
+ */
+ private String introduction;
+ /**
+ * 作者头像
+ */
+ private String avatar;
+ /**
+ * GitHub主页
+ */
+ private String githubHomepage;
+ /**
+ * CSDN主页
+ */
+ private String csdnHomepage;
+ /**
+ * Gitee主页
+ */
+ private String giteeHomepage;
+ /**
+ * 知乎主页
+ */
+ private String zhihuHomepage;
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/vo/category/FindCategoryListRspVO.java b/weblog-web/src/main/java/com/hanserwei/web/model/vo/category/FindCategoryListRspVO.java
new file mode 100644
index 0000000..65dc337
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/model/vo/category/FindCategoryListRspVO.java
@@ -0,0 +1,21 @@
+package com.hanserwei.web.model.vo.category;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class FindCategoryListRspVO {
+ /**
+ * 分类id
+ */
+ private Long id;
+ /**
+ * 分类名称
+ */
+ private String name;
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/model/vo/tag/FindTagListRspVO.java b/weblog-web/src/main/java/com/hanserwei/web/model/vo/tag/FindTagListRspVO.java
new file mode 100644
index 0000000..6086817
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/model/vo/tag/FindTagListRspVO.java
@@ -0,0 +1,21 @@
+package com.hanserwei.web.model.vo.tag;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class FindTagListRspVO {
+ /**
+ * 标签id
+ */
+ private Long id;
+ /**
+ * 标签名称
+ */
+ private String name;
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/ArticleService.java b/weblog-web/src/main/java/com/hanserwei/web/service/ArticleService.java
new file mode 100644
index 0000000..6a05c14
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/ArticleService.java
@@ -0,0 +1,15 @@
+package com.hanserwei.web.service;
+
+import com.hanserwei.common.utils.PageResponse;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListReqVO;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListRspVO;
+
+public interface ArticleService {
+ /**
+ * 获取首页文章分页数据
+ *
+ * @param findIndexArticlePageListReqVO 获取首页文章分页数据请求参数
+ * @return 响应
+ */
+ PageResponse findArticlePageList(FindIndexArticlePageListReqVO findIndexArticlePageListReqVO);
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/BlogSettingsService.java b/weblog-web/src/main/java/com/hanserwei/web/service/BlogSettingsService.java
new file mode 100644
index 0000000..82ed307
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/BlogSettingsService.java
@@ -0,0 +1,13 @@
+package com.hanserwei.web.service;
+
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.blogsetting.FindBlogSettingsDetailRspVO;
+
+public interface BlogSettingsService {
+ /**
+ * 获取博客设置信息
+ *
+ * @return 响应
+ */
+ Response findDetail();
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/CategoryService.java b/weblog-web/src/main/java/com/hanserwei/web/service/CategoryService.java
new file mode 100644
index 0000000..11a4310
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/CategoryService.java
@@ -0,0 +1,15 @@
+package com.hanserwei.web.service;
+
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.category.FindCategoryListRspVO;
+
+import java.util.List;
+
+public interface CategoryService {
+ /**
+ * 获取分类列表
+ *
+ * @return 分类列表
+ */
+ Response> findCategoryList();
+}
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/TagService.java b/weblog-web/src/main/java/com/hanserwei/web/service/TagService.java
new file mode 100644
index 0000000..9652cd0
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/TagService.java
@@ -0,0 +1,15 @@
+package com.hanserwei.web.service;
+
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.tag.FindTagListRspVO;
+
+import java.util.List;
+
+public interface TagService {
+ /**
+ * 获取标签列表
+ *
+ * @return 标签列表
+ */
+ Response> findTagList();
+}
\ No newline at end of file
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/impl/ArticleServiceImpl.java b/weblog-web/src/main/java/com/hanserwei/web/service/impl/ArticleServiceImpl.java
new file mode 100644
index 0000000..a6d512e
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/impl/ArticleServiceImpl.java
@@ -0,0 +1,130 @@
+package com.hanserwei.web.service.impl;
+
+import com.hanserwei.common.domain.dataobject.*;
+import com.hanserwei.common.domain.repository.*;
+import com.hanserwei.common.utils.PageHelper;
+import com.hanserwei.common.utils.PageResponse;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListReqVO;
+import com.hanserwei.web.model.vo.article.FindIndexArticlePageListRspVO;
+import com.hanserwei.web.model.vo.category.FindCategoryListRspVO;
+import com.hanserwei.web.model.vo.tag.FindTagListRspVO;
+import com.hanserwei.web.service.ArticleService;
+import jakarta.annotation.Resource;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class ArticleServiceImpl implements ArticleService {
+ @Resource
+ private ArticleRepository articleRepository;
+ @Resource
+ private CategoryRepository categoryRepository;
+ @Resource
+ private ArticleContentRepository articleContentRepository;
+ @Resource
+ private ArticleCategoryRelRepository articleCategoryRelRepository;
+ @Resource
+ private TagRepository tagRepository;
+ @Resource
+ private ArticleTagRelRepository articleTagRelRepository;
+
+ @Override
+ public PageResponse findArticlePageList(FindIndexArticlePageListReqVO findIndexArticlePageListReqVO) {
+ // 查询文章主体数据
+ PageResponse articlePageResponse = PageHelper.findPageList(articleRepository,
+ findIndexArticlePageListReqVO,
+ null,
+ null,
+ null,
+ null,
+ e -> e);
+ List articleList = articlePageResponse.getData();
+ List vos = null;
+ if (!CollectionUtils.isEmpty(articleList)) {
+ vos = articleList.stream().map(e -> {
+ FindIndexArticlePageListRspVO vo = new FindIndexArticlePageListRspVO();
+ BeanUtils.copyProperties(e, vo);
+ // 手动设置 createTime,因为 Instant 无法自动转换为 LocalDateTime
+ if (e.getCreateTime() != null) {
+ vo.setCreateTime(java.time.LocalDateTime.ofInstant(e.getCreateTime(), java.time.ZoneId.systemDefault()));
+ }
+ return vo;
+ }).toList();
+ // 拿到所有文章的 ID 集合
+ List articleIds = articleList.stream().map(Article::getId).toList();
+
+ // 第二步:设置文章所属分类
+ // 根据文章 ID 批量查询所有关联记录
+ List articleCategoryRelList = articleCategoryRelRepository.findByArticleIdIn(articleIds);
+ // 获取所有分类ID
+ List categoryIds = articleCategoryRelList.stream()
+ .map(ArticleCategoryRel::getCategoryId)
+ .distinct()
+ .toList();
+ // 查询所有分类
+ List categories = categoryRepository.findAllByIdIn(categoryIds);
+ // 转 Map, 方便后续根据分类 ID 拿到对应的分类名称
+ Map categoryIdNameMap = categories.stream().collect(Collectors.toMap(Category::getId, Category::getName));
+
+ vos.forEach(vo -> {
+ Long currentArticleId = vo.getId();
+ // 过滤出当前文章对应的关联数据
+ Optional optional = articleCategoryRelList.stream()
+ .filter(e -> Objects.equals(e.getArticleId(), currentArticleId))
+ .findAny();
+ // 如果不为空
+ if (optional.isPresent()) {
+ ArticleCategoryRel articleCategoryRel = optional.get();
+ Long categoryId = articleCategoryRel.getCategoryId();
+ // 通过分类 ID 从 map 中拿到对应的分类名称
+ String categoryName = categoryIdNameMap.get(categoryId);
+ FindCategoryListRspVO findCategoryListRspVO = FindCategoryListRspVO.builder()
+ .id(categoryId)
+ .name(categoryName)
+ .build();
+ // 设置到当前 vo 类中
+ vo.setCategory(findCategoryListRspVO);
+ }
+ });
+ // 第三步:设置文章标签
+ // 查询所有标签
+ List allTagList = tagRepository.findAll();
+ // 转 Map, 方便后续根据标签 ID 拿到对应的标签名称
+ Map tagIdNameMap = allTagList.stream().collect(Collectors.toMap(Tag::getId, Tag::getName));
+ // 拿到所有文章的标签关联记录
+ List articleTagRelList = articleTagRelRepository.findByArticleIdIn(articleIds);
+ vos.forEach(vo -> {
+ Long currentArticleId = vo.getId();
+ // 过滤出当前文章对应的关联标签数据
+ List currentArticleTagRelList = articleTagRelList.stream()
+ .filter(e -> Objects.equals(e.getArticleId(), currentArticleId))
+ .toList();
+ List findTagListRspVOS = new ArrayList<>();
+ // 将关联记录 DO 转 VO, 并设置对应的标签名称
+ currentArticleTagRelList.forEach(e -> {
+ Long tagId = e.getTagId();
+ String tagName = tagIdNameMap.get(tagId);
+ FindTagListRspVO findTagListRspVO = FindTagListRspVO.builder()
+ .id(tagId)
+ .name(tagName)
+ .build();
+ findTagListRspVOS.add(findTagListRspVO);
+ });
+ // 设置转换后的标签数据
+ vo.setTags(findTagListRspVOS);
+ });
+ }
+ PageResponse findIndexArticlePageListRspVOPageResponse = new PageResponse<>();
+ BeanUtils.copyProperties(articlePageResponse, findIndexArticlePageListRspVOPageResponse);
+ findIndexArticlePageListRspVOPageResponse.setData(vos);
+ return findIndexArticlePageListRspVOPageResponse;
+ }
+
+ public ArticleContentRepository getArticleContentRepository() {
+ return articleContentRepository;
+ }
+}
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/impl/BlogSettingsServiceImpl.java b/weblog-web/src/main/java/com/hanserwei/web/service/impl/BlogSettingsServiceImpl.java
new file mode 100644
index 0000000..1b94016
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/impl/BlogSettingsServiceImpl.java
@@ -0,0 +1,36 @@
+package com.hanserwei.web.service.impl;
+
+import com.hanserwei.common.domain.repository.BlogSettingsRepository;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.blogsetting.FindBlogSettingsDetailRspVO;
+import com.hanserwei.web.service.BlogSettingsService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BlogSettingsServiceImpl implements BlogSettingsService {
+
+ @Resource
+ private BlogSettingsRepository blogSettingsRepository;
+
+
+ @Override
+ public Response findDetail() {
+ return blogSettingsRepository.findById(1L)
+ .map(e -> {
+ FindBlogSettingsDetailRspVO vo = FindBlogSettingsDetailRspVO.builder()
+ .author(e.getAuthor())
+ .logo(e.getLogo())
+ .name(e.getName())
+ .introduction(e.getIntroduction())
+ .avatar(e.getAvatar())
+ .githubHomepage(e.getGithubHomepage())
+ .csdnHomepage(e.getCsdnHomepage())
+ .giteeHomepage(e.getGiteeHomepage())
+ .zhihuHomepage(e.getZhihuHomepage())
+ .build();
+ return Response.success(vo);
+ })
+ .orElse(Response.success(null));
+ }
+}
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/impl/CategoryServiceImpl.java b/weblog-web/src/main/java/com/hanserwei/web/service/impl/CategoryServiceImpl.java
new file mode 100644
index 0000000..4757c7a
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/impl/CategoryServiceImpl.java
@@ -0,0 +1,34 @@
+package com.hanserwei.web.service.impl;
+
+import com.hanserwei.common.domain.dataobject.Category;
+import com.hanserwei.common.domain.repository.CategoryRepository;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.category.FindCategoryListRspVO;
+import com.hanserwei.web.service.CategoryService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+@Service
+public class CategoryServiceImpl implements CategoryService {
+
+ @Resource
+ private CategoryRepository categoryRepository;
+
+ @Override
+ public Response> findCategoryList() {
+ List categoryList = categoryRepository.findAll();
+ List vos = null;
+ if (!CollectionUtils.isEmpty(categoryList)) {
+ vos = categoryList.stream().map(category -> {
+ FindCategoryListRspVO vo = new FindCategoryListRspVO();
+ vo.setId(category.getId());
+ vo.setName(category.getName());
+ return vo;
+ }).toList();
+ }
+ return Response.success(vos);
+ }
+}
diff --git a/weblog-web/src/main/java/com/hanserwei/web/service/impl/TagServiceImpl.java b/weblog-web/src/main/java/com/hanserwei/web/service/impl/TagServiceImpl.java
new file mode 100644
index 0000000..014258d
--- /dev/null
+++ b/weblog-web/src/main/java/com/hanserwei/web/service/impl/TagServiceImpl.java
@@ -0,0 +1,32 @@
+package com.hanserwei.web.service.impl;
+
+import com.hanserwei.common.domain.dataobject.Tag;
+import com.hanserwei.common.domain.repository.TagRepository;
+import com.hanserwei.common.utils.Response;
+import com.hanserwei.web.model.vo.tag.FindTagListRspVO;
+import com.hanserwei.web.service.TagService;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+@Service
+public class TagServiceImpl implements TagService {
+
+ @Resource
+ private TagRepository tagRepository;
+
+ @Override
+ public Response> findTagList() {
+ List tagList = tagRepository.findAll();
+ List tagListVO = null;
+ if (!CollectionUtils.isEmpty(tagList)) {
+ tagListVO = tagList.stream().map(tag -> FindTagListRspVO.builder()
+ .id(tag.getId())
+ .name(tag.getName())
+ .build()).toList();
+ }
+ return Response.success(tagListVO);
+ }
+}