Augment post details with recipient information

This commit is contained in:
Abhishek Pandey 2024-01-12 11:42:09 -08:00
parent 7f0b5ebf34
commit 7b193a06a0
3 changed files with 27 additions and 6 deletions

View File

@ -19,15 +19,19 @@ var _ backupHandler[models.Conversationable, models.Postable] = &conversationsBa
type conversationsBackupHandler struct {
ac api.Conversations
protectedResource string
// SMTP address for the group
resourceEmail string
}
func NewConversationBackupHandler(
protectedResource string,
ac api.Conversations,
email string,
) conversationsBackupHandler {
return conversationsBackupHandler{
ac: ac,
protectedResource: protectedResource,
resourceEmail: email,
}
}
@ -134,6 +138,13 @@ func (bh conversationsBackupHandler) augmentItemInfo(
dgi *details.GroupsInfo,
c models.Conversationable,
) {
// Posts are always sent to the group email address, along with additional
// recipients if any. Currently, we don't have a way to get the unique
// recipient list for individual posts due to graph api limitations.
//
// Store the group mail address so that we can use it to populate the 'To'
// field during Post -> EML exports.
dgi.Post.Recipients = []string{bh.resourceEmail}
dgi.Post.Topic = ptr.Val(c.GetTopic())
}

View File

@ -3,6 +3,7 @@ package groups
import (
"context"
"fmt"
"strings"
"github.com/alcionai/clues"
"github.com/kopia/kopia/repo/manifest"
@ -319,10 +320,18 @@ func backupConversations(
counter *count.Bus,
errs *fault.Bus,
) ([]data.BackupCollection, error) {
groupEmail := strings.Clone(ptr.Val(bc.group.GetMail()))
// This is unlikely, but if it does happen in the wild, we should investigate it.
if len(groupEmail) == 0 {
return nil, clues.New("group has no mail address")
}
var (
bh = groups.NewConversationBackupHandler(
bc.producerConfig.ProtectedResource.ID(),
bc.apiCli.Conversations())
bc.apiCli.Conversations(),
groupEmail,
)
colls []data.BackupCollection
)

View File

@ -61,11 +61,12 @@ type GroupsInfo struct {
}
type ConversationPostInfo struct {
CreatedAt time.Time `json:"createdAt,omitempty"`
Creator string `json:"creator,omitempty"`
Preview string `json:"preview,omitempty"`
Size int64 `json:"size,omitempty"`
Topic string `json:"topic,omitempty"`
CreatedAt time.Time `json:"createdAt,omitempty"`
Creator string `json:"creator,omitempty"`
Preview string `json:"preview,omitempty"`
Recipients []string `json:"recipients,omitempty"`
Size int64 `json:"size,omitempty"`
Topic string `json:"topic,omitempty"`
}
type ChannelMessageInfo struct {