send notification to createor letter

This commit is contained in:
efrilm 2025-09-21 12:24:21 +07:00
parent cf6708899d
commit 048ff264ce

View File

@ -3,6 +3,7 @@ package service
import ( import (
"context" "context"
"fmt" "fmt"
"log"
"time" "time"
"eslogad-be/internal/appcontext" "eslogad-be/internal/appcontext"
@ -448,6 +449,7 @@ func (s *LetterServiceImpl) SoftDeleteIncomingLetter(ctx context.Context, id uui
} }
func (s *LetterServiceImpl) CreateDispositions(ctx context.Context, req *contract.CreateLetterDispositionRequest) (*contract.ListDispositionsResponse, error) { func (s *LetterServiceImpl) CreateDispositions(ctx context.Context, req *contract.CreateLetterDispositionRequest) (*contract.ListDispositionsResponse, error) {
log.Printf("[DEBUG] CreateDispositions START - LetterID: %s\n", req.LetterID.String())
userID := appcontext.FromGinContext(ctx).UserID userID := appcontext.FromGinContext(ctx).UserID
req.CreatedBy = userID req.CreatedBy = userID
@ -486,8 +488,14 @@ func (s *LetterServiceImpl) CreateDispositions(ctx context.Context, req *contrac
} }
// Send notifications to newly created recipients asynchronously // Send notifications to newly created recipients asynchronously
if s.notificationProcessor != nil && len(recipients) > 0 { if s.notificationProcessor != nil {
go s.sendDispositionNotifications(context.Background(), req.LetterID, recipients) // Send notifications to newly created recipients
if len(recipients) > 0 {
go s.sendDispositionNotifications(context.Background(), req.LetterID, recipients)
}
// Send notification to letter creator about new disposition
go s.sendDispositionCreatorNotification(context.Background(), req.LetterID, userID)
} }
return result, nil return result, nil
@ -658,4 +666,45 @@ func (s *LetterServiceImpl) extractUserIDsFromMentions(mentions map[string]inter
} }
return userIDs return userIDs
}
func (s *LetterServiceImpl) sendDispositionCreatorNotification(ctx context.Context, letterID uuid.UUID, dispositionCreatorID uuid.UUID) {
// Get letter details
letter, err := s.processor.GetIncomingLetterByID(ctx, letterID)
if err != nil {
return
}
fmt.Printf("[DEBUG] Starting sendDispositionCreatorNotification for letterID: %s\n", letterID.String())
fmt.Printf("[DEBUG] Successfully retrieved letter: %s\n", letter.Subject)
fmt.Printf("[DEBUG] Successfully retrieved letter: %s\n", letter.CreatedBy)
letterCreatorID := letter.CreatedBy
// Don't send notification if the disposition creator is the same as letter creator
if letterCreatorID == dispositionCreatorID {
return
}
// Get disposition creator name from context
appContext := appcontext.FromGinContext(ctx)
dispositionCreatorName := appContext.UserName
subject := "Disposisi Baru pada Surat Anda"
message := fmt.Sprintf("Surat yang Anda buat telah didisposisikan oleh %s: %s",
dispositionCreatorName, letter.Subject)
err = s.notificationProcessor.SendIncomingLetterNotification(
ctx,
letterID,
letterCreatorID,
subject,
message)
if err != nil {
// Log error but don't fail the operation
// You might want to add proper logging here
}
} }