fix unread count

This commit is contained in:
efrilm 2025-10-19 23:18:27 +07:00
parent c07d3dfefb
commit 7463a86299
2 changed files with 34 additions and 8 deletions

View File

@ -420,10 +420,23 @@ func (r *LetterOutgoingRecipientRepository) CreateBulk(ctx context.Context, list
func (r *LetterOutgoingRecipientRepository) CountUnreadByUser(ctx context.Context, userID uuid.UUID) (int, error) {
db := DBFromContext(ctx, r.db)
var count int64
if err := db.WithContext(ctx).
Model(&entities.LetterOutgoingRecipient{}).
Where("user_id = ? AND read_at IS NULL", userID).
Count(&count).Error; err != nil {
sql := `
SELECT COUNT(*) FROM (
SELECT * FROM letter_outgoing_recipients
WHERE user_id = ? AND read_at IS NULL
AND 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 user_id = ?
) ranked
WHERE rn = 1
)
) result
`
if err := db.WithContext(ctx).Raw(sql, userID, userID).Scan(&count).Error; err != nil {
return 0, err
}
return int(count), nil

View File

@ -865,10 +865,23 @@ func (r *LetterIncomingRecipientRepository) CountReadByLetter(ctx context.Contex
func (r *LetterIncomingRecipientRepository) CountUnreadByUser(ctx context.Context, userID uuid.UUID) (int, error) {
db := DBFromContext(ctx, r.db)
var count int64
if err := db.WithContext(ctx).
Model(&entities.LetterIncomingRecipient{}).
Where("recipient_user_id = ? AND read_at IS NULL", userID).
Count(&count).Error; err != nil {
sql := `
SELECT COUNT(*) FROM (
SELECT * FROM letter_incoming_recipients
WHERE recipient_user_id = ? AND read_at IS NULL
AND 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 recipient_user_id = ?
) ranked
WHERE rn = 1
)
) result
`
if err := db.WithContext(ctx).Raw(sql, userID, userID).Scan(&count).Error; err != nil {
return 0, err
}
return int(count), nil