diff --git a/internal/admin/addCard.go b/internal/admin/addCard.go index e755f60..ecaf2ce 100644 --- a/internal/admin/addCard.go +++ b/internal/admin/addCard.go @@ -8,17 +8,12 @@ import ( "strconv" "strings" "time" + structMessage "unicard-go/internal/pkg" ) -// We use this struct to pass data to the HTML template for the Add Cards page -type AddCardsData struct { - Error string - Success string -} - // This struct represents a card and its attributes. -// We can use it to easily pass card data around in our functions. -// It also helps to keep our code organized and makes it easier to manage card-related data. +// We can use it to easily pass card data around in our functions. +// It also helps to keep our code organized and makes it easier to manage card-related data. type Card struct { CardUID string CardNumber string @@ -34,7 +29,7 @@ type Card struct { func (h *Handler) AddCardsView(w http.ResponseWriter, r *http.Request) { fmt.Println("AddCardsView running...") // Render the addCards.html template - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{}) } // This function handles the form submission from the addCards.html page. @@ -44,7 +39,7 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { fmt.Println("addcardshandler running...") if err := r.ParseForm(); err != nil { - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Failed to parse form"}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Failed to parse form"}) return } @@ -54,7 +49,7 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { // Validate required fields if cardUID == "" || initialAmount == "" { - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Please fill in all required fields."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Please fill in all required fields."}) return } @@ -76,7 +71,7 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { amount, err := strconv.ParseFloat(initialAmount, 64) if err != nil { fmt.Printf("Error parsing amount: %v\n", err) - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Invalid amount format. Must be a number."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Invalid amount format. Must be a number."}) return } fmt.Printf("Parsed amount: %.2f\n", amount) @@ -86,12 +81,12 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { cardUidExist, err := h.cardUIDExist(cardUID) if err != nil { fmt.Println("Error checking card UID existence:", err) - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Error checking card UID."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Error checking card UID."}) return } if cardUidExist { fmt.Println("Card UID already exists") - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Card UID already exists."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Card UID already exists."}) return } fmt.Println("Card UID is unique") @@ -110,12 +105,12 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { cardNumExists, err := h.cardNumberExist(card) if err != nil { fmt.Println("Error checking card number existence:", err) - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Error checking card number."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Error checking card number."}) return } if cardNumExists { fmt.Println("Card number already exists") - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Card number already exists."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Card number already exists."}) return } fmt.Println("Card number is unique") @@ -139,13 +134,13 @@ func (h *Handler) AddCardHandler(w http.ResponseWriter, r *http.Request) { createdAt) if err != nil { fmt.Println("Error inserting card into database:", err) - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Error: "Error while adding card."}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Error: "Error while adding card."}) return } // Successfully added the card fmt.Printf("Card added successfully: %s\n", card.CardNumber) - h.Tpl.ExecuteTemplate(w, "addCards.html", AddCardsData{Success: "Card added successfully!"}) + h.Tpl.ExecuteTemplate(w, "addCards.html", structMessage.MessageData{Success: "Card added successfully!"}) } //--- HELPER FUNCTIONS --- diff --git a/internal/admin/deactivateCard.go b/internal/admin/deactivateCard.go index 3aa6760..5fcefb0 100644 --- a/internal/admin/deactivateCard.go +++ b/internal/admin/deactivateCard.go @@ -4,15 +4,9 @@ import ( "fmt" "net/http" "strings" + structMessage "unicard-go/internal/pkg" ) -// This struct is used to pass data to the HTML template for the Deactivate Card page. -// It allows us to easily display error or success messages when we process the form submission for deactivating a card. -type CardData struct { - Error string - Success string -} - // This struct represents the details of a card that we want to deactivate. // We can use it to easily pass card data around in our functions. // It also helps to keep our code organized and makes it easier to manage card-related data when we process the deactivation form submission. @@ -23,11 +17,11 @@ type CardDetails struct { // This function renders the deactivateCard.html template when the admin visits the /admin/deactivatecard page. // It doesn't do any processing yet, it just shows the form to the admin. -// We can also pass an empty CardData struct to the template, which allows us to easily display error or success messages later on when we process the form submission. +// We can also pass an empty structMessage.MessageData struct to the template, which allows us to easily display error or success messages later on when we process the form submission. func (h *Handler) DeactivateView(w http.ResponseWriter, r *http.Request) { fmt.Println("DeactivateView running...") // Render the deactivateCard.html template - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{}) } // This function handles the form submission from the deactivateCard.html page. @@ -35,7 +29,7 @@ func (h *Handler) DeactivateCardHanlder(w http.ResponseWriter, r *http.Request) fmt.Println("Deactivate card handler running...") if err := r.ParseForm(); err != nil { - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{Error: "Failed to parse form"}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{Error: "Failed to parse form"}) return } @@ -45,7 +39,7 @@ func (h *Handler) DeactivateCardHanlder(w http.ResponseWriter, r *http.Request) if cardNumber == "" || cardHolder == "" || cardType == "" { fmt.Println("Missing required fields:", cardNumber, cardHolder, cardType) - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{Error: "Please fill in all required fields."}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{Error: "Please fill in all required fields."}) return } @@ -53,18 +47,18 @@ func (h *Handler) DeactivateCardHanlder(w http.ResponseWriter, r *http.Request) ok, err := h.deactivateCardIfActive(cardNumber, cardHolder, cardType) if err != nil { fmt.Println("Error while deactivating card:", err) - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{Error: "Failed to deactivate card."}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{Error: "Failed to deactivate card."}) return } if !ok { fmt.Printf("Card not found or already inactive: %s with Card Type: %s\n", cardNumber, cardType) - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{Error: "Card not found or already inactive."}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{Error: "Card not found or already inactive."}) return } fmt.Println("Card deactivated successfully:", cardNumber, cardType) - h.Tpl.ExecuteTemplate(w, "deactivateCard.html", CardData{Success: "Card deactivated successfully!"}) + h.Tpl.ExecuteTemplate(w, "deactivateCard.html", structMessage.MessageData{Success: "Card deactivated successfully!"}) } // --- Helper functions --- diff --git a/internal/auth/forgotPassword.go b/internal/auth/forgotPassword.go index 39b4b39..2a38866 100644 --- a/internal/auth/forgotPassword.go +++ b/internal/auth/forgotPassword.go @@ -4,6 +4,7 @@ import ( "database/sql" "fmt" "net/http" + structMessage "unicard-go/internal/pkg" "unicard-go/internal/pkg/account" ) @@ -32,11 +33,11 @@ func (h *Handler) ForgotPassword(w http.ResponseWriter, r *http.Request) { exists, err := h.checkEmailExist(email) if err != nil { fmt.Println("Error checking email existence:", err) - h.Tpl.ExecuteTemplate(w, "forgotPassword.html", ErrorMessage{Error: "System error. Please try again later."}) + h.Tpl.ExecuteTemplate(w, "forgotPassword.html", structMessage.MessageData{Error: "System error. Please try again later."}) return } if !exists { - h.Tpl.ExecuteTemplate(w, "forgotPassword.html", ErrorMessage{Error: "Email not found."}) + h.Tpl.ExecuteTemplate(w, "forgotPassword.html", structMessage.MessageData{Error: "Email not found."}) return } @@ -44,7 +45,7 @@ func (h *Handler) ForgotPassword(w http.ResponseWriter, r *http.Request) { hashedPassword, err := account.HashPassword(password) if err != nil { fmt.Println("Error hashing password:", err) - h.Tpl.ExecuteTemplate(w, "forgotPassword.html", ErrorMessage{Error: "System error. Please try again later."}) + h.Tpl.ExecuteTemplate(w, "forgotPassword.html", structMessage.MessageData{Error: "System error. Please try again later."}) return } @@ -52,10 +53,10 @@ func (h *Handler) ForgotPassword(w http.ResponseWriter, r *http.Request) { err = h.updatePassword(email, hashedPassword) if err != nil { fmt.Println("Error updating password:", err) - h.Tpl.ExecuteTemplate(w, "forgotPassword.html", ErrorMessage{Error: "System error. Please try again later."}) + h.Tpl.ExecuteTemplate(w, "forgotPassword.html", structMessage.MessageData{Error: "System error. Please try again later."}) return } - h.Tpl.ExecuteTemplate(w, "forgotPassword.html", ErrorMessage{Success: "Password updated successfully."}) + h.Tpl.ExecuteTemplate(w, "forgotPassword.html", structMessage.MessageData{Success: "Password updated successfully."}) } // ---Helper Function--- diff --git a/internal/auth/login.go b/internal/auth/login.go index 478b173..1c80fee 100644 --- a/internal/auth/login.go +++ b/internal/auth/login.go @@ -3,15 +3,11 @@ package authentication import ( "fmt" "net/http" + structMessage "unicard-go/internal/pkg" "golang.org/x/crypto/bcrypt" ) -// We use this struct to pass data to the HTML -type LoginData struct { - Error string -} - // View Handler (GET) // This function checks the URL for errors (e.g., ?error=invalid) // and displays the red text if needed. @@ -31,7 +27,7 @@ func (h *Handler) LoginView(w http.ResponseWriter, r *http.Request) { } // Render the template with the message - h.Tpl.ExecuteTemplate(w, "login.html", LoginData{Error: msg}) + h.Tpl.ExecuteTemplate(w, "login.html", structMessage.MessageData{Error: msg}) } // Auth Handler (POST) diff --git a/internal/auth/signup.go b/internal/auth/signup.go index 173c7f8..2c3a153 100644 --- a/internal/auth/signup.go +++ b/internal/auth/signup.go @@ -8,15 +8,10 @@ import ( "net/http" "strings" "time" + structMessage "unicard-go/internal/pkg" "unicard-go/internal/pkg/account" ) -// Struct to handle error message display in signup template -type ErrorMessage struct { - Error string - Success string -} - // User struct to hold signup data type User struct { UserID string @@ -77,7 +72,7 @@ func (h *Handler) SignupView(w http.ResponseWriter, r *http.Request) { msg = "System error activating card. Please contact support." } // Render the signup template with error message - h.Tpl.ExecuteTemplate(w, "signup.html", ErrorMessage{Error: msg}) + h.Tpl.ExecuteTemplate(w, "signup.html", structMessage.MessageData{Error: msg}) } // This function processes the signup form submission. @@ -186,7 +181,7 @@ func (h *Handler) SignupHandler(w http.ResponseWriter, r *http.Request) { if exists, _ := account.IsEmailExist(h.DB, user.Email); exists { fmt.Printf("Validation Failed: Email %s already exists.\n", user.Email) http.Redirect(w, r, "/signup?error=email", http.StatusSeeOther) - //h.Tpl.ExecuteTemplate(w, "signup.html", ErrorMessage{Error: "Email already registered."}) + //h.Tpl.ExecuteTemplate(w, "signup.html", structMessage.MessageData{Error: "Email already registered."}) return } fmt.Printf("Email %s is available.\n", user.Email) diff --git a/internal/pkg/structMessage.go b/internal/pkg/structMessage.go new file mode 100644 index 0000000..3952e4c --- /dev/null +++ b/internal/pkg/structMessage.go @@ -0,0 +1,8 @@ +package structMessage + +// This file defines the data structures used to pass information +// between the Go code and the HTML templates for the account-related pages. +type MessageData struct { + Error string + Success string +} diff --git a/templates/addCards.html b/templates/addCards.html index 13d2ed1..a3f301e 100644 --- a/templates/addCards.html +++ b/templates/addCards.html @@ -1,18 +1,20 @@ + Add Card +

Add Card

{{if .Error}} -
{{.Error}}
+
{{.Error}}
{{end}} {{if .Success}} -
{{.Success}}
+
{{.Success}}
{{end}}
@@ -24,7 +26,8 @@

Add Card

-

The following fields will be auto-generated:

+

The following fields will be + auto-generated:

Auto-generated (16-digit)

@@ -38,7 +41,10 @@

Add Card

Auto-calculated (10 years from today)

+ +
+ \ No newline at end of file