97 lines
2.5 KiB
Go
97 lines
2.5 KiB
Go
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
|
|
}
|