package models import ( "github.com/google/uuid" "github.com/openaccounting/oa-server/core/util/id" "gorm.io/gorm" ) type Base struct { ID []byte `gorm:"type:BINARY(16);primaryKey"` } // GetUUID converts binary ID to UUID func (b *Base) GetUUID() (uuid.UUID, error) { return id.ToUUID(b.ID) } // GetIDString returns string representation of the ID func (b *Base) GetIDString() string { return id.String(b.ID) } // SetIDFromString parses string UUID into binary ID func (b *Base) SetIDFromString(s string) error { binID, err := id.FromString(s) if err != nil { return err } b.ID = binID return nil } // ValidateID checks if the ID is a valid UUID func (b *Base) ValidateID() error { _, err := uuid.FromBytes(b.ID) return err } // BeforeCreate GORM hook to set ID if empty func (b *Base) BeforeCreate(tx *gorm.DB) error { if len(b.ID) == 0 { b.ID = id.New() } return nil }