tsk-14: Fix startup crash (#16)
Closes #14 Reviewed-on: phoenix/textsender-auth#16 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
+14
-8
@@ -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{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user