FindMyRecipe / server / util / common.go
common.go
Raw
package util

import (
	"os"
  "log"
  "fmt"
	"strings"
  "golang.org/x/crypto/bcrypt"
)

func ReadQueryFile(f string) string {
  var q, err = os.ReadFile("./server/database/queries/" + f)
  if err != nil {
    log.Fatal(err)
  }
  return string(q)
}

func ArrayToString(a []int, delim string) string {
    return strings.Trim(strings.Replace(fmt.Sprint(a), " ", delim, -1), "[]")
    //return strings.Trim(strings.Join(strings.Split(fmt.Sprint(a), " "), delim), "[]")
    //return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(a)), delim), "[]")
}

func ArrayStringToString(a []string, delim string) string {
    return strings.Trim(strings.Replace(fmt.Sprint(a), "' '", "'" + delim + "'", -1), "[]")
}

func ArrayContains(a []int, c int) bool {
  for _, s := range a {
    if (s == c) {
      return true
    }
  }
  return false
}

func HashPassword(password string) string {
  bytes, _ := bcrypt.GenerateFromPassword([]byte(password), 14);
  return string(bytes);
}

func CheckPassword(password, hash string) bool {
  err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password));
  return err == nil;
}


// used for bulk inserting to recipe_ingredient and recipe_tag
func PrepareBulkInsert(query string, placeholder string, numColumn int, values [][]int) (string, []interface{}) {
  query = strings.Replace(query, placeholder, "%s", 1)
  valueStrings := make([]string, 0, len(values))
  valueArgs := make([]interface{}, 0, len(values) * numColumn)
  valuePlaceholder := "("
  for i := 0; i < numColumn; i++ {
    if i != 0 {
      valuePlaceholder += ", "
    } 
    valuePlaceholder += "?"
  }
  valuePlaceholder += ")"
  for _, value := range values {
      valueStrings = append(valueStrings, valuePlaceholder)
      for i := 0; i < numColumn; i++ {
        valueArgs = append(valueArgs, value[i])
      }
  }
  stmt := fmt.Sprintf(query, strings.Join(valueStrings, ","))
  // fmt.Println(stmt, valueStrings, valueArgs, valuePlaceholder)
  return stmt, valueArgs
}