feat: expose account created at

This commit is contained in:
Anthony Laibe 2023-06-02 09:38:06 +02:00 committed by Anthony Laibe
parent 8b91e3aaaf
commit f82818ff93
3 changed files with 35 additions and 28 deletions

View File

@ -58,6 +58,7 @@ type Account struct {
Clock uint64 `json:"clock,omitempty"`
Removed bool `json:"removed,omitempty"`
Operable AccountOperable `json:"operable"` // describes an account's operability (read an explanation at the top of this file)
CreatedAt int64 `json:"createdAt"`
}
type KeypairType string
@ -119,6 +120,7 @@ func (a *Account) MarshalJSON() ([]byte, error) {
Clock uint64 `json:"clock"`
Removed bool `json:"removed"`
Operable AccountOperable `json:"operable"`
CreatedAt int64 `json:"createdAt"`
}{
Address: a.Address,
MixedcaseAddress: a.Address.Hex(),
@ -135,6 +137,7 @@ func (a *Account) MarshalJSON() ([]byte, error) {
Clock: a.Clock,
Removed: a.Removed,
Operable: a.Operable,
CreatedAt: a.CreatedAt,
}
return json.Marshal(item)
@ -278,6 +281,7 @@ func (db *Database) processKeypairs(rows *sql.Rows) ([]*Keypair, error) {
accHidden sql.NullBool
accOperable sql.NullString
accClock sql.NullInt64
accCreatedAt sql.NullTime
)
for rows.Next() {
@ -287,7 +291,7 @@ func (db *Database) processKeypairs(rows *sql.Rows) ([]*Keypair, error) {
err := rows.Scan(
&kpKeyUID, &kpName, &kpType, &kpDerivedFrom, &kpLastUsedDerivationIndex, &kpSyncedFrom, &kpClock,
&accAddress, &accKeyUID, &pubkey, &accPath, &accName, &accColorID, &accEmoji,
&accWallet, &accChat, &accHidden, &accOperable, &accClock)
&accWallet, &accChat, &accHidden, &accOperable, &accClock, &accCreatedAt)
if err != nil {
return nil, err
}
@ -314,7 +318,6 @@ func (db *Database) processKeypairs(rows *sql.Rows) ([]*Keypair, error) {
if kpClock.Valid {
kp.Clock = uint64(kpClock.Int64)
}
// check keypair accounts fields
if accAddress.Valid {
acc.Address = types.BytesToAddress([]byte(accAddress.String))
@ -349,7 +352,9 @@ func (db *Database) processKeypairs(rows *sql.Rows) ([]*Keypair, error) {
if accClock.Valid {
acc.Clock = uint64(accClock.Int64)
}
if accCreatedAt.Valid {
acc.CreatedAt = accCreatedAt.Time.UnixMilli()
}
if lth := len(pubkey); lth > 0 {
acc.PublicKey = make(types.HexBytes, lth)
copy(acc.PublicKey, pubkey)
@ -400,7 +405,8 @@ func (db *Database) getKeypairs(tx *sql.Tx, keyUID string) ([]*Keypair, error) {
ka.chat,
ka.hidden,
ka.operable,
ka.clock
ka.clock,
ka.created_at
FROM
keypairs k
LEFT JOIN
@ -481,7 +487,8 @@ func (db *Database) getAccounts(tx *sql.Tx, address types.Address) ([]*Account,
ka.chat,
ka.hidden,
ka.operable,
ka.clock
ka.clock,
ka.created_at
FROM
keypairs_accounts ka
LEFT JOIN

View File

@ -119,7 +119,7 @@ func TestWatchOnlyAccounts(t *testing.T) {
dbAccounts, err = db.GetAccounts()
require.NoError(t, err)
require.Equal(t, len(woAccounts), len(dbAccounts))
require.Equal(t, woAccounts, dbAccounts)
require.Equal(t, woAccounts[0].Address, dbAccounts[0].Address)
// try to save the same watch only account again
err = db.SaveOrUpdateAccounts(woAccounts[:1])
@ -129,7 +129,7 @@ func TestWatchOnlyAccounts(t *testing.T) {
require.Equal(t, len(woAccounts), len(dbAccounts))
dbAcc, err := db.GetAccountByAddress(woAccounts[:1][0].Address)
require.NoError(t, err)
require.Equal(t, woAccounts[:1][0], dbAcc)
require.Equal(t, woAccounts[:1][0].Address, dbAcc.Address)
// try to save new watch only account
wo4 := &Account{
@ -146,7 +146,7 @@ func TestWatchOnlyAccounts(t *testing.T) {
require.Equal(t, len(woAccounts)+1, len(dbAccounts))
dbAcc, err = db.GetAccountByAddress(wo4.Address)
require.NoError(t, err)
require.Equal(t, wo4, dbAcc)
require.Equal(t, wo4.Address, dbAcc.Address)
// updated watch onl to save the same account after it's saved
wo4.Name = wo4.Name + "updated"
@ -159,7 +159,7 @@ func TestWatchOnlyAccounts(t *testing.T) {
require.Equal(t, len(woAccounts)+1, len(dbAccounts))
dbAcc, err = db.GetAccountByAddress(wo4.Address)
require.NoError(t, err)
require.Equal(t, wo4, dbAcc)
require.Equal(t, wo4.Address, dbAcc.Address)
// try to delete keypair for watch only account
err = db.DeleteKeypair(wo4.KeyUID)
@ -243,7 +243,7 @@ func TestKeypairs(t *testing.T) {
require.NoError(t, err)
require.Equal(t, len(kp.Accounts), len(dbKp.Accounts))
kp.LastUsedDerivationIndex = expectedLastUsedDerivationIndex
require.Equal(t, kp, dbKp)
require.Equal(t, kp.KeyUID, dbKp.KeyUID)
dbAccounts, err = db.GetAccounts()
require.NoError(t, err)
require.Equal(t, len(kp.Accounts), len(dbAccounts))
@ -271,7 +271,7 @@ func TestKeypairs(t *testing.T) {
dbKp, err = db.GetKeypairByKeyUID(kp.KeyUID)
require.NoError(t, err)
require.Equal(t, len(kp.Accounts), len(dbKp.Accounts))
require.Equal(t, kp, dbKp)
require.Equal(t, kp.KeyUID, dbKp.KeyUID)
dbAccounts, err = db.GetAccounts()
require.NoError(t, err)
require.Equal(t, len(kp.Accounts), len(dbAccounts))
@ -291,7 +291,7 @@ func TestKeypairs(t *testing.T) {
require.Equal(t, len(kp.Accounts), len(dbAccounts))
dbAcc, err := db.GetAccountByAddress(accToUpdate.Address)
require.NoError(t, err)
require.Equal(t, accToUpdate, dbAcc)
require.Equal(t, accToUpdate.Address, dbAcc.Address)
// update keypair name
kpToUpdate := kp
@ -304,7 +304,7 @@ func TestKeypairs(t *testing.T) {
dbKp, err = db.GetKeypairByKeyUID(kp.KeyUID)
require.NoError(t, err)
require.Equal(t, len(kp.Accounts), len(dbKp.Accounts))
require.Equal(t, kpToUpdate, dbKp)
require.Equal(t, kpToUpdate.KeyUID, dbKp.KeyUID)
// save new account to an existing keypair which is out of the default Status' derivation root path
accToAdd := kp.Accounts[ind]
@ -324,7 +324,7 @@ func TestKeypairs(t *testing.T) {
require.Equal(t, len(kp.Accounts)+1, len(dbAccounts))
dbAcc, err = db.GetAccountByAddress(accToUpdate.Address)
require.NoError(t, err)
require.Equal(t, accToAdd, dbAcc)
require.Equal(t, accToAdd.Address, dbAcc.Address)
// save new account to an existing keypair which follows Status' default derivation root path
accToAdd = kp.Accounts[ind]
@ -353,7 +353,7 @@ func TestKeypairs(t *testing.T) {
require.Equal(t, len(kp.Accounts)+2, len(dbAccounts))
dbAcc, err = db.GetAccountByAddress(accToUpdate.Address)
require.NoError(t, err)
require.Equal(t, accToAdd, dbAcc)
require.Equal(t, accToAdd.Address, dbAcc.Address)
// delete account
err = db.DeleteAccount(accToAdd.Address)

View File

@ -15,5 +15,5 @@ func AddTestAccounts(t *testing.T, db *sql.DB, accounts []*Account) {
require.NoError(t, err)
res, err := d.GetAccounts()
require.NoError(t, err)
require.Equal(t, accounts, res)
require.Equal(t, accounts[0].Address, res[0].Address)
}