pejhancctv/handlers/user.go

369 lines
6.7 KiB
Go

package handlers
import (
database "app/database"
"app/models"
"app/repositories"
"app/utils"
"net/http"
"strconv"
"fmt"
"github.com/labstack/echo/v4"
)
func initUser() *repositories.User_repository {
db := database.Db()
userRepository := new(repositories.User_repository)
userRepository.DB = &db
return userRepository
}
// RegisterUser godoc
// @Summary Register User
// @Description Send UserModel
// @Tags register
// @Accept json
// @Produce json
// @Param user body models.User true "User Model"
// @Success 200 {object} models.User
// @Failure 400
// @Router /users/ [post]
func RegisterUser(c echo.Context) error {
user := new(models.User)
db := database.Db()
if err := c.Bind(user); err != nil {
return err
}
userRepository := initUser()
user.Role = "user"
err := userRepository.Create(user)
if err != nil {
return err
}
tempUser, err := utils.GetByPhoneNumber(user.CellPhone_number)
if err != nil {
return err
}
cartRepository := new(repositories.Carts_repository)
cartRepository.DB = &db
cart := new(models.Carts)
cart.User_id = tempUser.User_id
err = cartRepository.Create(cart)
if err != nil {
return err
}
//utils.GenerateToken(c,*user)
return c.JSON(http.StatusCreated, user)
}
func GetSameUserNames(c echo.Context) error {
username := c.Param("name")
userRepository := initUser()
users, err := userRepository.GetByName(username)
if err != nil {
return err
}
return c.JSON(http.StatusAccepted, users)
}
func GetUserByID(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
panic(err)
}
userRepository := initUser()
user, err := userRepository.GetByID(uint(id))
if err != nil {
panic(err)
}
return c.JSON(http.StatusAccepted, user)
}
// UpdateUserName(name string, id uint) error
// UpdateEmail(email string, id uint) error
// UpdatePassword(password string, id uint) error
// UpdateRole(newRole string, id uint) error
// UpdateNationalCode(newCode string, id uint) error
// UpdateBirthDay(newBirthDay string, id uint) error
// UpdateFirstName(firstName string, id uint) error
// UpdateLastName(lastName string, id uint) error
// UpdatePostCode(newPostCode string, id uint) error
// Delete(name string, id uint) error
func UpdateUserName(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewUsername string `json:"username"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
err = userRepository.UpdateUserName(update.NewUsername, uint(id))
if err != nil {
panic(err)
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateEmail(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewEmail string `json:"email"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewEmail != "" {
err = userRepository.UpdateEmail(update.NewEmail, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdatePassword(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
isNull := true
var update struct {
OldPassword string `json:"oldpassword"`
NewPassword string `json:"password"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
user, err := userRepository.GetByID(uint(id))
if err != nil {
return err
}
if user.Password != "" {
isNull = false
}
if isNull {
password, err := utils.HashPW(update.NewPassword)
if err != nil {
return err
}
err = userRepository.UpdatePassword(password, uint(id))
if err != nil {
panic(err)
}
} else {
checkpw, err := utils.Match(update.OldPassword, user.Email)
if err != nil {
return err
}
if checkpw {
password, err := utils.HashPW(update.NewPassword)
if err != nil {
return err
}
err = userRepository.UpdatePassword(password, uint(id))
if err != nil {
panic(err)
}
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateRole(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
panic(err)
}
var update struct {
NewRole string `json:"role"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewRole != "" {
err = userRepository.UpdateRole(update.NewRole, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateNationalCode(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewNationalCode string `json:"national_code"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewNationalCode != "" {
err = userRepository.UpdateNationalCode(update.NewNationalCode, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateBirthDay(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewBirthDay string `json:"birthday"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewBirthDay != "" {
err = userRepository.UpdateBirthDay(update.NewBirthDay, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateFirstName(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewFirstName string `json:"firstname"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewFirstName != "" {
err = userRepository.UpdateFirstName(update.NewFirstName, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func UpdateLastName(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
var update struct {
NewLastName string `json:"lastname"`
}
if err := c.Bind(&update); err != nil {
panic(err)
}
userRepository := initUser()
if update.NewLastName != "" {
err = userRepository.UpdateLastName(update.NewLastName, uint(id))
if err != nil {
panic(err)
}
}
return c.String(http.StatusAccepted, "updated")
}
func DeleteUser(c echo.Context) error {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
fmt.Println(err)
}
userRepository := initUser()
err = userRepository.Delete(uint(id))
if err != nil {
panic(err)
}
return c.String(http.StatusAccepted, "removed")
}