outgoing letter is read

This commit is contained in:
efrilm
2025-10-08 11:52:11 +07:00
parent d8942fa918
commit e7455f107a
5 changed files with 80 additions and 4 deletions
@@ -2,6 +2,7 @@ package repository
import (
"context"
"fmt"
"time"
"eslogad-be/internal/entities"
@@ -93,6 +94,7 @@ type ListOutgoingLettersFilter struct {
SortBy *string
SortOrder *string
IsArchived *bool
IsRead *bool
}
func (r *LetterOutgoingRepository) List(ctx context.Context, filter ListOutgoingLettersFilter, limit, offset int) ([]entities.LetterOutgoing, int64, error) {
@@ -120,10 +122,25 @@ func (r *LetterOutgoingRepository) List(ctx context.Context, filter ListOutgoing
}
// Filter by UserID through recipients
if filter.UserID != nil {
query = query.Joins("LEFT JOIN letter_outgoing_recipients ON letter_outgoing_recipients.letter_id = letters_outgoing.id").
Where("letter_outgoing_recipients.user_id = ?", *filter.UserID).
Distinct()
query = query.Joins("LEFT JOIN letter_outgoing_recipients ON letter_outgoing_recipients.letter_id = letters_outgoing.id")
query = query.Where("letter_outgoing_recipients.user_id = ?", *filter.UserID)
fmt.Printf("[DEBUG] filter.UserID: %v\n", filter.UserID)
fmt.Printf("[DEBUG] filter.isRead: %v\n", filter.IsRead)
// Tambahkan filter IsRead
if filter.IsRead != nil {
if *filter.IsRead {
query = query.Where("letter_outgoing_recipients.read_at IS NOT NULL")
} else {
query = query.Where("letter_outgoing_recipients.read_at IS NULL")
}
}
query = query.Distinct()
}
if filter.ReceiverInstitutionID != nil {
query = query.Where("receiver_institution_id = ?", *filter.ReceiverInstitutionID)
}
@@ -485,6 +502,27 @@ func (r *LetterOutgoingDiscussionRepository) ListByLetter(ctx context.Context, l
return list, nil
}
func (r *LetterOutgoingRecipientRepository) GetByLetterIDsAndUser(ctx context.Context, letterIDs []uuid.UUID, userID uuid.UUID) (map[uuid.UUID]*entities.LetterOutgoingRecipient, error) {
if len(letterIDs) == 0 {
return make(map[uuid.UUID]*entities.LetterOutgoingRecipient), nil
}
db := DBFromContext(ctx, r.db)
var recipients []entities.LetterOutgoingRecipient
if err := db.WithContext(ctx).
Where("letter_id IN ? AND user_id = ?", letterIDs, userID).
Find(&recipients).Error; err != nil {
return nil, err
}
result := make(map[uuid.UUID]*entities.LetterOutgoingRecipient)
for i := range recipients {
result[recipients[i].LetterID] = &recipients[i]
}
return result, nil
}
func (r *LetterOutgoingDiscussionRepository) Update(ctx context.Context, e *entities.LetterOutgoingDiscussion) error {
db := DBFromContext(ctx, r.db)
now := time.Now()