package models import ( "context" "errors" "github.com/oklog/ulid/v2" "gorm.io/gorm" ) // Activity repräsentiert eine Aktivität im System type Activity struct { EntityBase Name string `gorm:"column:name"` BillingRate float64 `gorm:"column:billing_rate"` } // TableName gibt den Tabellennamen für GORM an func (Activity) TableName() string { return "activities" } // ActivityUpdate enthält die aktualisierbaren Felder einer Activity type ActivityUpdate struct { ID ulid.ULID `gorm:"-"` // Verwenden Sie "-" um anzuzeigen, dass dieses Feld ignoriert werden soll Name *string `gorm:"column:name"` BillingRate *float64 `gorm:"column:billing_rate"` } // ActivityCreate enthält die Felder zum Erstellen einer neuen Activity type ActivityCreate struct { Name string `gorm:"column:name"` BillingRate float64 `gorm:"column:billing_rate"` } // GetActivityByID sucht eine Activity anhand ihrer ID func GetActivityByID(ctx context.Context, id ulid.ULID) (*Activity, error) { var activity Activity result := GetEngine(ctx).Where("id = ?", id).First(&activity) if result.Error != nil { if errors.Is(result.Error, gorm.ErrRecordNotFound) { return nil, nil } return nil, result.Error } return &activity, nil } // GetAllActivities gibt alle Activities zurück func GetAllActivities(ctx context.Context) ([]Activity, error) { var activities []Activity result := GetEngine(ctx).Find(&activities) if result.Error != nil { return nil, result.Error } return activities, nil } // CreateActivity erstellt eine neue Activity func CreateActivity(ctx context.Context, create ActivityCreate) (*Activity, error) { activity := Activity{ Name: create.Name, BillingRate: create.BillingRate, } result := GetEngine(ctx).Create(&activity) if result.Error != nil { return nil, result.Error } return &activity, nil } // UpdateActivity aktualisiert eine bestehende Activity func UpdateActivity(ctx context.Context, update ActivityUpdate) (*Activity, error) { activity, err := GetActivityByID(ctx, update.ID) if err != nil { return nil, err } if activity == nil { return nil, errors.New("activity nicht gefunden") } // Generische Update-Funktion verwenden if err := UpdateModel(ctx, activity, update); err != nil { return nil, err } // Aktualisierte Daten aus der Datenbank laden return GetActivityByID(ctx, update.ID) } // DeleteActivity löscht eine Activity anhand ihrer ID func DeleteActivity(ctx context.Context, id ulid.ULID) error { result := GetEngine(ctx).Delete(&Activity{}, id) return result.Error }