update card revision on status changes

This commit is contained in:
Roland Osborne 2022-01-20 21:48:24 -08:00
parent 69d9736152
commit 50f1e9bb6e
3 changed files with 53 additions and 8 deletions

View File

@ -69,14 +69,23 @@ func AddCard(w http.ResponseWriter, r *http.Request) {
card.Node = identity.Node card.Node = identity.Node
card.ProfileRevision = identity.Revision card.ProfileRevision = identity.Revision
card.Status = APP_CARDCONFIRMED card.Status = APP_CARDCONFIRMED
if err := store.DB.Save(&card).Error; err != nil {
// save and update contact revision
err = store.DB.Transaction(func(tx *gorm.DB) error {
if res := store.DB.Save(&card).Error; res != nil {
return res
}
if res := store.DB.Model(&account).Update("card_revision", account.CardRevision + 1).Error; res != nil {
return res
}
return nil
})
if err != nil {
ErrResponse(w, http.StatusInternalServerError, err) ErrResponse(w, http.StatusInternalServerError, err)
return return
} }
// TODO UPDATE CONTACT REVISION SetStatus(account)
// TODO SET STATUS
WriteResponse(w, getCardModel(&card)) WriteResponse(w, getCardModel(&card))
} }

View File

@ -45,6 +45,7 @@ func SetCardStatus(w http.ResponseWriter, r *http.Request) {
// update card // update card
card.Status = status card.Status = status
card.DataRevision += 1
if token != "" { if token != "" {
card.OutToken = token card.OutToken = token
} }
@ -57,14 +58,22 @@ func SetCardStatus(w http.ResponseWriter, r *http.Request) {
card.InToken = hex.EncodeToString(data) card.InToken = hex.EncodeToString(data)
} }
if err := store.DB.Save(&card).Error; err != nil { // save and update contact revision
err = store.DB.Transaction(func(tx *gorm.DB) error {
if res := store.DB.Save(&card).Error; res != nil {
return res
}
if res := store.DB.Model(&account).Update("card_revision", account.CardRevision + 1).Error; res != nil {
return res
}
return nil
})
if err != nil {
ErrResponse(w, http.StatusInternalServerError, err) ErrResponse(w, http.StatusInternalServerError, err)
return return
} }
// TODO UPDATE CARD REVISION, CONTACT REVISION SetStatus(account)
// TODO SET STATUS
WriteResponse(w, getCardModel(&card)); WriteResponse(w, getCardModel(&card));
} }

View File

@ -2,14 +2,18 @@ package databag
import ( import (
"testing" "testing"
"encoding/json"
"github.com/gorilla/websocket"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestConnectContact(t *testing.T) { func TestConnectContact(t *testing.T) {
var card Card var card Card
var revision Revision
var msg DataMessage var msg DataMessage
var vars map[string]string var vars map[string]string
var cardRevision int64
// create some contacts for this test // create some contacts for this test
access := AddTestContacts(t, "connect", 2) access := AddTestContacts(t, "connect", 2)
@ -20,12 +24,27 @@ func TestConnectContact(t *testing.T) {
GetProfileMessage(w, r) GetProfileMessage(w, r)
assert.NoError(t, ReadResponse(w, &msg)) assert.NoError(t, ReadResponse(w, &msg))
// app connects websocket
ws := getTestWebsocket()
announce := Announce{ AppToken: access[1] }
data, _ := json.Marshal(&announce)
ws.WriteMessage(websocket.TextMessage, data)
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
cardRevision = revision.Card
// add A card in B // add A card in B
r, w, _ = NewRequest("POST", "/contact/cards", &msg) r, w, _ = NewRequest("POST", "/contact/cards", &msg)
SetBearerAuth(r, access[1]) SetBearerAuth(r, access[1])
AddCard(w, r) AddCard(w, r)
assert.NoError(t, ReadResponse(w, &card)) assert.NoError(t, ReadResponse(w, &card))
// profile revision incremented
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
cardRevision = revision.Card
// update A status to connecting // update A status to connecting
r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING) r, w, _ = NewRequest("PUT", "/contact/cards/{cardId}/status", APP_CARDCONNECTING)
vars = map[string]string{ "cardId": card.CardId } vars = map[string]string{ "cardId": card.CardId }
@ -34,6 +53,14 @@ func TestConnectContact(t *testing.T) {
SetCardStatus(w, r) SetCardStatus(w, r)
assert.NoError(t, ReadResponse(w, &card)) assert.NoError(t, ReadResponse(w, &card))
// profile revision incremented
_, data, _ = ws.ReadMessage()
assert.NoError(t, json.Unmarshal(data, &revision))
assert.NotEqual(t, cardRevision, revision.Card)
cardRevision = revision.Card
PrintMsg(revision)
// get open message to A // get open message to A
r, w, _ = NewRequest("GET", "/contact/cards/{cardId}/openMessage", nil) r, w, _ = NewRequest("GET", "/contact/cards/{cardId}/openMessage", nil)
vars = map[string]string{ "cardId": card.CardId } vars = map[string]string{ "cardId": card.CardId }