github.com/status-im/status-go@v1.1.0/services/connector/database/persistence.go (about)

     1  package persistence
     2  
     3  import (
     4  	"database/sql"
     5  
     6  	"github.com/status-im/status-go/eth-node/types"
     7  )
     8  
     9  const upsertDAppQuery = "INSERT INTO connector_dapps (url, name, icon_url, shared_account, chain_id) VALUES (?, ?, ?, ?, ?) ON CONFLICT(url) DO UPDATE SET name = excluded.name, icon_url = excluded.icon_url, shared_account = excluded.shared_account, chain_id = excluded.chain_id"
    10  const selectDAppByUrlQuery = "SELECT name, icon_url, shared_account, chain_id FROM connector_dapps WHERE url = ?"
    11  const selectDAppsQuery = "SELECT url, name, icon_url, shared_account, chain_id FROM connector_dapps"
    12  const deleteDAppQuery = "DELETE FROM connector_dapps WHERE url = ?"
    13  
    14  type DApp struct {
    15  	URL           string        `json:"url"`
    16  	Name          string        `json:"name"`
    17  	IconURL       string        `json:"iconUrl"`
    18  	SharedAccount types.Address `json:"sharedAccount"`
    19  	ChainID       uint64        `json:"chainId"`
    20  }
    21  
    22  func UpsertDApp(db *sql.DB, dApp *DApp) error {
    23  	_, err := db.Exec(upsertDAppQuery, dApp.URL, dApp.Name, dApp.IconURL, dApp.SharedAccount, dApp.ChainID)
    24  	return err
    25  }
    26  
    27  func SelectDAppByUrl(db *sql.DB, url string) (*DApp, error) {
    28  	dApp := &DApp{
    29  		URL: url,
    30  	}
    31  	err := db.QueryRow(selectDAppByUrlQuery, url).Scan(&dApp.Name, &dApp.IconURL, &dApp.SharedAccount, &dApp.ChainID)
    32  	if err == sql.ErrNoRows {
    33  		return nil, nil
    34  	}
    35  	return dApp, err
    36  }
    37  
    38  func SelectAllDApps(db *sql.DB) ([]DApp, error) {
    39  	rows, err := db.Query(selectDAppsQuery)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	defer rows.Close()
    44  
    45  	var dApps []DApp
    46  	for rows.Next() {
    47  		dApp := DApp{}
    48  		err = rows.Scan(&dApp.URL, &dApp.Name, &dApp.IconURL, &dApp.SharedAccount, &dApp.ChainID)
    49  		if err != nil {
    50  			return nil, err
    51  		}
    52  		dApps = append(dApps, dApp)
    53  	}
    54  	return dApps, nil
    55  }
    56  
    57  func DeleteDApp(db *sql.DB, url string) error {
    58  	_, err := db.Exec(deleteDAppQuery, url)
    59  	return err
    60  }