mirror of
https://github.com/balzack/databag.git
synced 2025-02-14 20:49:16 +00:00
sending card notification to specific channels
This commit is contained in:
parent
ea17a74c99
commit
9533f2035d
@ -22,7 +22,7 @@ func RemoveCard(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
// load referenced card
|
// load referenced card
|
||||||
var slot store.CardSlot
|
var slot store.CardSlot
|
||||||
if err := store.DB.Preload("Card.Groups").Preload("Card.Channels.ChannelSlot").Where("account_id = ? AND card_slot_id = ?", account.ID, cardId).First(&slot).Error; err != nil {
|
if err := store.DB.Preload("Card.Groups").Preload("Card.Channels.Cards").Preload("Card.Channels.ChannelSlot").Where("account_id = ? AND card_slot_id = ?", account.ID, cardId).First(&slot).Error; err != nil {
|
||||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
ErrResponse(w, http.StatusInternalServerError, err)
|
ErrResponse(w, http.StatusInternalServerError, err)
|
||||||
} else {
|
} else {
|
||||||
@ -35,6 +35,9 @@ func RemoveCard(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cards to update
|
||||||
|
cards := make(map[string]*store.Card)
|
||||||
|
|
||||||
// save and update contact revision
|
// save and update contact revision
|
||||||
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
err = store.DB.Transaction(func(tx *gorm.DB) error {
|
||||||
for _, channel := range slot.Card.Channels {
|
for _, channel := range slot.Card.Channels {
|
||||||
@ -44,6 +47,9 @@ func RemoveCard(w http.ResponseWriter, r *http.Request) {
|
|||||||
if res := tx.Model(&channel.ChannelSlot).Update("revision", account.ChannelRevision + 1).Error; res != nil {
|
if res := tx.Model(&channel.ChannelSlot).Update("revision", account.ChannelRevision + 1).Error; res != nil {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
for _, card := range channel.Cards {
|
||||||
|
cards[card.Guid] = &card
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if res := tx.Model(&slot.Card).Association("Groups").Clear(); res != nil {
|
if res := tx.Model(&slot.Card).Association("Groups").Clear(); res != nil {
|
||||||
return res
|
return res
|
||||||
@ -71,7 +77,9 @@ func RemoveCard(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
SetChannelNotification(account)
|
for _, card := range cards {
|
||||||
|
SetContactChannelNotification(account, card)
|
||||||
|
}
|
||||||
SetStatus(account)
|
SetStatus(account)
|
||||||
WriteResponse(w, nil);
|
WriteResponse(w, nil);
|
||||||
}
|
}
|
||||||
|
@ -161,8 +161,7 @@ func SetContactViewNotification(account *store.Account, card *store.Card) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// notify single card of channel change:
|
// notify single card of channel change:
|
||||||
// for each card of groups in updated channel data
|
// for each card in updated channel data
|
||||||
// for each card of group set or cleared from channel (updates data)
|
|
||||||
func SetContactChannelNotification(account *store.Account, card *store.Card) {
|
func SetContactChannelNotification(account *store.Account, card *store.Card) {
|
||||||
|
|
||||||
if card.Status != APP_CARDCONNECTED {
|
if card.Status != APP_CARDCONNECTED {
|
||||||
@ -184,36 +183,3 @@ func SetContactChannelNotification(account *store.Account, card *store.Card) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify all cards of channel change
|
|
||||||
// when card is deleted
|
|
||||||
func SetChannelNotification(account *store.Account) {
|
|
||||||
|
|
||||||
// select all connected cards
|
|
||||||
var cards []store.Card
|
|
||||||
if err := store.DB.Where("account_id = ? AND status = ?", account.Guid, APP_CARDCONNECTED).Find(&cards).Error; err != nil {
|
|
||||||
ErrMsg(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// add new notification for each card
|
|
||||||
err := store.DB.Transaction(func(tx *gorm.DB) error {
|
|
||||||
for _, card := range cards {
|
|
||||||
notification := &store.Notification{
|
|
||||||
Node: card.Node,
|
|
||||||
Module: APP_NOTIFYCHANNEL,
|
|
||||||
Token: card.OutToken,
|
|
||||||
Revision: account.ChannelRevision,
|
|
||||||
}
|
|
||||||
if err := tx.Save(notification).Error; err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
notify <- notification
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
ErrMsg(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user