package dev.awesomedev.mirim.repository;

import dev.awesomedev.mirim.domain.CodingProblem;
import dev.awesomedev.mirim.domain.CodingSubmission;
import dev.awesomedev.mirim.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

/**
 * 이 파일이 하는 일: coding_submission 테이블의 DB 접근 창구.
 */
public interface CodingSubmissionRepository extends JpaRepository<CodingSubmission, Long> {

    /**
     * 이 학생이 이 문제에 낸 제출물 (있으면).
     * 학습 포인트: (문제, 학생)당 한 행만 두기로 했으므로 List가 아니라 Optional이다.
     * 엔티티의 uniqueConstraint와 이 반환 타입이 같은 약속을 서로 다른 층에서 표현한다.
     */
    Optional<CodingSubmission> findByProblemAndUser(CodingProblem problem, User user);

    /** 이 학생의 모든 제출물 */
    List<CodingSubmission> findByUser(User user);

    /** 전체 제출물 — 멘토 화면용 (최신 제출 먼저) */
    List<CodingSubmission> findAllByOrderBySubmittedAtDesc();
}
