// domain/repositories/time_entry_repository.go package repositories import ( "context" "time" "github.com/google/uuid" "github.com/username/timetracker/internal/domain/entities" "github.com/username/timetracker/pkg/functional" ) // TimeEntryFilter enthält Filter für die Suche nach Zeitbuchungen type TimeEntryFilter struct { UserID *uuid.UUID ProjectID *uuid.UUID CustomerID *uuid.UUID StartDate *time.Time EndDate *time.Time ActivityID *uuid.UUID TaskID *uuid.UUID } // TimeEntryRepository Interface für den Zugriff auf Zeitbuchungen type TimeEntryRepository interface { // FindByID sucht eine Zeitbuchung anhand ihrer ID FindByID(ctx context.Context, companyID, id uuid.UUID) functional.Result[*entities.TimeEntry] // FindAll sucht alle Zeitbuchungen mit optionalen Filtern FindAll(ctx context.Context, companyID uuid.UUID, filter TimeEntryFilter) functional.Result[[]entities.TimeEntry] // Create erstellt eine neue Zeitbuchung Create(ctx context.Context, entry *entities.TimeEntry) functional.Result[*entities.TimeEntry] // Update aktualisiert eine bestehende Zeitbuchung Update(ctx context.Context, entry *entities.TimeEntry) functional.Result[*entities.TimeEntry] // Delete löscht eine Zeitbuchung Delete(ctx context.Context, companyID, id uuid.UUID) functional.Result[bool] // GetSummary berechnet eine Zusammenfassung der Zeitbuchungen GetSummary(ctx context.Context, companyID uuid.UUID, filter TimeEntryFilter) functional.Result[TimeEntrySummary] } // TimeEntrySummary enthält zusammengefasste Informationen über Zeitbuchungen type TimeEntrySummary struct { TotalDuration int TotalBillableDuration int TotalAmount float64 TotalBillableAmount float64 EntriesCount int }