package tech.easyflow.ai.mapper;

import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import tech.easyflow.ai.entity.Workflow;

import java.math.BigInteger;
import java.util.Date;

/**
 *  映射层。
 *
 * @author michael
 * @since 2024-08-23
 */
public interface WorkflowMapper extends BaseMapper<Workflow> {

    /**
     * 按预期修订号原子更新工作流内容。
     *
     * @param id 工作流 ID
     * @param content 工作流内容
     * @param expectedRevision 预期修订号
     * @param modified 修改时间
     * @param modifiedBy 修改人账号 ID
     * @return 更新行数
     */
    @Update("UPDATE tb_workflow "
            + "SET content=#{content}, revision=revision+1, modified=#{modified}, modified_by=#{modifiedBy} "
            + "WHERE id=#{id} AND revision=#{expectedRevision}")
    int updateContentByRevision(
            @Param("id") BigInteger id,
            @Param("content") String content,
            @Param("expectedRevision") Integer expectedRevision,
            @Param("modified") Date modified,
            @Param("modifiedBy") BigInteger modifiedBy
    );
}
