using Koogle.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Koogle.Domain.Interfaces
{
///
/// Generisches Repository-Interface für grundlegende CRUD-Operationen.
///
/// Der Entitätstyp, muss von BaseEntity erben.
public interface IRepository where T : BaseEntity
{
///
/// Ruft eine Entität anhand ihrer ID ab.
///
/// Die eindeutige ID der Entität.
/// Token zur Abbruchsteuerung.
/// Die gefundene Entität oder null.
Task GetByIdAsync(int id, CancellationToken cancellationToken = default);
///
/// Ruft alle nicht gelöschten Entitäten ab.
///
/// Token zur Abbruchsteuerung.
/// Eine Liste aller aktiven Entitäten.
Task> GetAllAsync(CancellationToken cancellationToken = default);
///
/// Fügt eine neue Entität hinzu.
///
/// Die hinzuzufügende Entität.
/// Token zur Abbruchsteuerung.
/// Die hinzugefügte Entität mit generierter ID.
Task AddAsync(T entity, CancellationToken cancellationToken = default);
///
/// Aktualisiert eine bestehende Entität.
///
/// Die zu aktualisierende Entität.
/// Token zur Abbruchsteuerung.
Task UpdateAsync(T entity, CancellationToken cancellationToken = default);
///
/// Führt ein Soft-Delete der Entität durch (setzt IsDeleted = true).
///
/// Die ID der zu löschenden Entität.
/// Token zur Abbruchsteuerung.
Task DeleteAsync(int id, CancellationToken cancellationToken = default);
}
}