ADD: added basic cli tool and updated the login modal
This commit is contained in:
BIN
backend/cli
Executable file
BIN
backend/cli
Executable file
Binary file not shown.
@@ -9,8 +9,8 @@ import (
|
||||
)
|
||||
|
||||
var RootCmd = &cobra.Command{
|
||||
Use: "myapp",
|
||||
Short: "MyApp admin CLI",
|
||||
Use: "studia",
|
||||
Short: "studia admin CLI",
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
},
|
||||
}
|
||||
@@ -8,6 +8,6 @@ var UserCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
func init() {
|
||||
UserCmd.AddCommand(listCmd)
|
||||
// UserCmd.AddCommand(listCmd)
|
||||
UserCmd.AddCommand(getCmd)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user