package repository import ( "gorm.io/gorm" "dating-app/internal/models" ) type ReportRepository struct { db *gorm.DB } func NewReportRepository(db *gorm.DB) *ReportRepository { return &ReportRepository{db: db} } func (r *ReportRepository) Create(report *models.Report) error { return r.db.Create(report).Error } func (r *ReportRepository) ListByUser(userID uint) ([]models.Report, error) { var reports []models.Report err := r.db.Where("user_id = ?", userID).Order("created_at desc").Find(&reports).Error return reports, err } // CountsByUserIDs تعداد گزارش‌های ثبت‌شده روی چند کاربر رو با هم، در یک // کوئری برمی‌گردونه (برای نشون دادن نشان تعداد گزارش روی لیست کاربران، بدون // یک کوئری جدا به‌ازای هر کاربر). func (r *ReportRepository) CountsByUserIDs(userIDs []uint) (map[uint]int64, error) { result := make(map[uint]int64, len(userIDs)) if len(userIDs) == 0 { return result, nil } type row struct { UserID uint Count int64 } var rows []row err := r.db.Model(&models.Report{}). Select("user_id, count(*) as count"). Where("user_id IN ?", userIDs). Group("user_id"). Find(&rows).Error if err != nil { return nil, err } for _, rr := range rows { result[rr.UserID] = rr.Count } return result, nil }