package com.gzzm.lobster.plan;

import com.gzzm.lobster.common.PlanStatus;
import net.cyan.thunwind.annotation.OQL;
import net.cyan.thunwind.annotation.OQLUpdate;
import net.cyan.thunwind.dao.GeneralDao;

import java.util.Date;
import java.util.List;

/**
 * PlanDao —— Plan 持久化 / Plan persistence.
 */
public abstract class PlanDao extends GeneralDao {

    @OQL("select p from Plan p where p.planId=:1")
    public abstract Plan getPlan(String planId) throws Exception;

    // thunwind 默认把枚举存成 smallint ordinal，OQL 里用字符串字面量会翻译不上；一律用参数绑定。
    @OQL("select p from Plan p where p.threadId=:1 and p.status<>?2 order by p.updateTime desc limit 0,1")
    public abstract Plan getActivePlan(String threadId, PlanStatus exclude) throws Exception;

    @OQL("select p from Plan p where p.threadId=:1 order by p.createTime desc")
    public abstract List<Plan> listByThread(String threadId) throws Exception;

    @OQLUpdate("update Plan set status=?1, updateTime=?2 where planId=?3")
    public abstract int updateStatus(PlanStatus status, Date now, String planId) throws Exception;
}
