Frontend form handling done

This commit is contained in:
Leons Aleksandrovs
2025-07-05 21:11:09 +03:00
parent 58d53b17cb
commit a42e61fb48
22 changed files with 338 additions and 35 deletions
+52
View File
@@ -0,0 +1,52 @@
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
args_bin = []
bin = "./tmp/main"
cmd = "go build -o ./tmp/main ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
include_file = []
kill_delay = "0s"
log = "build-errors.log"
poll = false
poll_interval = 0
post_cmd = []
pre_cmd = []
rerun = false
rerun_delay = 500
send_interrupt = false
stop_on_error = false
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
main_only = false
silent = false
time = false
[misc]
clean_on_exit = false
[proxy]
app_port = 0
enabled = false
proxy_port = 0
[screen]
clear_on_rebuild = false
keep_scroll = true
+34
View File
@@ -0,0 +1,34 @@
package controllers
import (
"log"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)
type User struct{}
type RegisterForm struct {
Email string `json:"email" validate:"required,email"`
Name string `json:"name" validate:"required"`
Password string `json:"password" validate:"required"`
RepeatPassword string `json:"repeatPassword" validate:"required"`
}
func (u *User) Register(c *gin.Context) {
// Receive data from frontend, check if data is okay, hash password, call model
var data RegisterForm
if err := c.ShouldBindJSON(&data); err != nil {
// TODO: Handle error
}
// Validate data
validate := validator.New()
if err := validate.Struct(data); err != nil {
// Handle error
log.Fatalf("Error: %v", err.Error())
}
// fmt.Println(data)
}
+2 -1
View File
@@ -1,7 +1,8 @@
-- Create users table if it doesn't exist
CREATE TABLE IF NOT EXISTS users (
id INT PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
password TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
+1 -1
View File
@@ -28,6 +28,6 @@ func main() {
routes := routes.SetupRoutes()
// Listen on port smth
log.Printf("Starting server on %s PORT\n", env["port"])
log.Printf("Starting server ...")
log.Fatal(routes.Run(":8080"))
}
+13
View File
@@ -0,0 +1,13 @@
package models
type User struct {
ID int
email string
name string
password string
createdAt string
}
func Create(email string, name string, hash string) {
// TODO: Insert user into database
}
+6 -6
View File
@@ -1,7 +1,7 @@
package routes
import (
"net/http"
"backend/controllers"
"github.com/gin-gonic/gin"
)
@@ -9,11 +9,11 @@ import (
func SetupRoutes() *gin.Engine {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
// Controllers
users := controllers.User{}
// Guest routes (Register, Login, check auth)
r.POST("/register", users.Register)
return r
}
+1
View File
@@ -0,0 +1 @@
package utils