Ужасный код

This commit is contained in:
songl 2024-06-06 20:03:22 +05:00
parent 17a6019ea0
commit 8afc68814e
3 changed files with 132 additions and 16 deletions

View File

@ -4,16 +4,130 @@ package controllers
import ( import (
"crypto/rand" "crypto/rand"
"fmt" "encoding/base64"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"golang-test/database"
"golang-test/libs"
"golang-test/message"
"golang-test/validators"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
) )
func tokenGenerator() string { //func tokenGenerator() string {
b := make([]byte, 4) // b := make([]byte, 4)
rand.Read(b) // rand.Read(b)
return fmt.Sprintf("%x", b) // return fmt.Sprintf("%x", b)
//}
// func main() {
// a := tokenGenerator()
// fmt.Println(a)
// }
type Token struct {
gorm.Model
UserID uint
token string
} }
func main() { func RegisterUser(c *gin.Context, user database.User) {
a := tokenGenerator() db := database.Connector()
fmt.Println(a) validate := validators.Validate
response := message.Response{Status: 200}
if err := validate.Struct(user); err != nil {
response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors))
response.Status = 400
message.SendResponse(c, response)
return
}
hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
if err != nil {
return
}
user.Password = string(hash)
if err := db.Create(user).Error; err != nil {
return
}
return
}
func LoginUser(c *gin.Context, email, password string) *Token {
var user database.User
db := database.Connector()
validate := validators.Validate
if err := db.Where("email = ?", email).First(&user).Error; err != nil {
return nil
}
if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil {
return nil
}
token := &Token{
UserID: user.ID,
Token: generateToken(),
}
if err := db.Create(token).Error; err != nil {
return nil
}
return token
}
func generateToken() string {
b := make([]byte, 4)
if _, err := rand.Read(b); err != nil {
return ""
}
return base64.StdEncoding.EncodeToString(b)
}
func GetUserByToken(c *gin.Context, token string) database.User {
var tokenStruct Token
db := database.Connector()
validate := validators.Validate
if err := db.Where("token = ?", token).First(&tokenStruct).Error; err != nil {
return nil
}
var user database.User
if err := db.First(&user, tokenStruct.UserID).Error; err != nil {
return err
}
return user
}
func EditUser(c *gin.Context, token string, user database.User) {
db := database.Connector()
validate := validators.Validate
u := GetUserByToken(c, token)
if err := validate.Struct(user); err != nil {
return
}
if user.Name != "" {
u.Name = user.Name
}
if user.Email != "" {
u.Email = user.Email
}
if user.Password != "" {
hash, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
if err != nil {
return
}
u.Password = string(hash)
}
if err := db.Save(u).Error; err != nil {
return
}
return
}
func DeleteUser(c *gin.Context, token string) {
u, err := GetUserByToken(db, token)
if err != nil {
return
}
if err := db.Delete(u).Error; err != nil {
return
}
return
} }

View File

@ -9,7 +9,7 @@ type Manufacturer struct {
type Product struct { type Product struct {
gorm.Model gorm.Model
Name string `validate:"required` Name string `validate:"required"`
Price uint `validate:"required"` Price uint `validate:"required"`
ManufacturerID uint `validate:"required"` ManufacturerID uint `validate:"required"`
Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"` Manufacturer *Manufacturer `gorm:"foreignKey:ManufacturerID;references:ID"`
@ -17,9 +17,9 @@ type Product struct {
type User struct { type User struct {
gorm.Model gorm.Model
Name string Name string `validate:"required"`
Email string Email string `validate:"required"`
Password string Password string `validate:"required"`
Products []*Product `gorm:"many2many:user_products;"` Products []*Product `gorm:"many2many:user_products;"`
Token string `gorm:"many2many:user_token;"` Token string `gorm:"many2many:user_token;"`
} }

10
main.go
View File

@ -70,12 +70,14 @@ func main() {
controllers.EditManufacture(c, manufacturer) controllers.EditManufacture(c, manufacturer)
}) })
//Для создания пользователя
r.POST("/registration", func(c *gin.Context) { r.POST("/registration", func(c *gin.Context) {
type registrationForm struct { var manufacturer database.Manufacturer
name string if err := c.ShouldBind(&manufacturer); err != nil {
email string c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
password string
} }
controllers.CreateManufacturer(c, manufacturer)
}) })
err := r.Run() err := r.Run()
if err != nil { if err != nil {