All checks were successful
continuous-integration/drone/push Build is passing
150 lines
4.2 KiB
Go
150 lines
4.2 KiB
Go
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
|
|
}
|
|
|
|
// SafeAdd adds a new safe definition to the database
|
|
func (s *Safe) SafeAdd() (*Safe, error) {
|
|
var err error
|
|
|
|
// Validate group not already in use
|
|
_, err = SafeGetByName(s.SafeName)
|
|
|
|
if err != nil && err.Error() == "safe not found" {
|
|
log.Printf("SafeAdd confirmed no existing safe, continuing with creation of safe '%s'\n", s.SafeName)
|
|
|
|
result, err := db.NamedExec(("INSERT INTO safes (SafeName) VALUES (:SafeName) RETURNING SafeId;"), s)
|
|
|
|
//err = db.QueryRowx(`INSERT INTO users (user_id, user_nme, user_email, user_address_id) VALUES ($1, $2, $3, $4) RETURNING *;`, 6, fake.UserName(), fake.EmailAddress(), lastInsertId).StructScan(&user)
|
|
|
|
if err != nil {
|
|
log.Printf("SafeAdd error executing sql record : '%s'\n", err)
|
|
return &Safe{}, err
|
|
} else {
|
|
affected, _ := result.RowsAffected()
|
|
id, _ := result.LastInsertId()
|
|
log.Printf("SafeAdd insert returned result id '%d' affecting %d row(s).\n", id, affected)
|
|
log.Printf("safe: %v\n", s)
|
|
}
|
|
} else {
|
|
log.Printf("SafeAdd safe name already exists : '%v'\n", err)
|
|
}
|
|
|
|
return s, nil
|
|
}
|
|
|
|
// SafeDelete removes a safe definition from the database
|
|
func (s *Safe) SafeDelete() error {
|
|
var err error
|
|
|
|
// Validate group exists
|
|
safe, err := SafeGetByName(s.SafeName)
|
|
if err != nil && err.Error() == "safe not found" {
|
|
log.Printf("SafeDelete unable to validate safe exists : '%s'\n", err)
|
|
return err
|
|
}
|
|
|
|
// Make sure we have a safe ID
|
|
if s.SafeId == 0 {
|
|
s.SafeId = safe.SafeId
|
|
}
|
|
|
|
// Delete the safe
|
|
log.Printf("SafeDelete confirmed safe exists, continuing with deletion of safe '%s'\n", s.SafeName)
|
|
result, err := db.NamedExec((`DELETE FROM safes WHERE SafeId = :SafeId`), s)
|
|
|
|
if err != nil {
|
|
log.Printf("SafeDelete error executing sql delete : '%s'\n", err)
|
|
return err
|
|
} else {
|
|
affected, _ := result.RowsAffected()
|
|
id, _ := result.LastInsertId()
|
|
log.Printf("SafeDelete returned result id '%d' affecting %d row(s).\n", id, affected)
|
|
}
|
|
|
|
return nil
|
|
}
|