Halo开源项目(2.2)---分类模块---POST--->“/api/admin/categories“

1.深拷贝和浅拷贝
2.根据domain存储在相应的表中

{
“description”: “string”,
“name”: “string”,
“parentId”: 0,
“password”: “string”,
“slug”: “string”,
“thumbnail”: “string”
}

@PostMapping
@ApiOperation("Creates category") //Post -- >新建分类
public CategoryDTO createBy(@RequestBody @Valid CategoryParam categoryParam) { //输入参数: name, parentId
    // Convert to category // 1.进入convertTo
    Category category = categoryParam.convertTo();

    // Save it //  7.进入create // 12.convertTo将对象转为DTO数据传输对象
    return categoryService.convertTo(categoryService.create(category));
}

@Override
public Category convertTo() {
    // 检查slug是否为空
    slug = StringUtils.isBlank(slug) ? SlugUtils.slug(name) : SlugUtils.slug(slug);
    // 检查缩写是否为空
    if (null == thumbnail) {
        thumbnail = "";
    }
    // 2.InputConverter接口调用父类的convertTo
    return InputConverter.super.convertTo();
}

default D convertTo() {
    // Get parameterized type // 3.进入parameterizedType --> run.halo.app.model.dto.base.InputConverter<run.halo.app.model.entity.Category>
    ParameterizedType currentType = parameterizedType();

    // Assert not equal
    Objects.requireNonNull(currentType,
        "Cannot fetch actual type because parameterized type is null");

    Class<D> domainClass = (Class<D>) currentType.getActualTypeArguments()[0]; // 4. 从一个泛型类型中获取第一个泛型参数的类型类。--> Category
    //  BeanUtils.transformFrom浅拷贝 
    return BeanUtils.transformFrom(this, domainClass); // 6.返回一个Category
}

@Nullable
default ParameterizedType parameterizedType() {
    return ReflectionUtils.getParameterizedType(InputConverter.class, this.getClass());
}

@Override
@Transactional
public Category create(Category category) {
    Assert.notNull(category, "Category to create must not be null");

    // 8. Check the category name
    long count = categoryRepository.countByName(category.getName());

    if (count > 0) {
        log.error("Category has exist already: [{}]", category);
        throw new AlreadyExistsException("该分类已存在");
    }

    // 9. Check parent id
    if (!ServiceUtils.isEmptyId(category.getParentId())) {
        count = categoryRepository.countById(category.getParentId());

        if (count == 0) {
            log.error("Parent category with id: [{}] was not found, category: [{}]",
                category.getParentId(), category);
            throw new NotFoundException(
                "Parent category with id = " + category.getParentId() + " was not found");
        }
    }

    if (StrUtil.isNotBlank(category.getPassword())) {
        category.setPassword(category.getPassword().trim());
    }

    // 10. Create it 调用父类的create
    return super.create(category);
}

@Override
public DOMAIN create(DOMAIN domain) {
    Assert.notNull(domain, domainName + " data must not be null");
    // 11.父类的repository怎么存储category????  --> 可以说成项目难点 哈哈哈
    return repository.save(domain); // repository="run.halo.app.repository.base.BaseRepositoryImpl@53028286"  //根据domain存储在相应的表中, 具体做法设计到反射,还有动态代理机制
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值