using AdsAnalyticsService.Domain.SeedWork;
namespace AdsAnalyticsService.Domain.AggregatesModel.SampleAggregate;
///
/// EN: Repository interface for Sample aggregate.
/// VI: Interface repository cho Sample aggregate.
///
///
/// EN: Following repository pattern, this interface defines the contract
/// for data access operations on Sample aggregate.
/// VI: Theo pattern repository, interface này định nghĩa contract
/// cho các thao tác truy cập dữ liệu trên Sample aggregate.
///
public interface ISampleRepository : IRepository
{
///
/// EN: Get a sample by its ID.
/// VI: Lấy một sample theo ID.
///
/// EN: The sample ID / VI: ID của sample
/// EN: The sample or null if not found / VI: Sample hoặc null nếu không tìm thấy
Task GetAsync(Guid sampleId);
///
/// EN: Get all samples.
/// VI: Lấy tất cả samples.
///
/// EN: List of samples / VI: Danh sách samples
Task> GetAllAsync();
///
/// EN: Add a new sample.
/// VI: Thêm một sample mới.
///
/// EN: The sample to add / VI: Sample cần thêm
/// EN: The added sample / VI: Sample đã thêm
Sample Add(Sample sample);
///
/// EN: Update an existing sample.
/// VI: Cập nhật một sample đã tồn tại.
///
/// EN: The sample to update / VI: Sample cần cập nhật
void Update(Sample sample);
///
/// EN: Delete a sample.
/// VI: Xóa một sample.
///
/// EN: The sample to delete / VI: Sample cần xóa
void Delete(Sample sample);
///
/// EN: Get samples by status.
/// VI: Lấy samples theo trạng thái.
///
/// EN: The status ID / VI: ID trạng thái
/// EN: List of samples with given status / VI: Danh sách samples với trạng thái cho trước
Task> GetByStatusAsync(int statusId);
}