Added Identity Images to multi-accounts GetAccounts()
This commit is contained in:
parent
79f2b0bcc7
commit
094ea2ce85
|
@ -11,11 +11,11 @@ import (
|
||||||
|
|
||||||
// Account stores public information about account.
|
// Account stores public information about account.
|
||||||
type Account struct {
|
type Account struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Timestamp int64 `json:"timestamp"`
|
Timestamp int64 `json:"timestamp"`
|
||||||
KeycardPairing string `json:"keycard-pairing"`
|
KeycardPairing string `json:"keycard-pairing"`
|
||||||
KeyUID string `json:"key-uid"`
|
KeyUID string `json:"key-uid"`
|
||||||
ImageURIs []string `json:"image-uris"`
|
Images []images.IdentityImage `json:"images"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Database struct {
|
type Database struct {
|
||||||
|
@ -40,22 +40,71 @@ func (db *Database) Close() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) GetAccounts() ([]Account, error) {
|
func (db *Database) GetAccounts() ([]Account, error) {
|
||||||
rows, err := db.db.Query("SELECT name, loginTimestamp, keycardPairing, keyUid from accounts ORDER BY loginTimestamp DESC")
|
rows, err := db.db.Query("SELECT a.name, a.loginTimestamp, a.keycardPairing, a.keyUid, ii.name, ii.image_payload, ii.width, ii.height, ii.file_size, ii.resize_target FROM accounts AS a LEFT JOIN identity_images AS ii ON ii.key_uid = a.keyUid ORDER BY loginTimestamp DESC")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
var rst []Account
|
var rst []Account
|
||||||
inthelper := sql.NullInt64{}
|
accs := map[string]*Account{}
|
||||||
|
accLoginTimestamp := sql.NullInt64{}
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
acc := Account{}
|
acc := Account{}
|
||||||
err = rows.Scan(&acc.Name, &inthelper, &acc.KeycardPairing, &acc.KeyUID)
|
ii := &images.IdentityImage{}
|
||||||
|
iiName := sql.NullString{}
|
||||||
|
iiWidth := sql.NullInt64{}
|
||||||
|
iiHeight := sql.NullInt64{}
|
||||||
|
iiFileSize := sql.NullInt64{}
|
||||||
|
iiResizeTarget := sql.NullInt64{}
|
||||||
|
|
||||||
|
err = rows.Scan(
|
||||||
|
&acc.Name,
|
||||||
|
&accLoginTimestamp,
|
||||||
|
&acc.KeycardPairing,
|
||||||
|
&acc.KeyUID,
|
||||||
|
&iiName,
|
||||||
|
&ii.Payload,
|
||||||
|
&iiWidth,
|
||||||
|
&iiHeight,
|
||||||
|
&iiFileSize,
|
||||||
|
&iiResizeTarget,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
acc.Timestamp = inthelper.Int64
|
|
||||||
rst = append(rst, acc)
|
acc.Timestamp = accLoginTimestamp.Int64
|
||||||
|
|
||||||
|
ii.KeyUID = acc.KeyUID
|
||||||
|
ii.Name = iiName.String
|
||||||
|
ii.Width = int(iiWidth.Int64)
|
||||||
|
ii.Height = int(iiHeight.Int64)
|
||||||
|
ii.FileSize = int(iiFileSize.Int64)
|
||||||
|
ii.ResizeTarget = int(iiResizeTarget.Int64)
|
||||||
|
|
||||||
|
if ii.Name == "" && len(ii.Payload) == 0 && ii.Width == 0 && ii.Height == 0 && ii.FileSize == 0 && ii.ResizeTarget == 0 {
|
||||||
|
ii = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if ii != nil {
|
||||||
|
a, ok := accs[acc.Name]
|
||||||
|
if ok {
|
||||||
|
a.Images = append(a.Images, *ii)
|
||||||
|
} else {
|
||||||
|
acc.Images = append(acc.Images, *ii)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
accs[acc.Name] = &acc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Yes, I know, I'm converting a map into a slice, this is to maintain the function signature and API behaviour and
|
||||||
|
// not need to loop through the slice searching for an account with a given keyUID
|
||||||
|
for _, a := range accs {
|
||||||
|
rst = append(rst, *a)
|
||||||
|
}
|
||||||
|
|
||||||
return rst, nil
|
return rst, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,9 +189,10 @@ func (db *Database) StoreIdentityImages(keyUID string, iis []*images.IdentityIma
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ii.KeyUID = keyUID
|
||||||
_, err := tx.Exec(
|
_, err := tx.Exec(
|
||||||
"INSERT INTO identity_images (key_uid, name, image_payload, width, height, file_size, resize_target) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
"INSERT INTO identity_images (key_uid, name, image_payload, width, height, file_size, resize_target) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||||||
keyUID,
|
ii.KeyUID,
|
||||||
ii.Name,
|
ii.Name,
|
||||||
ii.Payload,
|
ii.Payload,
|
||||||
ii.Width,
|
ii.Width,
|
||||||
|
|
|
@ -80,7 +80,7 @@ func TestDatabase_GetIdentityImages(t *testing.T) {
|
||||||
defer stop()
|
defer stop()
|
||||||
seedTestDB(t, db)
|
seedTestDB(t, db)
|
||||||
|
|
||||||
expected := `[{"key_uid":"0xdeadbeef","type":"large","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUg=","width":240,"height":300,"file_size":1024,"resize_target":240},{"key_uid":"0xdeadbeef","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"file_size":256,"resize_target":80}]`
|
expected := `[{"keyUid":"0xdeadbeef","type":"large","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUg=","width":240,"height":300,"fileSize":1024,"resizeTarget":240},{"keyUid":"0xdeadbeef","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"fileSize":256,"resizeTarget":80}]`
|
||||||
|
|
||||||
oiis, err := db.GetIdentityImages(keyUID)
|
oiis, err := db.GetIdentityImages(keyUID)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -108,17 +108,17 @@ func TestDatabase_GetIdentityImage(t *testing.T) {
|
||||||
{
|
{
|
||||||
keyUID,
|
keyUID,
|
||||||
images.SmallDimName,
|
images.SmallDimName,
|
||||||
`{"key_uid":"0xdeadbeef","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"file_size":256,"resize_target":80}`,
|
`{"keyUid":"0xdeadbeef","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"fileSize":256,"resizeTarget":80}`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
keyUID,
|
keyUID,
|
||||||
images.LargeDimName,
|
images.LargeDimName,
|
||||||
`{"key_uid":"0xdeadbeef","type":"large","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUg=","width":240,"height":300,"file_size":1024,"resize_target":240}`,
|
`{"keyUid":"0xdeadbeef","type":"large","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUg=","width":240,"height":300,"fileSize":1024,"resizeTarget":240}`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
keyUID2,
|
keyUID2,
|
||||||
images.LargeDimName,
|
images.LargeDimName,
|
||||||
`{"key_uid":"","type":"","uri":"","width":0,"height":0,"file_size":0,"resize_target":0}`,
|
`{"keyUid":"","type":"","uri":"","width":0,"height":0,"fileSize":0,"resizeTarget":0}`,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@ package accounts
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/status-im/status-go/images"
|
|
||||||
|
|
||||||
"github.com/status-im/status-go/account"
|
"github.com/status-im/status-go/account"
|
||||||
|
"github.com/status-im/status-go/images"
|
||||||
"github.com/status-im/status-go/multiaccounts"
|
"github.com/status-im/status-go/multiaccounts"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue