package storage //ToDo: should be using my own logging wrapper? import ( "database/sql" "log" "synlotto-website/internal/models" ) func GetNotificationByID(db *sql.DB, userID, notificationID int) (*models.Notification, error) { row := db.QueryRow(` SELECT id, user_id, subject, body, is_read FROM users_notification WHERE id = ? AND user_id = ? `, notificationID, userID) var n models.Notification err := row.Scan(&n.ID, &n.UserId, &n.Subject, &n.Body, &n.IsRead) if err != nil { return nil, err } return &n, nil } 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.Subject, &n.Body, &n.IsRead, &n.CreatedAt); err == nil { notifications = append(notifications, n) } } return notifications }