Files
hexagonal-login/repositories/mysql/query_construct.go
2020-03-18 18:18:03 +07:00

89 lines
2.2 KiB
Go

package mysql
import (
"fmt"
"strings"
m "github.com/rinosukmandityo/hexagonal-login/models"
)
func constructUpdateQuery(data *m.User, filter map[string]interface{}) (string, []interface{}) {
// "UPDATE <tablename> SET field1=?, field2=? WHERE filter1=?"
dataMap := data.GetMapFormat()
q := fmt.Sprintf("UPDATE %s SET", data.TableName())
values := []interface{}{}
for k, v := range dataMap {
q += fmt.Sprintf(" %s=?,", k)
values = append(values, v)
}
q = strings.TrimSuffix(q, ",")
q += " WHERE"
for k, v := range filter {
q += fmt.Sprintf(" %s=?,", k)
values = append(values, v)
}
q = strings.TrimSuffix(q, ",")
return q, values
}
func constructDeleteQuery(filter map[string]interface{}) (string, []interface{}) {
// "DELETE <tablename> WHERE filter1=?"
q := fmt.Sprintf("DELETE FROM %s WHERE", new(m.User).TableName())
values := []interface{}{}
for k, v := range filter {
q += fmt.Sprintf(" %s=?,", k)
values = append(values, v)
}
q = strings.TrimSuffix(q, ",")
return q, values
}
func constructStoreQuery(data *m.User) (string, []interface{}) {
// "INSERT INTO <tablename> VALUES(?, ?, ?, ?)"
dataFields := data.SplitByField()
q := fmt.Sprintf("INSERT INTO %s VALUES(", data.TableName())
values := []interface{}{}
for _, v := range dataFields {
q += "?,"
values = append(values, v)
}
q = strings.TrimSuffix(q, ",") + ")"
return q, values
}
func constructGetBy(filter map[string]interface{}) (string, []interface{}) {
// SELECT * FROM <tablename> WHERE filter1=filtervalue
q := fmt.Sprintf("SELECT * FROM %s WHERE", new(m.User).TableName())
dataFields := []interface{}{}
for k, v := range filter {
q += fmt.Sprintf(" %s=?,", k)
dataFields = append(dataFields, v)
}
q = strings.TrimSuffix(q, ",")
return q, dataFields
}
func constructGetAll() string {
return "select * from users"
}
func constructAuth(filter map[string]interface{}) (string, []interface{}) {
q := fmt.Sprintf("SELECT * FROM %s WHERE", new(m.User).TableName())
count := 0
dataFields := []interface{}{}
for k, v := range filter {
if count == 0 {
q += fmt.Sprintf(" %s=?", k)
} else {
q += fmt.Sprintf(" OR %s=?", k)
}
dataFields = append(dataFields, v)
count++
}
return q, dataFields
}