ADD: added basic cli tool and updated the login modal

This commit is contained in:
hwinkel
2025-12-15 00:41:30 +01:00
parent a047d57824
commit 7ec17e1e8b
15 changed files with 199 additions and 103 deletions

BIN
backend/cli Executable file

Binary file not shown.

View File

@@ -9,8 +9,8 @@ import (
)
var RootCmd = &cobra.Command{
Use: "myapp",
Short: "MyApp admin CLI",
Use: "studia",
Short: "studia admin CLI",
}
func Execute() {

View File

@@ -3,25 +3,31 @@ package user
import (
"fmt"
// "studia/internal/db"
usersvc "studia/internal/user"
"studia/internal/config"
"studia/internal/database"
"studia/internal/user"
"github.com/spf13/cobra"
)
var id int64
var email string
var getCmd = &cobra.Command{
Use: "get",
Short: "Get user by ID",
RunE: func(cmd *cobra.Command, args []string) error {
database, err := db.New(getDSN())
if err != nil {
return err
}
cfg := config.New()
service := usersvc.NewService(database)
user, err := service.GetByID(id)
cfg.DatabaseHost = "192.168.178.171"
cfg.DatabasePort = "5432"
cfg.DatabaseUser = "admin"
cfg.DatabasePassword = "12345678"
cfg.DatabaseName = "studia"
database := database.New(cfg)
user, err := user.GetUserByEmail(database, email)
if err != nil {
return err
}
@@ -33,6 +39,6 @@ var getCmd = &cobra.Command{
}
func init() {
getCmd.Flags().Int64Var(&id, "id", 0, "user ID")
getCmd.MarkFlagRequired("id")
getCmd.Flags().StringVar(&email, "email", "", "user email")
getCmd.MarkFlagRequired("email")
}

View File

@@ -1,32 +0,0 @@
// cmd/cli/user/list.go
package user
import (
"fmt"
"myapp/internal/db"
usersvc "myapp/internal/user"
"github.com/spf13/cobra"
)
var listCmd = &cobra.Command{
Use: "list",
Short: "List users",
RunE: func(cmd *cobra.Command, args []string) error {
database, err := db.New(getDSN())
if err != nil {
return err
}
service := usersvc.NewService(database)
users, err := service.List()
if err != nil {
return err
}
for _, u := range users {
fmt.Printf("%d | %s | %s\n", u.ID, u.Email, u.Name)
}
return nil
},
}

View File

@@ -8,6 +8,6 @@ var UserCmd = &cobra.Command{
}
func init() {
UserCmd.AddCommand(listCmd)
// UserCmd.AddCommand(listCmd)
UserCmd.AddCommand(getCmd)
}

View File

@@ -8,6 +8,7 @@ require (
)
require (
github.com/gin-gonic/contrib v0.0.0-20250521004450-2b1292699c15 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/spf13/pflag v1.0.9 // indirect
)

View File

@@ -16,6 +16,8 @@ github.com/gin-contrib/cors v1.7.6 h1:3gQ8GMzs1Ylpf70y8bMw4fVpycXIeX1ZemuSQIsnQQ
github.com/gin-contrib/cors v1.7.6/go.mod h1:Ulcl+xN4jel9t1Ry8vqph23a60FwH9xVLd+3ykmTjOk=
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
github.com/gin-gonic/contrib v0.0.0-20250521004450-2b1292699c15 h1:AoSudS8CW8Mc9rRf5sO1vBtNxr2Ok6TaAICjgg5oKUY=
github.com/gin-gonic/contrib v0.0.0-20250521004450-2b1292699c15/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg=
github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk=
github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=

View File

@@ -15,6 +15,14 @@ type LoginRequest struct {
Password string `json:"password"`
}
type RegisterRequest struct {
Email string `json:"email"`
Password string `json:"password"`
Username string `json:"username"`
}
const defaultRole = "user"
var secret = []byte("secret")
func Login(c *gin.Context, db *sql.DB) {
@@ -49,6 +57,26 @@ func Login(c *gin.Context, db *sql.DB) {
}
func Register(c *gin.Context, db *sql.DB) {
var req RegisterRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
return
}
if req.Email == "" || req.Password == "" || req.Username == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "Email and password are required"})
return
}
error := user.CreateUser(db, req.Email, req.Username, req.Password, []string{defaultRole})
if error != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": error.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "User created successfully"})
}
func GenerateJWT(uuid string, email string, roles []string) (any, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"user": uuid,

View File

@@ -55,6 +55,10 @@ func StartServer(cfg *config.Config) {
auth.Login(c, db) // Pass the actual DB connection instead of nil
})
router.POST("/register", func(c *gin.Context) {
auth.Register(c, db)
})
router.Run(":" + cfg.Port)
}