fix count letter

This commit is contained in:
efrilm 2025-11-16 19:43:10 +07:00
parent 67b37a9c1e
commit 5bb5287be3
2 changed files with 22 additions and 26 deletions

View File

@ -558,21 +558,19 @@ func (r *LetterOutgoingRecipientRepository) CountUnreadByUser(ctx context.Contex
var count int64 var count int64
sql := ` sql := `
SELECT COUNT(*) FROM ( WITH valid_recipients AS (
SELECT * FROM letter_outgoing_recipients SELECT lor.id, lor.letter_id, lor.read_at, lor.created_at,
WHERE user_id = ? AND read_at IS NULL ROW_NUMBER() OVER (PARTITION BY lor.letter_id ORDER BY lor.created_at DESC) as rn
AND id IN ( FROM letter_outgoing_recipients lor
SELECT id FROM ( INNER JOIN letters_outgoing l ON l.id = lor.letter_id AND l.deleted_at IS NULL
SELECT id, ROW_NUMBER() OVER (PARTITION BY letter_id ORDER BY created_at DESC) as rn WHERE lor.user_id = ?
FROM letter_outgoing_recipients
WHERE user_id = ?
) ranked
WHERE rn = 1
) )
) result SELECT COUNT(*)
FROM valid_recipients
WHERE rn = 1 AND read_at IS NULL
` `
if err := db.WithContext(ctx).Raw(sql, userID, userID).Scan(&count).Error; err != nil { if err := db.WithContext(ctx).Raw(sql, userID).Scan(&count).Error; err != nil {
return 0, err return 0, err
} }
return int(count), nil return int(count), nil

View File

@ -923,21 +923,19 @@ func (r *LetterIncomingRecipientRepository) CountUnreadByUser(ctx context.Contex
var count int64 var count int64
sql := ` sql := `
SELECT COUNT(*) FROM ( WITH valid_recipients AS (
SELECT * FROM letter_incoming_recipients SELECT lir.id, lir.letter_id, lir.read_at, lir.created_at,
WHERE recipient_user_id = ? AND read_at IS NULL ROW_NUMBER() OVER (PARTITION BY lir.letter_id ORDER BY lir.created_at DESC) as rn
AND id IN ( FROM letter_incoming_recipients lir
SELECT id FROM ( INNER JOIN letters_incoming l ON l.id = lir.letter_id AND l.deleted_at IS NULL
SELECT id, ROW_NUMBER() OVER (PARTITION BY letter_id ORDER BY created_at DESC) as rn WHERE lir.recipient_user_id = ?
FROM letter_incoming_recipients
WHERE recipient_user_id = ?
) ranked
WHERE rn = 1
) )
) result SELECT COUNT(*)
FROM valid_recipients
WHERE rn = 1 AND read_at IS NULL
` `
if err := db.WithContext(ctx).Raw(sql, userID, userID).Scan(&count).Error; err != nil { if err := db.WithContext(ctx).Raw(sql, userID).Scan(&count).Error; err != nil {
return 0, err return 0, err
} }
return int(count), nil return int(count), nil