Feature: complete message inbox, view, and topbar integration

Added users_messages schema with correct field naming (senderId, recipientId)

Implemented message count and recent message fetch via storage.GetMessageCount and GetRecentMessages

Fixed field mismatches in SQL queries (recipientId vs recipient_id)

Displayed unread message badge in topbar with truncation for body preview

Linked messages in dropdown to full view (/account/messages/read?id=...)

Added fallback handling for unauthorized/invalid message access

Cleaned up BuildTemplateData to support full message context

Ensured CSRF/session/user context remains intact throughout
This commit is contained in:
2025-04-02 13:41:51 +01:00
parent b630296b8c
commit 2fd053777d
4 changed files with 110 additions and 118 deletions

View File

@@ -9,17 +9,17 @@ import (
func GetMessageCount(db *sql.DB, userID int) (int, error) {
var count int
err := db.QueryRow(`
SELECT COUNT(*) FROM user_messages
WHERE recipient_id = ? AND is_read = FALSE
SELECT COUNT(*) FROM users_messages
WHERE recipientId = ? AND is_read = FALSE
`, userID).Scan(&count)
return count, err
}
func GetRecentMessages(db *sql.DB, userID int, limit int) []models.Message {
rows, err := db.Query(`
SELECT id, sender_id, recipient_id, subject, body, is_read, created_at
FROM user_messages
WHERE recipient_id = ?
SELECT id, senderId, recipientId, subject, message, is_read, created_at
FROM users_messages
WHERE recipientId = ?
ORDER BY created_at DESC
LIMIT ?
`, userID, limit)
@@ -49,9 +49,9 @@ func GetRecentMessages(db *sql.DB, userID int, limit int) []models.Message {
func GetMessageByID(db *sql.DB, userID, messageID int) (*models.Message, error) {
row := db.QueryRow(`
SELECT id, sender_id, recipient_id, subject, body, is_read, created_at
FROM user_messages
WHERE id = ? AND recipient_id = ?
SELECT id, senderId, recipientId, subject, message, is_read, created_at
FROM users_messages
WHERE id = ? AND recipientId = ?
`, messageID, userID)
var m models.Message
@@ -64,9 +64,9 @@ func GetMessageByID(db *sql.DB, userID, messageID int) (*models.Message, error)
func MarkMessageAsRead(db *sql.DB, messageID, userID int) error {
result, err := db.Exec(`
UPDATE user_messages
UPDATE users_messages
SET is_read = TRUE
WHERE id = ? AND recipient_id = ?
WHERE id = ? AND recipientId = ?
`, messageID, userID)
if err != nil {
return err

View File

@@ -119,7 +119,6 @@ CREATE TABLE IF NOT EXISTS users_messages (
subject TEXT NOT NULL,
message TEXT,
is_read BOOLEAN DEFAULT FALSE,
type VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);`