github.com/status-im/status-go@v1.1.0/services/communitytokens/communitytokensdatabase/database.go (about) 1 package communitytokensdatabase 2 3 import ( 4 "database/sql" 5 "fmt" 6 7 "github.com/status-im/status-go/protocol/communities/token" 8 "github.com/status-im/status-go/protocol/protobuf" 9 ) 10 11 type Database struct { 12 db *sql.DB 13 } 14 15 func NewCommunityTokensDatabase(db *sql.DB) *Database { 16 return &Database{db: db} 17 } 18 19 func (db *Database) GetTokenType(chainID uint64, contractAddress string) (protobuf.CommunityTokenType, error) { 20 var result = protobuf.CommunityTokenType_UNKNOWN_TOKEN_TYPE 21 rows, err := db.db.Query(`SELECT type FROM community_tokens WHERE chain_id=? AND address=? LIMIT 1`, chainID, contractAddress) 22 if err != nil { 23 return result, err 24 } 25 defer rows.Close() 26 27 if rows.Next() { 28 err := rows.Scan(&result) 29 return result, err 30 } 31 return result, fmt.Errorf("can't find token: chainId %v, contractAddress %v", chainID, contractAddress) 32 } 33 34 func (db *Database) GetTokenPrivilegesLevel(chainID uint64, contractAddress string) (token.PrivilegesLevel, error) { 35 var result = token.CommunityLevel 36 rows, err := db.db.Query(`SELECT privileges_level FROM community_tokens WHERE chain_id=? AND address=? LIMIT 1`, chainID, contractAddress) 37 if err != nil { 38 return result, err 39 } 40 defer rows.Close() 41 42 if rows.Next() { 43 err := rows.Scan(&result) 44 return result, err 45 } 46 return result, fmt.Errorf("can't find privileges level: chainId %v, contractAddress %v", chainID, contractAddress) 47 } 48 49 func (db *Database) GetCommunityERC20Metadata() ([]*token.CommunityToken, error) { 50 rows, err := db.db.Query(`SELECT community_id, address, name, symbol, chain_id FROM community_tokens WHERE type = ?`, protobuf.CommunityTokenType_ERC20) 51 if err != nil { 52 return nil, err 53 } 54 defer rows.Close() 55 56 var result []*token.CommunityToken 57 for rows.Next() { 58 token := token.CommunityToken{} 59 err := rows.Scan(&token.CommunityID, &token.Address, &token.Name, &token.Symbol, &token.ChainID) 60 if err != nil { 61 return nil, err 62 } 63 result = append(result, &token) 64 } 65 return result, rows.Err() 66 }