e13545c5f1
modified: begushiybashkir/bbvue/src/stores/auth.js modified: begushiybashkir/bbvue/src/views/Profile.vue modified: begushiybashkir/bbvue/src/views/ProfileEdit.vue modified: serv_nginx/api_bb/go.mod modified: serv_nginx/api_bb/go.sum modified: serv_nginx/api_bb/internal/handlers/auth.go new file: serv_nginx/api_bb/internal/handlers/avatar.go modified: serv_nginx/api_bb/internal/handlers/news_handler.go modified: serv_nginx/api_bb/internal/handlers/user.go modified: serv_nginx/api_bb/internal/models/user.go modified: serv_nginx/api_bb/internal/repository/user_repository.go modified: serv_nginx/api_bb/internal/routes/routes.go modified: serv_nginx/api_bb/internal/service/auth_service.go new file: serv_nginx/api_bb/internal/service/avatar_service.go modified: serv_nginx/api_bb/internal/service/news_service.go modified: serv_nginx/api_bb/internal/service/user_service.go modified: serv_nginx/api_bb/pkg/logger/interface.go new file: serv_nginx/api_bb/pkg/logger/route_logger.go add structure fix, page, path, routes, component, authStore for upload, renew and delete avatar
73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
// models/user.go
|
|
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// models/user.go - добавить поле Avatar
|
|
type User struct {
|
|
ID uint `json:"id" gorm:"primaryKey"`
|
|
Email string `json:"email" gorm:"uniqueIndex;not null"`
|
|
Password string `json:"-" gorm:"not null"`
|
|
FirstName string `json:"first_name" gorm:"not null"`
|
|
LastName string `json:"last_name" gorm:"not null"`
|
|
Avatar string `json:"avatar"` // Путь к файлу аватара
|
|
Phone string `json:"phone"`
|
|
Experience string `json:"experience"`
|
|
Goals string `json:"goals"`
|
|
Newsletter bool `json:"newsletter"`
|
|
Role string `json:"role" gorm:"default:user"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
|
|
}
|
|
|
|
type UserUpdate struct {
|
|
ID uint `json:"id"`
|
|
FirstName string `json:"first_name"`
|
|
LastName string `json:"last_name"`
|
|
Avatar string `json:"avatar"` // Добавить поле аватара
|
|
Phone string `json:"phone"`
|
|
Experience string `json:"experience"`
|
|
Goals string `json:"goals"`
|
|
Newsletter bool `json:"newsletter"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// HashPassword хеширует пароль перед сохранением
|
|
func (u *User) HashPassword() error {
|
|
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.Password = string(hashedPassword)
|
|
return nil
|
|
}
|
|
|
|
// CheckPassword проверяет пароль
|
|
func (u *User) CheckPassword(password string) bool {
|
|
err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(password))
|
|
return err == nil
|
|
}
|
|
|
|
// BeforeCreate hook для GORM
|
|
func (u *User) BeforeCreate(tx *gorm.DB) error {
|
|
if u.CreatedAt.IsZero() {
|
|
u.CreatedAt = time.Now()
|
|
}
|
|
if u.UpdatedAt.IsZero() {
|
|
u.UpdatedAt = time.Now()
|
|
}
|
|
return u.HashPassword()
|
|
}
|
|
|
|
// BeforeUpdate hook для GORM
|
|
func (u *User) BeforeUpdate(tx *gorm.DB) error {
|
|
u.UpdatedAt = time.Now()
|
|
return nil
|
|
}
|