package space.nstart.pcp_tgu_service.repository

import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.query.Param
import space.nstart.pcp_tgu_service.entity.PlanIssueAttemptEntity
import java.util.UUID

/** Доступ к попыткам выдачи persisted plan. */
interface PlanIssueAttemptRepository : JpaRepository<PlanIssueAttemptEntity, UUID> {
    /** Возвращает последний номер попытки для planId. */
    fun findTopByPlanIdOrderByAttemptNoDesc(planId: UUID): PlanIssueAttemptEntity?

    /** Блокирует попытку выдачи для обработки decision event. */
    @Query(
        value = """
            SELECT *
            FROM plan_issue_attempt
            WHERE attempt_id = :attemptId
            FOR UPDATE
        """,
        nativeQuery = true
    )
    fun lockByAttemptId(@Param("attemptId") attemptId: UUID): PlanIssueAttemptEntity?
}
