Completed meta service.

pull/296/head
ikaisec 2019-08-04 16:42:59 +08:00
parent efa34e86be
commit 557b286550
12 changed files with 368 additions and 0 deletions

View File

@ -0,0 +1,36 @@
package run.halo.app.model.params;
import lombok.Data;
import run.halo.app.model.dto.base.InputConverter;
import run.halo.app.utils.ReflectionUtils;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.lang.reflect.ParameterizedType;
/**
* Base meta param.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Data
public abstract class BaseMetaParam<META> implements InputConverter<META> {
@NotBlank(message = "文章id不能为空")
private Integer postId;
@NotBlank(message = "Meta key 不能为空")
@Size(max = 1023, message = "Meta key 的字符长度不能超过 {max}")
private String key;
@NotBlank(message = "Meta value 不能为空")
@Size(max = 1023, message = "Meta value 的字符长度不能超过 {max}")
private String value;
@Override
public ParameterizedType parameterizedType() {
return ReflectionUtils.getParameterizedTypeBySuperClass(BaseMetaParam.class, this.getClass());
}
}

View File

@ -0,0 +1,19 @@
package run.halo.app.model.params;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import run.halo.app.model.entity.PostMeta;
/**
* Post meta param.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class PostMetaParam extends BaseMetaParam<PostMeta> {
}

View File

@ -0,0 +1,19 @@
package run.halo.app.model.params;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import run.halo.app.model.entity.SheetMeta;
/**
* Sheet meta param.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class SheetMetaParam extends BaseMetaParam<SheetMeta> {
}

View File

@ -0,0 +1,14 @@
package run.halo.app.repository;
import run.halo.app.model.entity.PostMeta;
import run.halo.app.repository.base.BaseMetaRepository;
/**
* PostMeta repository.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
public interface PostMetaRepository extends BaseMetaRepository<PostMeta> {
}

View File

@ -0,0 +1,14 @@
package run.halo.app.repository;
import run.halo.app.model.entity.SheetMeta;
import run.halo.app.repository.base.BaseMetaRepository;
/**
* SheetMeta repository.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
public interface SheetMetaRepository extends BaseMetaRepository<SheetMeta> {
}

View File

@ -0,0 +1,28 @@
package run.halo.app.repository.base;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.lang.NonNull;
import run.halo.app.model.entity.BaseMeta;
import java.util.List;
/**
* Base meta repository.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@NoRepositoryBean
public interface BaseMetaRepository<META extends BaseMeta> extends BaseRepository<META, Long>, JpaSpecificationExecutor<META> {
/**
* Finds all metas by post id.
*
* @param postId post id must not be null
* @return a list of meta
*/
@NonNull
List<META> findAllByPostId(@NonNull Integer postId);
}

View File

@ -0,0 +1,14 @@
package run.halo.app.service;
import run.halo.app.model.entity.PostMeta;
import run.halo.app.service.base.BaseMetaService;
/**
* Post meta service interface.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
public interface PostMetaService extends BaseMetaService<PostMeta> {
}

View File

@ -0,0 +1,14 @@
package run.halo.app.service;
import run.halo.app.model.entity.SheetMeta;
import run.halo.app.service.base.BaseMetaService;
/**
* Sheet meta service interface.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
public interface SheetMetaService extends BaseMetaService<SheetMeta> {
}

View File

@ -0,0 +1,62 @@
package run.halo.app.service.base;
import org.springframework.lang.NonNull;
import run.halo.app.model.entity.BaseMeta;
import run.halo.app.model.params.BaseMetaParam;
import java.util.List;
import java.util.Map;
/**
* Base meta service interface.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
public interface BaseMetaService<META extends BaseMeta> extends CrudService<META, Long> {
/**
* Lists metas by post id.
*
* @param postId post id must not be null
* @return a list of meta
*/
@NonNull
List<META> listBy(@NonNull Integer postId);
/**
* Creates a meta by meta.
*
* @param meta meta must not be null
* @return created meta
*/
@NonNull
@Override
META create(@NonNull META meta);
/**
* Creates a meta by meta param.
*
* @param metaParam meta param must not be null
* @return created meta
*/
@NonNull
META createBy(@NonNull BaseMetaParam<META> metaParam);
/**
* Target validation.
*
* @param targetId target id must not be null (post id, sheet id)
*/
void validateTarget(@NonNull Integer targetId);
/**
* Convert to map.
*
* @param metas a list of metas
* @return a map of metas
*/
Map<String, Object> convertToMap(List<META> metas);
}

View File

@ -0,0 +1,72 @@
package run.halo.app.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import run.halo.app.model.entity.BaseMeta;
import run.halo.app.model.params.BaseMetaParam;
import run.halo.app.repository.base.BaseMetaRepository;
import run.halo.app.service.base.AbstractCrudService;
import run.halo.app.service.base.BaseMetaService;
import run.halo.app.utils.ServiceUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Base meta service implementation.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Slf4j
public abstract class BaseMetaServiceImpl<META extends BaseMeta> extends AbstractCrudService<META, Long> implements BaseMetaService<META> {
private final BaseMetaRepository<META> baseMetaRepository;
public BaseMetaServiceImpl(BaseMetaRepository<META> baseMetaRepository) {
super(baseMetaRepository);
this.baseMetaRepository = baseMetaRepository;
}
@Override
public List<META> listBy(Integer postId) {
Assert.notNull(postId, "Post id must not be null");
return baseMetaRepository.findAllByPostId(postId);
}
@Override
public META create(META meta) {
Assert.notNull(meta, "Domain must not be null");
// Check post id
if (!ServiceUtils.isEmptyId(meta.getPostId())) {
validateTarget(meta.getPostId());
}
// Create meta
return super.create(meta);
}
@Override
public META createBy(BaseMetaParam<META> metaParam) {
Assert.notNull(metaParam, "Meta param must not be null");
return create(metaParam.convertTo());
}
@Override
public Map<String, Object> convertToMap(List<META> metas) {
if (CollectionUtils.isEmpty(metas)) {
return Collections.emptyMap();
}
Map<String, Object> result = new HashMap<>();
metas.forEach(meta -> result.put(meta.getKey(), meta.getValue()));
return result;
}
}

View File

@ -0,0 +1,38 @@
package run.halo.app.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import run.halo.app.exception.NotFoundException;
import run.halo.app.model.entity.PostMeta;
import run.halo.app.repository.PostMetaRepository;
import run.halo.app.repository.PostRepository;
import run.halo.app.service.PostMetaService;
/**
* Post meta service implementation class.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Slf4j
@Service
public class PostMetaServiceImpl extends BaseMetaServiceImpl<PostMeta> implements PostMetaService {
private final PostMetaRepository postMetaRepository;
private final PostRepository postRepository;
public PostMetaServiceImpl(PostMetaRepository postMetaRepository,
PostRepository postRepository) {
super(postMetaRepository);
this.postMetaRepository = postMetaRepository;
this.postRepository = postRepository;
}
@Override
public void validateTarget(Integer postId) {
postRepository.findById(postId)
.orElseThrow(() -> new NotFoundException("该文章不存在或已删除").setErrorData(postId));
}
}

View File

@ -0,0 +1,38 @@
package run.halo.app.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import run.halo.app.exception.NotFoundException;
import run.halo.app.model.entity.SheetMeta;
import run.halo.app.repository.SheetMetaRepository;
import run.halo.app.repository.SheetRepository;
import run.halo.app.service.SheetMetaService;
/**
* Sheet meta service implementation class.
*
* @author ryanwang
* @author ikaisec
* @date 2019-08-04
*/
@Slf4j
@Service
public class SheetMetaServiceImpl extends BaseMetaServiceImpl<SheetMeta> implements SheetMetaService {
private final SheetMetaRepository sheetMetaRepository;
private final SheetRepository sheetRepository;
public SheetMetaServiceImpl(SheetMetaRepository sheetMetaRepository,
SheetRepository sheetRepository) {
super(sheetMetaRepository);
this.sheetMetaRepository = sheetMetaRepository;
this.sheetRepository = sheetRepository;
}
@Override
public void validateTarget(Integer sheetId) {
sheetRepository.findById(sheetId)
.orElseThrow(() -> new NotFoundException("该页面不存在或已删除").setErrorData(sheetId));
}
}