add user role

This commit is contained in:
Aditya Siregar
2025-09-08 15:21:17 +07:00
parent 2319019eb2
commit d869d83d4b
14 changed files with 162 additions and 56 deletions
+1 -7
View File
@@ -91,7 +91,6 @@ func (r *LetterIncomingRepository) List(ctx context.Context, filter ListIncoming
needsGroupBy = true
}
// Apply is_read filter if UserID is provided
if filter.UserID != nil && filter.IsRead != nil {
if !joinedRecipients {
query = query.Joins("JOIN letter_incoming_recipients ON letter_incoming_recipients.letter_id = letters_incoming.id")
@@ -107,25 +106,20 @@ func (r *LetterIncomingRepository) List(ctx context.Context, filter ListIncoming
}
}
// Apply is_dispositioned filter if DepartmentID is provided
if filter.DepartmentID != nil && filter.IsDispositioned != nil {
query = query.Joins("LEFT JOIN letter_incoming_dispositions_department lidd ON lidd.letter_incoming_id = letters_incoming.id AND lidd.department_id = ?", *filter.DepartmentID)
if *filter.IsDispositioned {
// Has been dispositioned (status is not 'pending' or record exists with non-pending status)
query = query.Where("lidd.id IS NOT NULL AND lidd.status != 'pending'")
} else {
// Not yet dispositioned (no record or status is 'pending')
query = query.Where("lidd.id IS NULL OR lidd.status = 'pending'")
}
}
// Apply priority filter
if len(filter.PriorityIDs) > 0 {
query = query.Where("letters_incoming.priority_id IN ?", filter.PriorityIDs)
}
// Apply is_archived filter based on recipient's is_archived field
if filter.IsArchived != nil {
if *filter.IsArchived {
query = query.Where("letter_incoming_recipients.is_archived = ?", true)
@@ -137,12 +131,12 @@ func (r *LetterIncomingRepository) List(ctx context.Context, filter ListIncoming
if filter.Status != nil {
query = query.Where("letters_incoming.status = ?", *filter.Status)
}
if filter.Query != nil {
q := "%" + *filter.Query + "%"
query = query.Where("letters_incoming.subject ILIKE ? OR letters_incoming.reference_number ILIKE ?", q, q)
}
// Use GROUP BY instead of DISTINCT to handle joins properly
if needsGroupBy {
query = query.Group("letters_incoming.id")
}