package models import ( "context" "errors" "github.com/oklog/ulid/v2" "gorm.io/gorm" ) // Customer repräsentiert einen Kunden im System type Customer struct { EntityBase Name string `gorm:"column:name"` CompanyID int `gorm:"column:company_id"` } // TableName gibt den Tabellennamen für GORM an func (Customer) TableName() string { return "customers" } // CustomerCreate enthält die Felder zum Erstellen eines neuen Kunden type CustomerCreate struct { Name string CompanyID int } // CustomerUpdate enthält die aktualisierbaren Felder eines Kunden type CustomerUpdate struct { ID ulid.ULID `gorm:"-"` // Ausschließen von Updates Name *string `gorm:"column:name"` CompanyID *int `gorm:"column:company_id"` } // GetCustomerByID sucht einen Kunden anhand seiner ID func GetCustomerByID(ctx context.Context, id ulid.ULID) (*Customer, error) { var customer Customer result := GetEngine(ctx).Where("id = ?", id).First(&customer) if result.Error != nil { if errors.Is(result.Error, gorm.ErrRecordNotFound) { return nil, nil } return nil, result.Error } return &customer, nil } // GetAllCustomers gibt alle Kunden zurück func GetAllCustomers(ctx context.Context) ([]Customer, error) { var customers []Customer result := GetEngine(ctx).Find(&customers) if result.Error != nil { return nil, result.Error } return customers, nil } // CreateCustomer erstellt einen neuen Kunden func CreateCustomer(ctx context.Context, create CustomerCreate) (*Customer, error) { customer := Customer{ Name: create.Name, CompanyID: create.CompanyID, } result := GetEngine(ctx).Create(&customer) if result.Error != nil { return nil, result.Error } return &customer, nil } // UpdateCustomer aktualisiert einen bestehenden Kunden func UpdateCustomer(ctx context.Context, update CustomerUpdate) (*Customer, error) { customer, err := GetCustomerByID(ctx, update.ID) if err != nil { return nil, err } if customer == nil { return nil, errors.New("customer nicht gefunden") } // Generische Update-Funktion verwenden if err := UpdateModel(ctx, customer, update); err != nil { return nil, err } // Aktualisierte Daten aus der Datenbank laden return GetCustomerByID(ctx, update.ID) } // DeleteCustomer löscht einen Kunden anhand seiner ID func DeleteCustomer(ctx context.Context, id ulid.ULID) error { result := GetEngine(ctx).Delete(&Customer{}, id) return result.Error }