// Package `tracking` defines a generic track (sort of record) type // and a container type that allows storing of tracks in a SQL database. package tracking import ( "fmt" "strings" "time" lib "git.sr.ht/~cco/go-scopes" sql "git.sr.ht/~cco/go-scopes/storage" ) type track struct { TrackId uint Head map[string]string TimeStamp *time.Time Data lib.Payload Container *container } type container struct { headFields []string indexes []string storage *sql.Storage } func Container(db *sql.Storage) *container { return &container{ headFields: []string{"taskId", "userName"}, //indexes: [][]string{[]string{"taskId", "userName"}, []string{"userName"}}, indexes: []string{"taskid, username", "username"}, storage: db, } } func Create(cont *container) *container { db := cont.storage t := db.ParseTemplate(sql_table) var out strings.Builder data := map[string]interface{}{ "tablename": "tracks", "headFields": cont.headFields, "indexes": cont.indexes, "idType": "integer", "jsonType": "json", } err := t.Execute(&out, data) if err != nil { db.LogErr(err, "storage.tracking.Create", fmt.Sprintf("%+v", t)) return nil } sql := out.String() println(sql) _, err = db.Exec(sql) if err != nil { println(err) db.LogErr(err, "storage.tracking.Create", fmt.Sprintf("%+v", t)) return nil } return cont }