369 lines
6.7 KiB
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")
|
|
}
|