From 6f608b757ce4ebedba5f74a7056399d66cd4af28 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 14 Nov 2025 17:35:57 +0000 Subject: [PATCH] tsk-14: Fix startup crash (#16) Closes #14 Reviewed-on: https://git.kundeng.us/phoenix/textsender-auth/pulls/16 Co-authored-by: phoenix Co-committed-by: phoenix --- cmd/api/main.go | 22 ++++++++----- cmd/api/main_test.go | 2 ++ go.mod | 2 +- go.sum | 4 +-- internal/handler/login.go | 8 ++--- internal/handler/mock_store.go | 6 ++-- internal/handler/register.go | 54 ++++++++++++++----------------- internal/handler/register_test.go | 10 ------ 8 files changed, 48 insertions(+), 60 deletions(-) diff --git a/cmd/api/main.go b/cmd/api/main.go index a9612e4..e8888c5 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -37,18 +37,24 @@ func main() { ctx := context.Background() if cfg.ResetDB { - log.Println("Resetting database") if err := db.ResetDatabase(ctx); err != nil { log.Fatalf("Failed to reset database: %v", err) + } else { + log.Println("Resetting database") + log.Println("Database reset completed. Exiting.") } - log.Println("Database reset completed. Exiting.") return } else { - if exists, err := database.TableExists(ctx, db.Pool, "users"); err == nil && !exists { - fmt.Println("Resetting database") - err = db.ResetDatabase(ctx) + if exists, err := database.TableExists(ctx, db.Pool, "users"); err == nil { + if !exists { + if err = db.ResetDatabase(ctx); err != nil { + fmt.Println("Error:", err) + } else { + fmt.Println("Database reset") + } + } } else { - fmt.Println(err.Error()) + fmt.Println("Error:", err) } } @@ -64,8 +70,8 @@ func main() { router.Use(middleware.Timeout(60 * time.Second)) router.Use(mdleware.JSONContentType) - router.Post(endpoint.Register, userHandler.Register) - router.Post(endpoint.Login, loginHandler.Login) + router.Method("Post", endpoint.Register, http.HandlerFunc(userHandler.Register)) + router.Method("Post", endpoint.Login, http.HandlerFunc(loginHandler.Login)) // Start server server := &http.Server{ diff --git a/cmd/api/main_test.go b/cmd/api/main_test.go index 19363df..1a70e67 100644 --- a/cmd/api/main_test.go +++ b/cmd/api/main_test.go @@ -39,9 +39,11 @@ func TestMain(m *testing.M) { userStore := model.NewUserStore(db.Pool) userHandler := handler.NewUserHandler(userStore) + loginHandler := handler.NewLoginHandler(userStore) testRouter = mux.NewRouter() testRouter.HandleFunc(endpoint.Register, userHandler.Register).Methods("POST") + testRouter.HandleFunc(endpoint.Login, loginHandler.Login).Methods("POST") code := m.Run() os.Exit(code) diff --git a/go.mod b/go.mod index c20ed51..7555b02 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.kundeng.us/phoenix/textsender-auth go 1.25.3 require ( - git.kundeng.us/phoenix/textsender-models v0.0.3-main-84d04c08d8-556 + git.kundeng.us/phoenix/textsender-models v0.0.6-main-28b29802b9-556 github.com/go-chi/chi/v5 v5.2.3 github.com/golang-jwt/jwt/v5 v5.3.0 github.com/google/uuid v1.6.0 diff --git a/go.sum b/go.sum index 9b19fc8..1f2b200 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -git.kundeng.us/phoenix/textsender-models v0.0.3-main-84d04c08d8-556 h1:2Ach240Sm8GEiaLOMaVEVHXKkbkVlNgK2YZj63nUK/c= -git.kundeng.us/phoenix/textsender-models v0.0.3-main-84d04c08d8-556/go.mod h1:lx5MCnOgGgsdpwzrfi9uph5xmkeb6H8AuexUNGss2no= +git.kundeng.us/phoenix/textsender-models v0.0.6-main-28b29802b9-556 h1:2NI8cXaxt2rsXrhy/rDhgoOzvjLQwbhwr4nv2g35Ah8= +git.kundeng.us/phoenix/textsender-models v0.0.6-main-28b29802b9-556/go.mod h1:lx5MCnOgGgsdpwzrfi9uph5xmkeb6H8AuexUNGss2no= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= diff --git a/internal/handler/login.go b/internal/handler/login.go index 276a716..fff6430 100644 --- a/internal/handler/login.go +++ b/internal/handler/login.go @@ -4,10 +4,11 @@ import ( "fmt" "net/http" + "git.kundeng.us/phoenix/textsender-models/pkg/token" + "git.kundeng.us/phoenix/textsender-auth/internal/config" "git.kundeng.us/phoenix/textsender-auth/internal/model" "git.kundeng.us/phoenix/textsender-auth/internal/utility" - "git.kundeng.us/phoenix/textsender-models/pkg/token" ) type LoginAccount struct { @@ -29,11 +30,6 @@ func NewLoginHandler(userStore model.UserStore) *LoginHandler { } func (l *LoginHandler) Login(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - var req LoginAccount if err := ExtractFromRequest(r, &req); err != nil { http.Error(w, "Invalid JSON: "+err.Error(), http.StatusBadRequest) diff --git a/internal/handler/mock_store.go b/internal/handler/mock_store.go index 51c1df6..8f21de3 100644 --- a/internal/handler/mock_store.go +++ b/internal/handler/mock_store.go @@ -107,8 +107,8 @@ func (m *MockUserStore) UserExists(ctx context.Context, username string) (bool, _, exists := m.UsersByUsername[username] if !exists { - return exists, errors.New("User not found") + return exists, nil + } else { + return exists, nil } - - return exists, nil } diff --git a/internal/handler/register.go b/internal/handler/register.go index dc0d3d4..f7e67ea 100644 --- a/internal/handler/register.go +++ b/internal/handler/register.go @@ -2,12 +2,13 @@ package handler import ( "fmt" - "github.com/google/uuid" "net/http" + "git.kundeng.us/phoenix/textsender-models/pkg/user" + "github.com/google/uuid" + "git.kundeng.us/phoenix/textsender-auth/internal/model" "git.kundeng.us/phoenix/textsender-auth/internal/utility" - "git.kundeng.us/phoenix/textsender-models/pkg/user" ) type RegisterUser struct { @@ -35,12 +36,7 @@ func NewUserHandler(userStore model.UserStore) *UserHandler { return &UserHandler{UserStore: userStore} } -func (h *UserHandler) Register(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - +func (u *UserHandler) Register(w http.ResponseWriter, r *http.Request) { var req RegisterUser err := ExtractFromRequest(r, &req) if err != nil { @@ -50,44 +46,42 @@ func (h *UserHandler) Register(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() - user := user.User{Username: req.Username, Password: req.Password, PhoneNumber: req.PhoneNumber} - var statusCode int - resp := RegisterResponse{} + var resp RegisterResponse + user := user.User{Username: req.Username, Password: req.Password, PhoneNumber: req.PhoneNumber} fmt.Println("Username:", user.Username) ctx := r.Context() - exists, err := h.UserStore.UserExists(ctx, user.Username) - if err != nil { + if exists, err := u.UserStore.UserExists(ctx, user.Username); err != nil { fmt.Printf("Error: %v", err) statusCode = http.StatusInternalServerError resp.Message = err.Error() - } - - if exists { - // User already exists - statusCode = http.StatusBadRequest - resp.Message = "Failure in creating User" } else { - hashing := utility.HashMash{Password: user.Password} - hashedPassword, err := hashing.HashPassword() - if err != nil { - statusCode = http.StatusInternalServerError - resp.Message = err.Error() + if exists { + // User already exists + statusCode = http.StatusBadRequest + resp.Message = "Failure in creating User" } else { - user.Password = hashedPassword - err := h.UserStore.CreateUser(ctx, &user) - if err != nil { + hashing := utility.HashMash{Password: user.Password} + if hashedPassword, err := hashing.HashPassword(); err != nil { statusCode = http.StatusInternalServerError resp.Message = err.Error() } else { - resp.Message = "Successful" - statusCode = http.StatusOK - resp.Data = append(resp.Data, RegisterResponseItem{Id: user.Id, PhoneNumber: user.PhoneNumber, Username: user.Username}) + user.Password = hashedPassword + err := u.UserStore.CreateUser(ctx, &user) + if err != nil { + statusCode = http.StatusInternalServerError + resp.Message = err.Error() + } else { + resp.Message = "Successful" + statusCode = http.StatusOK + resp.Data = append(resp.Data, RegisterResponseItem{Id: user.Id, PhoneNumber: user.PhoneNumber, Username: user.Username}) + } } } + } RespondWithJson(w, statusCode, &resp) diff --git a/internal/handler/register_test.go b/internal/handler/register_test.go index 382dcf6..24d2a07 100644 --- a/internal/handler/register_test.go +++ b/internal/handler/register_test.go @@ -1,7 +1,6 @@ package handler import ( - "context" "encoding/json" "net/http" "net/http/httptest" @@ -10,7 +9,6 @@ import ( "github.com/stretchr/testify/assert" - "git.kundeng.us/phoenix/textsender-auth/internal/db" "git.kundeng.us/phoenix/textsender-auth/internal/handler/endpoint" ) @@ -34,11 +32,3 @@ func TestCreateUserWithMock(t *testing.T) { assert.NotNil(t, response.Data[0].Id, "Id should not be nil") } - -func resetTestDB(t *testing.T) { - t.Helper() - _, err := db.Pool.Exec(context.Background(), "DELETE FROM users") - if err != nil { - t.Fatalf("Failed to reset test database: %v", err) - } -}