package entity import ( "enaklo-pos-be/internal/constants/role" "enaklo-pos-be/internal/constants/userstatus" "errors" "time" "golang.org/x/crypto/bcrypt" ) type User struct { ID int64 Name string Email string Password string Status userstatus.UserStatus NIK string UserType string CreatedAt time.Time UpdatedAt time.Time RoleID role.Role PhoneNumber string RoleName string PartnerID *int64 SiteID *int64 SiteName string PartnerName string ResetPassword bool } type Customer struct { ID int64 Name string Email string Password string Phone string Points int Status userstatus.UserStatus NIK string UserType string CreatedAt time.Time UpdatedAt time.Time RoleID role.Role PhoneNumber string RoleName string PartnerID *int64 SiteID *int64 SiteName string PartnerName string ResetPassword bool CustomerID string BirthDate time.Time } type AuthenticateUser struct { ID int64 Token string Name string RoleID role.Role RoleName string PartnerID *int64 PartnerName string PartnerStatus string SiteID *int64 SiteName string ResetPassword bool PartnerLicense PartnerLicense UserType string } type UserRoleDB struct { ID int64 `gorm:"primary_key;column:user_role_id" ` UserID int64 `gorm:"column:user_id"` RoleID int64 `gorm:"column:role_id"` PartnerID *int64 `gorm:"column:partner_id"` SiteID *int64 `gorm:"column:site_id"` CreatedAt time.Time `gorm:"column:created_at"` UpdatedAt time.Time `gorm:"column:updated_at"` } func (UserRoleDB) TableName() string { return "user_roles" } func (u *User) ToUserDB(createdBy int64) (*UserDB, error) { hashedPassword, err := u.HashedPassword(u.Password) if err != nil { return nil, err } if u.RoleID == role.Admin && u.PartnerID == nil { return nil, errors.New("invalid request") } return &UserDB{ Name: u.Name, Email: u.Email, Password: hashedPassword, RoleID: int64(u.RoleID), PartnerID: u.PartnerID, Status: userstatus.Active, CreatedBy: createdBy, SiteID: u.SiteID, PhoneNumber: u.PhoneNumber, NIK: u.NIK, UserType: u.UserType, }, nil } func (u User) HashedPassword(password string) (string, error) { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return "", err } return string(hashedPassword), nil }