Socialify

Folder ..

Viewing user.go
50 lines (41 loc) • 1.3 KB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package controllers

import (
	"pagoda/config"
	"pagoda/database"

	"github.com/gofiber/fiber/v2"
	"golang.org/x/crypto/bcrypt"
)

func Register(c *fiber.Ctx) error {
	var user database.User

	if err := c.BodyParser(&user); err != nil {
		return c.Status(fiber.StatusBadRequest).JSON(config.ErrorResponse{
			Code:    fiber.StatusBadRequest,
			Message: errorMessages.InvalidRequestBody,
		})
	}

	if user.Username == "" || user.Email == "" || user.Password == "" {
		return c.Status(fiber.StatusBadRequest).JSON(config.ErrorResponse{
			Code:    fiber.StatusBadRequest,
			Message: errorMessages.MissingUserRegistrationRequiredFields,
		})
	}

	hashedPassword, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).JSON(config.ErrorResponse{
			Code:    fiber.StatusInternalServerError,
			Message: errorMessages.FailedToHashPassword,
		})
	}

	user.Password = string(hashedPassword)

	if err := database.Database.Create(&user).Error; err != nil {
		return c.Status(fiber.StatusNotAcceptable).JSON(config.ErrorResponse{
			Code:    fiber.StatusNotAcceptable,
			Message: errorMessages.SQLError(err),
		})
	}

	return c.Status(fiber.StatusCreated).JSON(config.SuccessResponse{
		Code:    fiber.StatusCreated,
		Message: successMessages.UserCreatedSuccessfully,
		Data:    user,
	})
}