package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func NewMapper(fn string) (AardMapper, error) { var am AardMapper db, err := gorm.Open(sqlite.Open(fn), &gorm.Config{}) db.AutoMigrate(&Area{}) db.AutoMigrate(&Room{}) if err != nil { return am, fmt.Errorf("error opening mapper sqlite3 database: %s\n", err) } am.DB = db return am, nil } type AardMapper struct { DB *gorm.DB } func (am AardMapper) Areas() (map[string]Area, error) { areas := make(map[string]Area) x := make([]Area, 0) tx := am.DB.Find(&x) if tx.Error != nil { return nil, fmt.Errorf("error fetching areas: %w", tx.Error) } for _, a := range x { areas[a.Uid] = a } return areas, nil } func (am AardMapper) Rooms() (map[string]Room, error) { rooms := make(map[string]Room) x := make([]Room, 0) tx := am.DB.Find(&x) if tx.Error != nil { return nil, fmt.Errorf("error fetching areas: %w", tx.Error) } for _, a := range x { rooms[a.Uid] = a } return rooms, nil } type Area struct { gorm.Model Uid string Name, Flags string } type Room struct { gorm.Model Uid string Name, Area string Building string Info, Notes, Flags string X, Y, Z int Norecall, Noportal int }