Updating versions and changing log system
Some checks failed
continuous-integration/drone Build encountered an error

This commit is contained in:
2023-02-20 23:54:02 +01:00
parent 16c57cc424
commit c4a97644ed
14 changed files with 324 additions and 143 deletions

View File

@@ -10,33 +10,37 @@ import (
// AccountCreate writes a user to database
func (d Db) AccountCreate(input AccountCreateInput) (CreatedAccount, error) {
d.Log.Context = []interface{}{
"accountName", input.Name,
"id", input.ID,
}
accountSQL := "INSERT INTO accounts (id, name, \"apiKey\", password) VALUES($1,$2,$3,$4);"
_, err := d.DbPool.Exec(context.Background(), accountSQL, input.ID, input.Name, input.APIKey, input.Password)
if err != nil {
if strings.HasPrefix(err.Error(), "ERROR: duplicate key") {
d.Log.Debug("Duplicate name in accounts database", "name", input.Name)
d.Log.Debug("Duplicate name in accounts database")
} else {
d.Log.Error("Database error when trying to add account", "err", err.Error())
d.Log.Warn("Database error when trying to add account", "err", err.Error())
}
return CreatedAccount{}, err
}
d.Log.Info("Added account to database", "id", input.ID, "name", input.Name)
d.Log.Verbose("Added account to database", "id", input.ID)
accountFieldsSQL := "INSERT INTO \"accountsFields\" (id, \"accountId\", name, value) VALUES($1,$2,$3,$4);"
for _, field := range input.Fields {
newFieldID, uuidErr := uuid.NewRandom()
if uuidErr != nil {
d.Log.Error("Could not create new Uuid", "err", uuidErr.Error())
d.Log.Warn("Could not create new Uuid", "err", uuidErr.Error())
return CreatedAccount{}, uuidErr
}
_, err := d.DbPool.Exec(context.Background(), accountFieldsSQL, newFieldID, input.ID, field.Name, field.Values)
if err != nil {
//if strings.HasPrefix(err.Error(), "ERROR: duplicate key") {
d.Log.Error("Database error when trying to add account field", "err", err.Error(), "accountID", input.ID, "fieldName", field.Name, "fieldvalues", field.Values)
d.Log.Warn("Database error when trying to add account field", "err", err.Error(), "accountID", input.ID, "fieldName", field.Name, "fieldvalues", field.Values)
// }
}
@@ -51,29 +55,32 @@ func (d Db) AccountCreate(input AccountCreateInput) (CreatedAccount, error) {
}
func (d Db) AccountDel(accountID string) error {
d.Log.Info("Trying to delete account", "accountID", accountID)
d.Log.Context = []interface{}{
"accountID", accountID,
}
d.Log.Verbose("Trying to delete account")
_, renewalTokensErr := d.DbPool.Exec(context.Background(), "DELETE FROM \"renewalTokens\" WHERE \"accountId\" = $1;", accountID)
if renewalTokensErr != nil {
d.Log.Error("Could not remove renewal tokens for account", "err", renewalTokensErr.Error(), "accountID", accountID)
d.Log.Error("Could not remove renewal tokens for account", "err", renewalTokensErr.Error())
return renewalTokensErr
}
_, fieldsErr := d.DbPool.Exec(context.Background(), "DELETE FROM \"accountsFields\" WHERE \"accountId\" = $1;", accountID)
if fieldsErr != nil {
d.Log.Error("Could not remove account fields", "err", fieldsErr.Error(), "accountID", accountID)
d.Log.Error("Could not remove account fields", "err", fieldsErr.Error())
return fieldsErr
}
res, err := d.DbPool.Exec(context.Background(), "DELETE FROM accounts WHERE id = $1", accountID)
if err != nil {
d.Log.Error("Could not remove account", "err", err.Error(), "accountID", accountID)
d.Log.Error("Could not remove account", "err", err.Error())
return err
}
if string(res) == "DELETE 0" {
d.Log.Info("Tried to delete account, but none exists", "accountID", accountID)
err := errors.New("No account found for given accountID")
d.Log.Debug("Tried to delete account, but none exists")
err := errors.New("no account found for given accountID")
return err
}
@@ -82,7 +89,12 @@ func (d Db) AccountDel(accountID string) error {
// AccountGet fetches an account from the database
func (d Db) AccountGet(accountID string, APIKey string, name string) (Account, error) {
d.Log.Debug("Trying to get account", "accountID", accountID, "len(APIKey)", len(APIKey), "name", name)
d.Log.Context = []interface{}{
"accountID", accountID,
"len(APIKey)", len(APIKey),
"name", name,
}
d.Log.Debug("Trying to get account")
var account Account
var searchParam string
@@ -105,18 +117,18 @@ func (d Db) AccountGet(accountID string, APIKey string, name string) (Account, e
accountErr := d.DbPool.QueryRow(context.Background(), accountSQL, searchParam).Scan(&account.ID, &account.Created, &account.Name, &account.Password)
if accountErr != nil {
if accountErr.Error() == "no rows in result set" {
d.Log.Debug("No account found", "accountID", accountID, "APIKey", len(APIKey))
d.Log.Debug("No account found")
return Account{}, accountErr
}
d.Log.Error("Database error when fetching account", "err", accountErr.Error(), "accountID", accountID, "APIKey", len(APIKey))
d.Log.Error("Database error when fetching account", "err", accountErr.Error())
return Account{}, accountErr
}
fieldsSQL := "SELECT name, value FROM \"accountsFields\" WHERE \"accountId\" = $1"
rows, fieldsErr := d.DbPool.Query(context.Background(), fieldsSQL, account.ID)
if fieldsErr != nil {
d.Log.Error("Database error when fetching account fields", "err", accountErr.Error(), "accountID", accountID, "APIKey", len(APIKey))
d.Log.Error("Database error when fetching account fields", "err", accountErr.Error())
return Account{}, fieldsErr
}
@@ -126,7 +138,7 @@ func (d Db) AccountGet(accountID string, APIKey string, name string) (Account, e
var value []string
err := rows.Scan(&name, &value)
if err != nil {
d.Log.Error("Could not get name or value from database row", "err", err.Error(), "accountID", accountID, "APIKey", len(APIKey))
d.Log.Error("Could not get name or value from database row", "err", err.Error())
return Account{}, err
}
account.Fields[name] = value
@@ -135,17 +147,76 @@ func (d Db) AccountGet(accountID string, APIKey string, name string) (Account, e
return account, nil
}
// func (d Db) AccountsGet() ([]Account, error) {
// d.Log.Debug("Trying to get accounts", "name", name)
// var account Account
// var searchParam string
// accountSQL := "SELECT id, created, name, \"password\" FROM accounts WHERE "
// if accountID != "" {
// accountSQL = accountSQL + "id = $1"
// searchParam = accountID
// } else if APIKey != "" {
// accountSQL = accountSQL + "\"apiKey\" = $1"
// searchParam = APIKey
// } else if name != "" {
// accountSQL = accountSQL + "name = $1"
// searchParam = name
// } else {
// d.Log.Debug("No get criteria entered, returning empty response without calling the database")
// return Account{}, errors.New("no rows in result set")
// }
// accountErr := d.DbPool.QueryRow(context.Background(), accountSQL, searchParam).Scan(&account.ID, &account.Created, &account.Name, &account.Password)
// if accountErr != nil {
// if accountErr.Error() == "no rows in result set" {
// d.Log.Debug("No account found", "accountID", accountID, "APIKey", len(APIKey))
// return Account{}, accountErr
// }
// d.Log.Error("Database error when fetching account", "err", accountErr.Error(), "accountID", accountID, "APIKey", len(APIKey))
// return Account{}, accountErr
// }
// fieldsSQL := "SELECT name, value FROM \"accountsFields\" WHERE \"accountId\" = $1"
// rows, fieldsErr := d.DbPool.Query(context.Background(), fieldsSQL, account.ID)
// if fieldsErr != nil {
// d.Log.Error("Database error when fetching account fields", "err", accountErr.Error(), "accountID", accountID, "APIKey", len(APIKey))
// return Account{}, fieldsErr
// }
// account.Fields = make(map[string][]string)
// for rows.Next() {
// var name string
// var value []string
// err := rows.Scan(&name, &value)
// if err != nil {
// d.Log.Error("Could not get name or value from database row", "err", err.Error(), "accountID", accountID, "APIKey", len(APIKey))
// return Account{}, err
// }
// account.Fields[name] = value
// }
// return account, nil
// }
func (d Db) AccountUpdateFields(accountID string, fields []AccountCreateInputFields) (Account, error) {
d.Log.Context = []interface{}{
"accountID", accountID,
"fields", fields,
}
// Begin database transaction
conn, err := d.DbPool.Acquire(context.Background())
if err != nil {
d.Log.Error("Could not acquire database connection", "err", err.Error(), "accountID", accountID)
d.Log.Error("Could not acquire database connection", "err", err.Error())
return Account{}, err
}
tx, err := conn.Begin(context.Background())
if err != nil {
d.Log.Error("Could not begin database transaction", "err", err.Error(), "accountID", accountID)
d.Log.Error("Could not begin database transaction", "err", err.Error())
return Account{}, err
}
@@ -155,7 +226,7 @@ func (d Db) AccountUpdateFields(accountID string, fields []AccountCreateInputFie
_, err = tx.Exec(context.Background(), "DELETE FROM \"accountsFields\" WHERE \"accountId\" = $1;", accountID)
if err != nil {
d.Log.Error("Could not delete previous fields", "err", err.Error(), "accountID", accountID)
d.Log.Error("Could not delete previous fields", "err", err.Error())
return Account{}, err
}
@@ -169,7 +240,7 @@ func (d Db) AccountUpdateFields(accountID string, fields []AccountCreateInputFie
_, err = tx.Exec(context.Background(), accountFieldsSQL, newFieldID, accountID, field.Name, field.Values)
if err != nil {
d.Log.Error("Database error when trying to add account field", "err", err.Error(), "accountID", accountID, "fieldName", field.Name, "fieldvalues", field.Values)
d.Log.Error("Database error when trying to add account field", "err", err.Error(), "fieldName", field.Name, "fieldvalues", field.Values)
}
d.Log.Debug("Added account field", "accountID", accountID, "fieldName", field.Name, "fieldValues", field.Values)