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