package storage import ( "database/sql" "synlotto-website/internal/models" ) func GetMessageCount(db *sql.DB, userID int) (int, error) { var count int err := db.QueryRow(` SELECT COUNT(*) FROM users_messages WHERE recipientId = ? AND is_read = FALSE AND is_archived = FALSE `, userID).Scan(&count) return count, err } func GetRecentMessages(db *sql.DB, userID int, limit int) []models.Message { rows, err := db.Query(` SELECT id, senderId, recipientId, subject, message, is_read, created_at FROM users_messages WHERE recipientId = ? AND is_archived = FALSE ORDER BY created_at DESC LIMIT ? `, userID, limit) if err != nil { return nil } defer rows.Close() var messages []models.Message for rows.Next() { var m models.Message err := rows.Scan( &m.ID, &m.SenderId, &m.RecipientId, &m.Subject, &m.Message, &m.IsRead, &m.CreatedAt, ) if err == nil { messages = append(messages, m) } } return messages } func GetMessageByID(db *sql.DB, userID, messageID int) (*models.Message, error) { row := db.QueryRow(` SELECT id, senderId, recipientId, subject, message, is_read, created_at FROM users_messages WHERE id = ? AND recipientId = ? `, messageID, userID) var m models.Message err := row.Scan(&m.ID, &m.SenderId, &m.RecipientId, &m.Subject, &m.Message, &m.IsRead, &m.CreatedAt) if err != nil { return nil, err } return &m, nil } func GetArchivedMessages(db *sql.DB, userID int, page, perPage int) []models.Message { offset := (page - 1) * perPage rows, err := db.Query(` SELECT id, senderId, recipientId, subject, message, is_read, created_at, archived_at FROM users_messages WHERE recipientId = ? AND is_archived = TRUE ORDER BY archived_at DESC LIMIT ? OFFSET ? `, userID, perPage, offset) if err != nil { return nil } defer rows.Close() var messages []models.Message for rows.Next() { var m models.Message err := rows.Scan( &m.ID, &m.SenderId, &m.RecipientId, &m.Subject, &m.Message, &m.IsRead, &m.CreatedAt, &m.ArchivedAt, ) if err == nil { messages = append(messages, m) } } return messages } func GetInboxMessages(db *sql.DB, userID int, page, perPage int) []models.Message { offset := (page - 1) * perPage rows, err := db.Query(` SELECT id, senderId, recipientId, subject, message, is_read, created_at FROM users_messages WHERE recipientId = ? AND is_archived = FALSE ORDER BY created_at DESC LIMIT ? OFFSET ? `, userID, perPage, offset) if err != nil { return nil } defer rows.Close() var messages []models.Message for rows.Next() { var m models.Message err := rows.Scan( &m.ID, &m.SenderId, &m.RecipientId, &m.Subject, &m.Message, &m.IsRead, &m.CreatedAt, ) if err == nil { messages = append(messages, m) } } return messages } func GetInboxMessageCount(db *sql.DB, userID int) int { var count int err := db.QueryRow(` SELECT COUNT(*) FROM users_messages WHERE recipientId = ? AND is_archived = FALSE `, userID).Scan(&count) if err != nil { return 0 } return count }