package storage import ( "database/sql" "fmt" "log" "synlotto-website/models" ) func GetNotificationCount(db *sql.DB, userID int) int { var count int err := db.QueryRow(` SELECT COUNT(*) FROM users_notification WHERE user_id = ? AND is_read = FALSE`, userID).Scan(&count) if err != nil { log.Println("⚠️ Failed to count notifications:", err) return 0 } return count } func GetRecentNotifications(db *sql.DB, userID int, limit int) []models.Notification { rows, err := db.Query(` SELECT id, subject, body, is_read, created_at FROM users_notification WHERE user_id = ? ORDER BY created_at DESC LIMIT ?`, userID, limit) if err != nil { log.Println("⚠️ Failed to get notifications:", err) return nil } defer rows.Close() var notifications []models.Notification for rows.Next() { var n models.Notification if err := rows.Scan(&n.ID, &n.Title, &n.Message, &n.IsRead, &n.CreatedAt); err == nil { notifications = append(notifications, n) } } return notifications } func MarkNotificationAsRead(db *sql.DB, userID int, notificationID int) error { result, err := db.Exec(` UPDATE notifications SET is_read = TRUE WHERE id = ? AND user_id = ? `, notificationID, userID) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return fmt.Errorf("no matching notification found or not owned by user") } return nil }