package cn.newfeifan.mall.module.distri.service.sharelink;

import javax.validation.*;

import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkPageReqVO;
import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkReqVO;
import cn.newfeifan.mall.module.distri.controller.app.sharelink.vo.AppShareLinkSaveReqVO;
import cn.newfeifan.mall.module.distri.dal.dataobject.sharelink.ShareLinkDO;
import cn.newfeifan.mall.framework.common.pojo.PageResult;

/**
 * 分享链接 Service 接口
 *
 * @author 非繁人
 */
public interface ShareLinkService {

    /**
     * 创建分享链接
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createShareLink(@Valid AppShareLinkSaveReqVO createReqVO);

    /**
     * 更新分享链接
     *
     * @param updateReqVO 更新信息
     */
    void updateShareLink(@Valid AppShareLinkSaveReqVO updateReqVO);

    /**
     * 删除分享链接
     *
     * @param id 编号
     */
    void deleteShareLink(Long id);

    /**
     * 获得分享链接
     *
     * @param appShareLinkReqVO 链接对象
     * @return 分享链接编号
     */
    String getShareLink(AppShareLinkReqVO appShareLinkReqVO);

    /**
     * 获得分享链接分页
     *
     * @param pageReqVO 分页查询
     * @return 分享链接分页
     */
    PageResult<ShareLinkDO> getShareLinkPage(AppShareLinkPageReqVO pageReqVO);

    /**
     * 获得分享链接创建人
     *
     * @param id 分享链接编号
     * @return 分享链接创建人
     */
    Long getCreateUserIdById(Long id);

    /**
     * 增加分享链接注册人数
     *
     * @param id 分享链接编号
     */
    void addRegisterUserCountById(Long id);

    /**
     * 获得分享链接对应的商品编号
     * @param linkId 链接编号
     * @return 商品编号
     */
    Long getObjectIdByLinkId(Long linkId);
}