mirror of https://github.com/halo-dev/halo
Complete markdown import service.
parent
7c9f8b01f3
commit
ee299d684c
|
@ -36,4 +36,12 @@ public interface CategoryRepository extends BaseRepository<Category, Integer> {
|
|||
* @return Optional of Category
|
||||
*/
|
||||
Optional<Category> getBySlugName(@NonNull String slugName);
|
||||
|
||||
/**
|
||||
* Get category by name.
|
||||
*
|
||||
* @param name name
|
||||
* @return Optional of Category
|
||||
*/
|
||||
Optional<Category> getByName(@NonNull String name);
|
||||
}
|
||||
|
|
|
@ -29,4 +29,11 @@ public interface TagRepository extends BaseRepository<Tag, Integer> {
|
|||
* @return Tag
|
||||
*/
|
||||
Optional<Tag> getBySlugName(@NonNull String slugName);
|
||||
|
||||
/**
|
||||
* Get tag by name
|
||||
* @param name name
|
||||
* @return Tag
|
||||
*/
|
||||
Optional<Tag> getByName(@NonNull String name);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,14 @@ public interface CategoryService extends CrudService<Category, Integer> {
|
|||
@NonNull
|
||||
Category getBySlugName(@NonNull String slugName);
|
||||
|
||||
/**
|
||||
* Get Category by name.
|
||||
*
|
||||
* @param name name
|
||||
* @return Category
|
||||
*/
|
||||
Category getByName(@NonNull String name);
|
||||
|
||||
/**
|
||||
* Removes category and post categories.
|
||||
*
|
||||
|
|
|
@ -104,7 +104,7 @@ public interface PostService extends BasePostService<Post> {
|
|||
* @return imported post
|
||||
*/
|
||||
@NonNull
|
||||
Post importMarkdown(@NonNull String markdown);
|
||||
PostDetailVO importMarkdown(@NonNull String markdown);
|
||||
|
||||
/**
|
||||
* Export post to markdown file by post id.
|
||||
|
|
|
@ -25,6 +25,14 @@ public interface TagService extends CrudService<Tag, Integer> {
|
|||
@NonNull
|
||||
Tag getBySlugNameOfNonNull(@NonNull String slugName);
|
||||
|
||||
/**
|
||||
* Get tag by tag name.
|
||||
*
|
||||
* @param name name
|
||||
* @return Tag
|
||||
*/
|
||||
Tag getByName(@NonNull String name);
|
||||
|
||||
/**
|
||||
* Converts to tag dto.
|
||||
*
|
||||
|
|
|
@ -154,6 +154,11 @@ public class CategoryServiceImpl extends AbstractCrudService<Category, Integer>
|
|||
return categoryRepository.getBySlugName(slugName).orElseThrow(() -> new NotFoundException("The Category does not exist").setErrorData(slugName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Category getByName(String name) {
|
||||
return categoryRepository.getByName(name).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCategoryAndPostCategoryBy(Integer categoryId) {
|
||||
// Remove category
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package run.halo.app.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -29,6 +30,7 @@ import run.halo.app.service.*;
|
|||
import run.halo.app.utils.DateUtils;
|
||||
import run.halo.app.utils.MarkdownUtils;
|
||||
import run.halo.app.utils.ServiceUtils;
|
||||
import run.halo.app.utils.SlugUtils;
|
||||
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
@ -275,7 +277,7 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
}
|
||||
|
||||
@Override
|
||||
public Post importMarkdown(String markdown) {
|
||||
public PostDetailVO importMarkdown(String markdown) {
|
||||
Assert.notNull(markdown, "Markdown document must not be null");
|
||||
|
||||
// Render markdown to html document.
|
||||
|
@ -284,7 +286,69 @@ public class PostServiceImpl extends BasePostServiceImpl<Post> implements PostSe
|
|||
// Gets frontMatter
|
||||
Map<String, List<String>> frontMatter = MarkdownUtils.getFrontMatter(markdown);
|
||||
|
||||
return null;
|
||||
Post post = new Post();
|
||||
|
||||
List<String> elementValue;
|
||||
|
||||
Set<Integer> tagIds = new HashSet<>();
|
||||
|
||||
Set<Integer> categoryIds = new HashSet<>();
|
||||
if (frontMatter.size() > 0) {
|
||||
for (String key : frontMatter.keySet()) {
|
||||
elementValue = frontMatter.get(key);
|
||||
for (String ele : elementValue) {
|
||||
switch (key) {
|
||||
case "title":
|
||||
post.setTitle(ele);
|
||||
break;
|
||||
case "date":
|
||||
post.setCreateTime(DateUtil.parse(ele));
|
||||
break;
|
||||
case "updated":
|
||||
post.setUpdateTime(DateUtil.parse(ele));
|
||||
break;
|
||||
case "permalink":
|
||||
post.setUrl(ele);
|
||||
break;
|
||||
case "thumbnail":
|
||||
post.setThumbnail(ele);
|
||||
break;
|
||||
case "status":
|
||||
post.setStatus(PostStatus.valueOf(ele));
|
||||
break;
|
||||
case "comments":
|
||||
post.setDisallowComment(Boolean.parseBoolean(ele));
|
||||
break;
|
||||
case "tags":
|
||||
Tag tag = tagService.getByName(ele);
|
||||
if (null == tag) {
|
||||
tag = new Tag();
|
||||
tag.setName(ele);
|
||||
tag.setSlugName(SlugUtils.slugify(ele));
|
||||
tag = tagService.create(tag);
|
||||
}
|
||||
tagIds.add(tag.getId());
|
||||
case "categories":
|
||||
Category category = categoryService.getByName(ele);
|
||||
if (null == category) {
|
||||
category = new Category();
|
||||
category.setName(ele);
|
||||
category.setSlugName(SlugUtils.slugify(ele));
|
||||
category.setDescription(ele);
|
||||
category = categoryService.create(category);
|
||||
}
|
||||
categoryIds.add(category.getId());
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post.setOriginalContent(markdown);
|
||||
post.setFormatContent(content);
|
||||
|
||||
return createBy(post, tagIds, categoryIds, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -60,6 +60,12 @@ public class TagServiceImpl extends AbstractCrudService<Tag, Integer> implements
|
|||
return tagRepository.getBySlugName(slugName).orElseThrow(() -> new NotFoundException("The tag does not exist").setErrorData(slugName));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Tag getByName(String name) {
|
||||
return tagRepository.getByName(name).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TagDTO convertTo(Tag tag) {
|
||||
Assert.notNull(tag, "Tag must not be null");
|
||||
|
|
Loading…
Reference in New Issue