diff --git a/internal/repository/letter_outgoing_repository.go b/internal/repository/letter_outgoing_repository.go index dacd487..cbe3941 100644 --- a/internal/repository/letter_outgoing_repository.go +++ b/internal/repository/letter_outgoing_repository.go @@ -540,8 +540,15 @@ func (r *LetterOutgoingRecipientRepository) GetByLetterIDsAndUser(ctx context.Co db := DBFromContext(ctx, r.db) var recipients []entities.LetterOutgoingRecipient + if err := db.WithContext(ctx). - Where("letter_id IN ? AND user_id = ?", letterIDs, userID). + Where(`id IN ( + SELECT id FROM ( + SELECT id, ROW_NUMBER() OVER (PARTITION BY letter_id ORDER BY created_at DESC) as rn + FROM letter_outgoing_recipients + WHERE letter_id IN ? AND user_id = ? + ) t WHERE rn = 1 + )`, letterIDs, userID). Find(&recipients).Error; err != nil { return nil, err } diff --git a/internal/repository/letter_repository.go b/internal/repository/letter_repository.go index 7d4da4b..d024ab1 100644 --- a/internal/repository/letter_repository.go +++ b/internal/repository/letter_repository.go @@ -890,8 +890,15 @@ func (r *LetterIncomingRecipientRepository) GetByLetterIDsAndUser(ctx context.Co db := DBFromContext(ctx, r.db) var recipients []entities.LetterIncomingRecipient + if err := db.WithContext(ctx). - Where("letter_id IN ? AND recipient_user_id = ?", letterIDs, userID). + Where(`id IN ( + SELECT id FROM ( + SELECT id, ROW_NUMBER() OVER (PARTITION BY letter_id ORDER BY created_at DESC) as rn + FROM letter_incoming_recipients + WHERE letter_id IN ? AND recipient_user_id = ? + ) t WHERE rn = 1 + )`, letterIDs, userID). Find(&recipients).Error; err != nil { return nil, err } diff --git a/internal/service/letter_service.go b/internal/service/letter_service.go index 5944645..db36276 100644 --- a/internal/service/letter_service.go +++ b/internal/service/letter_service.go @@ -431,7 +431,7 @@ func (s *LetterServiceImpl) ListIncomingLetters(ctx context.Context, req *contra isRead := false if recipient, exists := batchData.recipients[letter.ID]; exists && recipient != nil { isRead = recipient.ReadAt != nil - log.Printf("Recipient: %+v\n", recipient) + log.Printf("Recipient debug: %+v\n", recipient) } resp := transformer.LetterEntityToContract(&letter, attachments, dispositions, priority, institution)