package things import ( "log" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type Thing struct { ID int Name string Subthings []SubThing } type SubThing struct { ID int ThingID int Name string } type Service struct { db *gorm.DB } func NewThingsService() *Service { db, err := gorm.Open(sqlite.Open("things.db")) if err != nil { log.Panic(err) } db.AutoMigrate(&Thing{}, &SubThing{}) return &Service{ db: db, } } func (s *Service) NewThing(name string) { if err := s.db.Save(&Thing{Name: name}).Error; err != nil { log.Fatal(err) } print(name) } func (s *Service) GetThings() (things []Thing) { if err := s.db.Find(&things).Error; err != nil { log.Fatal(err) } return things } func (s *Service) DeleteThing(id int) { if err := s.db.Delete(Thing{}, id).Error; err != nil { log.Fatal(err) } } func (s *Service) GetSubThings(thingID int) (subthings []SubThing) { if err := s.db.Where("thing_id = ?", thingID).Find(&subthings).Error; err != nil { log.Fatal(err) } return } func (s *Service) AddSubThing(thingID int, name string) { if err := s.db.Save(&SubThing{ ThingID: thingID, Name: name, }).Error; err != nil { log.Fatal(err) } } func (s *Service) DeleteSubThing(id int) { if err := s.db.Delete(SubThing{}, id).Error; err != nil { log.Fatal(err) } }