package com.gzzm.lobster.thread;

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

import java.util.List;

/**
 * ThreadMessageDao —— 消息持久化 / Thread message persistence.
 */
public abstract class ThreadMessageDao extends GeneralDao {

    @OQL("select m from ThreadMessage m where m.threadId=:1 order by m.seq asc")
    public abstract List<ThreadMessage> listByThread(String threadId) throws Exception;

    @OQL("select m from ThreadMessage m where m.threadId=:1 order by m.seq desc limit :2,:3")
    public abstract List<ThreadMessage> listByThreadDesc(String threadId, int offset, int limit) throws Exception;

    @OQL("select max(m.seq) from ThreadMessage m where m.threadId=:1")
    public abstract Long maxSeq(String threadId) throws Exception;

    @OQL("select m from ThreadMessage m where m.threadId=:1 and m.runId=?2 order by m.seq asc")
    public abstract List<ThreadMessage> listByRun(String threadId, String runId) throws Exception;

    @OQL("select m from ThreadMessage m where m.threadId=:1 and m.role=?2 order by m.seq desc limit 0,1")
    public abstract ThreadMessage lastByRole(String threadId, MessageRole role) throws Exception;
}
