package co.yixiang.yshop.module.member.service.userinvitelog;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.member.controller.admin.userinvitelog.vo.UserInviteLogCreateReqVO;
import co.yixiang.yshop.module.member.controller.admin.userinvitelog.vo.UserInviteLogExportReqVO;
import co.yixiang.yshop.module.member.controller.admin.userinvitelog.vo.UserInviteLogPageReqVO;
import co.yixiang.yshop.module.member.controller.admin.userinvitelog.vo.UserInviteLogUpdateReqVO;
import co.yixiang.yshop.module.member.dal.dataobject.userinvitelog.UserInviteLogDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 邀请日志 Service 接口
 *
 * @author admin
 */
public interface UserInviteLogService {

    /**
     * 创建邀请日志
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUserInviteLog(@Valid UserInviteLogCreateReqVO createReqVO);

    /**
     * 更新邀请日志
     *
     * @param updateReqVO 更新信息
     */
    void updateUserInviteLog(@Valid UserInviteLogUpdateReqVO updateReqVO);

    /**
     * 删除邀请日志
     *
     * @param id 编号
     */
    void deleteUserInviteLog(Long id);

    /**
     * 获得邀请日志
     *
     * @param id 编号
     * @return 邀请日志
     */
    UserInviteLogDO getUserInviteLog(Long id);

    /**
     * 获得邀请日志列表
     *
     * @param ids 编号
     * @return 邀请日志列表
     */
    List<UserInviteLogDO> getUserInviteLogList(Collection<Long> ids);

    /**
     * 获得邀请日志分页
     *
     * @param pageReqVO 分页查询
     * @return 邀请日志分页
     */
    PageResult<UserInviteLogDO> getUserInviteLogPage(UserInviteLogPageReqVO pageReqVO);

    /**
     * 获得邀请日志列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 邀请日志列表
     */
    List<UserInviteLogDO> getUserInviteLogList(UserInviteLogExportReqVO exportReqVO);

    /**
     * 邀请日志
     *
     * @param userId         邀请用户id
     * @param beInviteUserId 被邀请用户id
     */
    void createUserInviteLog(Long userId, Long beInviteUserId);
}
