diff --git a/internal/server/database/database.go b/internal/server/database/database.go index bbf6ee2..3ea8467 100644 --- a/internal/server/database/database.go +++ b/internal/server/database/database.go @@ -26,8 +26,10 @@ func KickoffDatabase(workDir string) (*gorm.DB, error) { // try to use GORM automigrate if the schema changes if err := db.AutoMigrate( &Command{}, - &Device{}, &File{}, + &Tenant{}, + &Group{}, + &Device{}, ); err != nil { return nil, err } diff --git a/internal/server/database/define.go b/internal/server/database/define.go index 6936528..92040e7 100644 --- a/internal/server/database/define.go +++ b/internal/server/database/define.go @@ -38,8 +38,26 @@ type AccessKey struct { Timestamps } +type Tenant struct { + ID int `gorm:"primaryKey;not null;"` + TenantName string `gorm:"not null"` + TenantDescription string + Groups []Group `gorm:"foreignKey:TenantID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` + Timestamps +} + +type Group struct { + ID int `gorm:"primaryKey;not null;"` + TenantID uint `gorm:"not null;index"` + GroupName string `gorm:"not null;"` + GroupDescription string + Devices []Device `gorm:"foreignKey:GroupID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` + Timestamps +} + type Device struct { - ID int `gorm:"primaryKey;not null;"` + ID int `gorm:"primaryKey;not null;"` + GroupID uint `gorm:"not null;index"` // Device type is meant as a field where can be specified what type of device this is // eg Raspberry Pi, PC, things like that DeviceType string