Create slack message if necessary

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2025-12-22 11:09:51 +01:00
parent 1f4e2ab073
commit cf491a2096
2 changed files with 2 additions and 98 deletions

View File

@@ -364,8 +364,8 @@ func (s TrustCenterAccessService) Update(
}
if shouldUpdateSlackMessage {
if err := s.svc.SlackMessages.QueueSlackAccessMessageUpdate(ctx, access.Email, access.TrustCenterID); err != nil {
return nil, fmt.Errorf("cannot queue slack access message update: %w", err)
if err := s.svc.SlackMessages.QueueSlackNotification(ctx, access.Email, access.TrustCenterID); err != nil {
return nil, fmt.Errorf("cannot queue slack notification: %w", err)
}
}

View File

@@ -286,102 +286,6 @@ func (s *SlackMessageService) QueueSlackNotification(
})
}
func (s *SlackMessageService) QueueSlackAccessMessageUpdate(
ctx context.Context,
requesterEmail mail.Addr,
trustCenterID gid.GID,
) error {
return s.svc.pg.WithTx(ctx, func(tx pg.Conn) error {
var trustCenter coredata.TrustCenter
if err := trustCenter.LoadByID(ctx, tx, s.svc.scope, trustCenterID); err != nil {
return fmt.Errorf("cannot load trust center: %w", err)
}
var trustCenterAccess coredata.TrustCenterAccess
if err := trustCenterAccess.LoadByTrustCenterIDAndEmail(ctx, tx, s.svc.scope, trustCenterID, requesterEmail); err != nil {
return fmt.Errorf("cannot load trust center access: %w", err)
}
var existingMessage coredata.SlackMessage
err := existingMessage.LoadLatestByRequesterEmailAndType(
ctx,
tx,
s.svc.scope,
trustCenter.OrganizationID,
requesterEmail,
coredata.SlackMessageTypeTrustCenterAccessRequest,
time.Time{},
)
if err != nil {
var notFoundErr coredata.ErrSlackMessageNotFound
if errors.Is(err, notFoundErr) {
return nil
}
return fmt.Errorf("cannot load existing slack message: %w", err)
}
if existingMessage.MessageTS == nil || existingMessage.ChannelID == nil {
return nil
}
if existingMessage.ID != existingMessage.InitialSlackMessageID {
var originalMessage coredata.SlackMessage
if err := originalMessage.LoadById(ctx, tx, s.svc.scope, existingMessage.InitialSlackMessageID); err != nil {
return nil
}
existingMessage = originalMessage
}
documents, reports, files, err := s.loadDocumentsReportsAndFilesFromAccesses(ctx, tx, trustCenterAccess.ID)
if err != nil {
return fmt.Errorf("cannot load documents, reports and files: %w", err)
}
newSlackMessageID := gid.New(s.svc.scope.GetTenantID(), coredata.SlackMessageEntityType)
updatedBody, err := s.buildAccessRequestMessage(
newSlackMessageID,
trustCenterAccess.Name,
requesterEmail,
trustCenter.OrganizationID,
documents,
reports,
files,
)
if err != nil {
return fmt.Errorf("cannot build access request message: %w", err)
}
metadata := SlackMessageMetadata{
Documents: documents,
Reports: reports,
Files: files,
}
now := time.Now()
newSlackMessage := &coredata.SlackMessage{
ID: newSlackMessageID,
OrganizationID: existingMessage.OrganizationID,
Type: existingMessage.Type,
Body: updatedBody,
MessageTS: existingMessage.MessageTS,
ChannelID: existingMessage.ChannelID,
RequesterEmail: existingMessage.RequesterEmail,
Metadata: metadata.toMap(),
InitialSlackMessageID: existingMessage.InitialSlackMessageID,
CreatedAt: now,
UpdatedAt: now,
SentAt: nil,
}
if err := newSlackMessage.Insert(ctx, tx, s.svc.scope); err != nil {
return fmt.Errorf("cannot insert slack message: %w", err)
}
return nil
})
}
func (s *SlackMessageService) loadDocumentsReportsAndFilesFromAccesses(
ctx context.Context,
conn pg.Conn,