associations
This commit is contained in:
		| @@ -1,43 +1,77 @@ | ||||
| package things | ||||
|  | ||||
| import "slices" | ||||
| import ( | ||||
| 	"log" | ||||
|  | ||||
| 	"gorm.io/driver/sqlite" | ||||
| 	"gorm.io/gorm" | ||||
| ) | ||||
|  | ||||
| type Thing struct { | ||||
| 	ID   int | ||||
| 	Name string | ||||
| 	ID        int | ||||
| 	Name      string | ||||
| 	Subthings []SubThing | ||||
| } | ||||
|  | ||||
| type SubThing struct { | ||||
| 	ID      int | ||||
| 	ThingID int | ||||
| 	Name    string | ||||
| } | ||||
|  | ||||
| type Service struct { | ||||
| 	things map[int]Thing | ||||
| 	maxID  int | ||||
| 	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{ | ||||
| 		things: make(map[int]Thing), | ||||
| 		db: db, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *Service) NewThing(name string) { | ||||
| 	s.maxID++ | ||||
| 	s.things[s.maxID] = Thing{ | ||||
| 		Name: name, | ||||
| 		ID:   s.maxID, | ||||
| 	if err := s.db.Save(&Thing{Name: name}).Error; err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
|  | ||||
| 	print(name) | ||||
| } | ||||
|  | ||||
| func (s *Service) GetThings() []Thing { | ||||
| 	things := make([]Thing, 0, len(s.things)) | ||||
| 	for _, t := range s.things { | ||||
| 		things = append(things, t) | ||||
| func (s *Service) GetThings() (things []Thing) { | ||||
| 	if err := s.db.Find(&things).Error; err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
| 	slices.SortFunc(things, func(a, b Thing) int { return a.ID - b.ID }) | ||||
| 	return things | ||||
| } | ||||
|  | ||||
| func (s *Service) DeleteThing(id int) { | ||||
| 	delete(s.things, id) | ||||
|  | ||||
| 	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) | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user