package models import ( "errors" "log" "smt/utils" ) type Safe struct { SafeId int `db:"SafeId" json:"safeId"` SafeName string `db:"SafeName" json:"safeName"` } // SafeGetByName queries the database for the specified safe name func SafeGetByName(safename string) (Safe, error) { var s Safe // Query database for matching group object err := db.QueryRowx("SELECT * FROM safes WHERE SafeName=?", safename).StructScan(&s) if err != nil { return s, errors.New("safe not found") } return s, nil } // SafeList returns a list of all safes in database func SafeList() ([]Safe, error) { var results []Safe // Query database for safes rows, err := db.Queryx("SELECT * FROM safes") if err != nil { log.Printf("SafeList error executing sql record : '%s'\n", err) return results, err } else { // parse all the results into a slice for rows.Next() { var s Safe err = rows.StructScan(&s) if err != nil { log.Printf("SafeList error parsing sql record : '%s'\n", err) return results, err } results = append(results, s) } log.Printf("SafeList retrieved '%d' results\n", len(results)) } return results, nil } // SafeList returns a list of safes in database that a user has access to func SafeListAllowed(userId int) ([]Safe, error) { var results []Safe // Query database for safes rows, err := db.Queryx(` SELECT safes.* FROM safes INNER JOIN permissions ON safes.SafeId = permissions.SafeId INNER JOIN users ON users.GroupId = permissions.GroupId WHERE users.UserId = ? UNION SELECT safes.* FROM safes INNER JOIN permissions ON safes.SafeId = permissions.SafeId INNER JOIN users ON users.UserId = permissions.UserId WHERE users.UserId = ? `, userId, userId) if err != nil { log.Printf("SafeListAllowed error executing sql record : '%s'\n", err) return results, err } else { // parse all the results into a slice for rows.Next() { var s Safe err = rows.StructScan(&s) if err != nil { log.Printf("SafeListAllowed error parsing sql record : '%s'\n", err) return results, err } results = append(results, s) debugPrint := utils.PrintStructContents(&s, 0) log.Printf("SafeListAllowed adding record :\n%s\n", debugPrint) } log.Printf("SafeListAllowed retrieved '%d' results\n", len(results)) } return results, nil }