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