bimasatria/enterprise-erp-api
0
1package controllers2 3import (4 "os"5 "time"6 7 "enterprise-erp/config"8 "enterprise-erp/models"9 10 "github.com/gofiber/fiber/v2"11 "github.com/golang-jwt/jwt/v5"12 "golang.org/x/crypto/bcrypt"13)14 15type RegisterInput struct {16 TenantID string `json:"tenant_id"`17 Name string `json:"name"`18 Email string `json:"email"`19 Password string `json:"password"`20 Role string `json:"role"`21}22 23func Register(c *fiber.Ctx) error {24 var input RegisterInput25 if err := c.BodyParser(&input); err != nil {26 return c.Status(400).JSON(fiber.Map{"error": "Format data tidak valid"})27 }28 29 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(input.Password), 10)30 if err != nil {31 return c.Status(500).JSON(fiber.Map{"error": "Gagal memproses password"})32 }33 34 user := models.User{35 TenantID: input.TenantID,36 Name: input.Name,37 Email: input.Email,38 Password: string(hashedPassword),39 Role: input.Role,40 }41 42 if err := config.DB.Create(&user).Error; err != nil {43 return c.Status(500).JSON(fiber.Map{"error": "Gagal menyimpan user, mungkin email sudah terdaftar"})44 }45 46 return c.Status(201).JSON(fiber.Map{"message": "Registrasi berhasil", "user_id": user.ID})47}48 49type LoginInput struct {50 Email string `json:"email"`51 Password string `json:"password"`52}53 54func Login(c *fiber.Ctx) error {55 var input LoginInput56 if err := c.BodyParser(&input); err != nil {57 return c.Status(400).JSON(fiber.Map{"error": "Format data tidak valid"})58 }59 60 var user models.User61 if err := config.DB.Where("email = ?", input.Email).First(&user).Error; err != nil {62 return c.Status(404).JSON(fiber.Map{"error": "Email tidak ditemukan"})63 }64 65 if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(input.Password)); err != nil {66 return c.Status(401).JSON(fiber.Map{"error": "Password salah"})67 }68 69 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{70 "user_id": user.ID,71 "tenant_id": user.TenantID,72 "role": user.Role,73 "exp": time.Now().Add(time.Hour * 24).Unix(),74 })75 76 tokenString, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))77 if err != nil {78 return c.Status(500).JSON(fiber.Map{"error": "Gagal membuat token akses"})79 }80 81 return c.JSON(fiber.Map{82 "message": "Login berhasil",83 "token": tokenString,84 })85}86 