From 2fd053777da083464af10e2ea364b84bb8a94c3c Mon Sep 17 00:00:00 2001 From: H3ALY Date: Wed, 2 Apr 2025 13:41:51 +0100 Subject: [PATCH] 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 --- storage/messages.go | 20 +-- storage/schema.go | 1 - templates/account/messages/read.html | 2 +- templates/topbar.html | 205 +++++++++++++-------------- 4 files changed, 110 insertions(+), 118 deletions(-) diff --git a/storage/messages.go b/storage/messages.go index 5168065..4d4e64c 100644 --- a/storage/messages.go +++ b/storage/messages.go @@ -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 diff --git a/storage/schema.go b/storage/schema.go index 993f137..7aa35e7 100644 --- a/storage/schema.go +++ b/storage/schema.go @@ -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 );` diff --git a/templates/account/messages/read.html b/templates/account/messages/read.html index 8d92980..6a82f12 100644 --- a/templates/account/messages/read.html +++ b/templates/account/messages/read.html @@ -4,7 +4,7 @@

{{ .Message.Subject }}

Received: {{ .Message.CreatedAt.Format "02 Jan 2006 15:04" }}


-

{{ .Message.Body }}

+

{{ .Message.Message }}

Back to Inbox {{ else }}
diff --git a/templates/topbar.html b/templates/topbar.html index 5921a9c..4cfbe3c 100644 --- a/templates/topbar.html +++ b/templates/topbar.html @@ -6,121 +6,114 @@
{{ if .User }} - {{ if .IsAdmin }} - - - {{ end }} - - + + + + + + Hello, {{ .User.Username }} + Logout {{ else }} - Login + Login {{ end }}
- -{{ end }} \ No newline at end of file +{{ end }}