From 57cf8e7a3f26260450af58404f8a8379f7bf1a04 Mon Sep 17 00:00:00 2001
From: Ophestra Umiker <cat@ophivana.moe>
Date: Wed, 16 Oct 2024 21:44:10 +0900
Subject: [PATCH] feat(api)!: create API return structs using newMessage

This also returns a success state making it easier for clients to understand the API response.

Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
---
 register.go | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/register.go b/register.go
index 02b4f60..acf1525 100644
--- a/register.go
+++ b/register.go
@@ -22,11 +22,9 @@ func routeRegister(app *fiber.App, db *leveldb.DB, captcha fiber.Handler) {
 		// Parse and validate the request
 		if err := c.Bind().Body(req); err != nil {
 			if verbose {
-				log.Printf("invalid request from %q: %v", c.IP(), err)
+				log.Printf("invalid json from %q: %v", c.IP(), err)
 			}
-			return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
-				"message": "Invalid request",
-			})
+			return c.Status(fiber.StatusBadRequest).JSON(newMessage(false, "Invalid request"))
 		}
 
 		// Validate email format
@@ -34,37 +32,27 @@ func routeRegister(app *fiber.App, db *leveldb.DB, captcha fiber.Handler) {
 			if verbose {
 				log.Printf("invalid email from %q: %s", c.IP(), req.Email)
 			}
-			return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
-				"message": "Invalid email format",
-			})
+			return c.Status(fiber.StatusBadRequest).JSON(newMessage(false, "Invalid email address"))
 		}
 
 		// Check if email is already registered
 		if ok, err := db.Has([]byte(req.Email), nil); err != nil {
 			log.Printf("cannot check for existence of email %q: %v", req.Email, err)
-			return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
-				"message": "Error checking registration status",
-			})
+			return c.Status(fiber.StatusInternalServerError).JSON(newMessage(false, "Cannot check registration status"))
 		} else if ok {
 			if verbose {
 				log.Printf("duplicate email from %q: %s", c.IP(), req.Email)
 			}
-			return c.Status(fiber.StatusConflict).JSON(fiber.Map{
-				"message": "Email already registered",
-			})
+			return c.Status(fiber.StatusConflict).JSON(newMessage(false, "Email already registered"))
 		}
 
 		// Save the email to the waitlist
 		if err := db.Put([]byte(req.Email), []byte{'x'}, nil); err != nil {
 			log.Printf("cannot register email %q: %v", req.Email, err)
-			return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
-				"message": "Error registering email",
-			})
+			return c.Status(fiber.StatusInternalServerError).JSON(newMessage(false, "Cannot register email"))
 		}
 
 		log.Printf("registered email %q", req.Email)
-		return c.JSON(fiber.Map{
-			"message": "Email registered successfully",
-		})
+		return c.JSON(newMessage(true, "Email registered successfully"))
 	}, captcha)
 }
-- 
GitLab