53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
// 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
|
|
}
|