2023-10-08 15:59:42 +07:00
|
|
|
package entity
|
|
|
|
|
|
|
|
|
|
import (
|
2025-03-04 20:36:17 +07:00
|
|
|
"enaklo-pos-be/internal/constants/role"
|
|
|
|
|
"enaklo-pos-be/internal/constants/userstatus"
|
2023-10-08 15:59:42 +07:00
|
|
|
"errors"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type User struct {
|
2024-07-23 01:36:25 +07:00
|
|
|
ID int64
|
|
|
|
|
Name string
|
|
|
|
|
Email string
|
|
|
|
|
Password string
|
|
|
|
|
Status userstatus.UserStatus
|
|
|
|
|
NIK string
|
2024-08-04 01:14:59 +07:00
|
|
|
UserType string
|
2024-07-23 01:36:25 +07:00
|
|
|
CreatedAt time.Time
|
|
|
|
|
UpdatedAt time.Time
|
|
|
|
|
RoleID role.Role
|
2024-07-30 02:48:31 +07:00
|
|
|
PhoneNumber string
|
2024-07-23 01:36:25 +07:00
|
|
|
RoleName string
|
|
|
|
|
PartnerID *int64
|
|
|
|
|
SiteID *int64
|
|
|
|
|
SiteName string
|
|
|
|
|
PartnerName string
|
|
|
|
|
ResetPassword bool
|
2023-10-08 15:59:42 +07:00
|
|
|
}
|
|
|
|
|
|
2024-08-15 11:01:55 +07:00
|
|
|
type Customer struct {
|
|
|
|
|
ID int64
|
|
|
|
|
Name string
|
|
|
|
|
Email string
|
|
|
|
|
Password string
|
2025-03-08 00:35:23 +07:00
|
|
|
Phone string
|
|
|
|
|
Points int
|
2024-08-15 11:01:55 +07:00
|
|
|
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
|
2025-03-15 15:51:18 +08:00
|
|
|
CustomerID string
|
|
|
|
|
BirthDate time.Time
|
2024-08-15 11:01:55 +07:00
|
|
|
}
|
|
|
|
|
|
2023-10-08 15:59:42 +07:00
|
|
|
type AuthenticateUser struct {
|
2024-08-04 01:14:59 +07:00
|
|
|
ID int64
|
2024-08-02 00:51:54 +07:00
|
|
|
Token string
|
|
|
|
|
Name string
|
|
|
|
|
RoleID role.Role
|
|
|
|
|
RoleName string
|
|
|
|
|
PartnerID *int64
|
|
|
|
|
PartnerName string
|
|
|
|
|
PartnerStatus string
|
|
|
|
|
SiteID *int64
|
|
|
|
|
SiteName string
|
|
|
|
|
ResetPassword bool
|
|
|
|
|
PartnerLicense PartnerLicense
|
2024-08-04 01:14:59 +07:00
|
|
|
UserType string
|
2023-10-08 15:59:42 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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"`
|
2024-06-05 00:24:53 +07:00
|
|
|
SiteID *int64 `gorm:"column:site_id"`
|
2023-10-08 15:59:42 +07:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-03 14:40:50 +07:00
|
|
|
if u.RoleID == role.Admin && u.PartnerID == nil {
|
2023-10-08 15:59:42 +07:00
|
|
|
return nil, errors.New("invalid request")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &UserDB{
|
2024-07-30 02:48:31 +07:00
|
|
|
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,
|
2024-08-04 01:14:59 +07:00
|
|
|
UserType: u.UserType,
|
2023-10-08 15:59:42 +07:00
|
|
|
}, 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
|
|
|
|
|
}
|