package dev.awesomedev.mirim.repository;

import dev.awesomedev.mirim.domain.Assignment;
import dev.awesomedev.mirim.domain.Submission;
import dev.awesomedev.mirim.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

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

/**
 * 이 파일이 하는 일:
 * Submission(과제 제출물) 엔티티의 DB 접근을 담당하는 Spring Data JPA 리포지토리다.
 */
public interface SubmissionRepository extends JpaRepository<Submission, Long> {

    /** 특정 사용자의 제출물을 최신 제출 순으로 조회 (내 제출물 화면용) */
    List<Submission> findByUserOrderBySubmittedAtDesc(User user);

    /**
     * 특정 과제에 대한 특정 사용자의 제출물 조회.
     * 학습 포인트: 재제출 정책(같은 과제엔 제출물 1개, 다시 내면 갱신) 덕분에
     * 결과가 최대 1건이라 Optional로 받을 수 있다.
     */
    Optional<Submission> findByAssignmentAndUser(Assignment assignment, User user);

    /** 전체 제출물을 최신 제출 순으로 조회 (멘토 리뷰 화면용) */
    List<Submission> findAllByOrderBySubmittedAtDesc();
}
