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

/**
 * Kontrak lapisan penyimpanan untuk resource tugas. Layanan hanya mengenal
 * interface ini sehingga implementasi bebas ditukar: memori untuk pengujian,
 * berkas untuk persistensi Bagian 3, atau JDBC/JPA pada aplikasi nyata.
 */
public interface RepositoryTugasWeb {

    /** Menyimpan tugas baru; id ditetapkan otomatis oleh penyimpanan. */
    TugasWeb simpanBaru(TugasWeb tugas);

    /** Mencari satu tugas berdasarkan id. */
    Optional<TugasWeb> cari(int id);

    /** Seluruh tugas terurut menaik berdasarkan id. */
    List<TugasWeb> semua();

    /** Menyimpan perubahan tugas yang sudah ada; kosong bila id tidak ada. */
    Optional<TugasWeb> perbarui(TugasWeb tugas);

    /** Menghapus tugas; false bila id tidak ada. */
    boolean hapus(int id);
}
