Added emoji_reaction persistence

This commit is contained in:
Samuel Hawksby-Robinson 2020-07-22 00:42:55 +01:00 committed by Andrea Maria Piana
parent 241439e56b
commit fdc180039f
No known key found for this signature in database
GPG Key ID: AA6CCA6DE0E06424
3 changed files with 61 additions and 1 deletions

View File

@ -8,6 +8,8 @@ type EmojiReaction struct {
// ID calculated as keccak256(compressedAuthorPubKey, data) where data is unencrypted payload. // ID calculated as keccak256(compressedAuthorPubKey, data) where data is unencrypted payload.
ID string ID string
Clock uint64
// MessageID the ID of the target message that the user wishes to react to // MessageID the ID of the target message that the user wishes to react to
MessageID string MessageID string

View File

@ -705,3 +705,54 @@ func (db sqlitePersistence) BlockContact(contact *Contact) ([]*Chat, error) {
return chats, err return chats, err
} }
func (db sqlitePersistence) SaveEmojiReaction(emojiReaction *EmojiReaction) (err error) {
tx, err := db.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return
}
defer func() {
if err == nil {
err = tx.Commit()
return
}
// don't shadow original error
_ = tx.Rollback()
}()
allFields := db.tableEmojiReactionsAllFields()
valuesVector := strings.Repeat("?, ", db.tableEmojiReactionsAllFieldsCount()-1) + "?"
query := "INSERT INTO emoji_reactions(" + allFields + ") VALUES (" + valuesVector + ")" // nolint: gosec
stmt, err := tx.Prepare(query)
if err != nil {
return
}
allValues := []interface{}{
emojiReaction.ID,
emojiReaction.Clock,
emojiReaction.From,
emojiReaction.EmojiID,
emojiReaction.MessageID,
emojiReaction.ChatID,
emojiReaction.Retracted,
}
_, err = stmt.Exec(allValues...)
return
}
func (db sqlitePersistence) tableEmojiReactionsAllFields() string {
return `id,
clock_value,
source,
emoji_id,
message_id,
chat_id,
retracted`
}
func (db sqlitePersistence) tableEmojiReactionsAllFieldsCount() int {
return strings.Count(db.tableEmojiReactionsAllFields(), ",") + 1
}

View File

@ -3269,6 +3269,7 @@ func (m *Messenger) SendEmojiReaction(ctx context.Context, chatID, messageID str
emojiR := &EmojiReaction{ emojiR := &EmojiReaction{
ID: types.EncodeHex(id), ID: types.EncodeHex(id),
Clock: clock,
MessageID: messageID, MessageID: messageID,
ChatID: chatID, ChatID: chatID,
EmojiID: protobuf.EmojiReaction_Type(emojiID), EmojiID: protobuf.EmojiReaction_Type(emojiID),
@ -3279,12 +3280,18 @@ func (m *Messenger) SendEmojiReaction(ctx context.Context, chatID, messageID str
response.EmojiReactions = []*EmojiReaction{emojiR} response.EmojiReactions = []*EmojiReaction{emojiR}
response.Chats = []*Chat{chat} response.Chats = []*Chat{chat}
// TODO emoji reaction persistence err = m.persistence.SaveEmojiReaction(emojiR)
if err != nil {
return nil, err
}
return &response, nil return &response, nil
} }
func (m *Messenger) SendEmojiReactionRetraction(ctx context.Context, EmojiReactionID string) (*MessengerResponse, error) { func (m *Messenger) SendEmojiReactionRetraction(ctx context.Context, EmojiReactionID string) (*MessengerResponse, error) {
// TODO // TODO
// TODO check that the sender is the key owner
return nil, nil return nil, nil
} }