2025-03-15 15:51:18 +08:00

220 lines
5.3 KiB
Go

package entity
import (
"enaklo-pos-be/internal/constants/role"
"enaklo-pos-be/internal/constants/userstatus"
"time"
)
type AuthData struct {
Token string `json:"token"`
UserID int64 `gorm:"column:user_id"`
RoleID int `gorm:"column:role_id"`
OrganizationID int64 `gorm:"column:organization_id"`
}
type UserDB struct {
ID int64 `gorm:"primary_key;column:id" json:"id"`
Name string `gorm:"column:name" json:"name"`
Email string `gorm:"column:email" json:"email"`
Password string `gorm:"column:password" json:"-"`
Status userstatus.UserStatus `gorm:"column:status" json:"status"`
UserType string `gorm:"column:user_type" json:"user_type"`
PhoneNumber string `gorm:"column:phone_number" json:"phone_number"`
NIK string `gorm:"column:nik" json:"nik"`
RoleID int64 `gorm:"column:role_id" json:"role_id"`
RoleName string `gorm:"column:role_name" json:"role_name"`
PartnerID *int64 `gorm:"column:partner_id" json:"partner_id"`
SiteID *int64 `gorm:"column:site_id" json:"site_id"`
SiteName string `gorm:"column:name" json:"site_name"`
PartnerName string `gorm:"column:partner_name" json:"partner_name"`
PartnerStatus string `gorm:"column:partner_status" json:"partner_status"`
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
DeletedAt *time.Time `gorm:"column:deleted_at" json:"deleted_at"`
CreatedBy int64 `gorm:"column:created_by" json:"created_by"`
UpdatedBy int64 `gorm:"column:updated_by" json:"updated_by"`
ResetPassword bool `gorm:"column:reset_password" json:"reset_password"`
}
func (u *UserDB) ToCustomer() *Customer {
if u == nil {
return &Customer{}
}
userEntity := &Customer{
ID: u.ID,
Name: u.Name,
Email: u.Email,
PhoneNumber: u.PhoneNumber,
Status: u.Status,
CreatedAt: u.CreatedAt,
UpdatedAt: u.UpdatedAt,
RoleID: role.Role(u.RoleID),
RoleName: u.RoleName,
PartnerID: u.PartnerID,
PartnerName: u.PartnerName,
SiteID: u.SiteID,
SiteName: u.SiteName,
ResetPassword: u.ResetPassword,
}
return userEntity
}
func (u *UserDB) ToUser() *User {
if u == nil {
return &User{}
}
userEntity := &User{
ID: u.ID,
Name: u.Name,
Email: u.Email,
NIK: u.NIK,
PhoneNumber: u.PhoneNumber,
Status: u.Status,
CreatedAt: u.CreatedAt,
UpdatedAt: u.UpdatedAt,
RoleID: role.Role(u.RoleID),
RoleName: u.RoleName,
PartnerID: u.PartnerID,
PartnerName: u.PartnerName,
SiteID: u.SiteID,
SiteName: u.SiteName,
ResetPassword: u.ResetPassword,
}
return userEntity
}
func (u *UserDB) ToUserRoleDB() *UserRoleDB {
if u == nil {
return &UserRoleDB{}
}
userRole := &UserRoleDB{
ID: 0,
UserID: u.ID,
RoleID: u.RoleID,
PartnerID: u.PartnerID,
CreatedAt: u.CreatedAt,
UpdatedAt: u.UpdatedAt,
SiteID: u.SiteID,
}
return userRole
}
func (UserDB) TableName() string {
return "users"
}
func (u *UserDB) ToUserAuthenticate(signedToken string, license PartnerLicense) *AuthenticateUser {
return &AuthenticateUser{
ID: u.ID,
Token: signedToken,
Name: u.Name,
RoleID: role.Role(u.RoleID),
RoleName: u.RoleName,
PartnerID: u.PartnerID,
PartnerName: u.PartnerName,
PartnerStatus: u.PartnerStatus,
SiteID: u.SiteID,
SiteName: u.SiteName,
ResetPassword: u.ResetPassword,
PartnerLicense: license,
UserType: u.UserType,
}
}
type UserSearch struct {
Search string
Name string
RoleID int64
PartnerID int64
SiteID int64
Limit int
Offset int
}
type UserList []*UserDB
func (b *UserList) ToUserList() []*User {
var users []*User
for _, user := range *b {
users = append(users, user.ToUser())
}
return users
}
func (u *UserDB) ToUpdatedUser(req User) error {
if req.Name != "" {
u.Name = req.Name
}
if req.Email != "" {
u.Email = req.Email
}
if req.PhoneNumber != "" {
u.PhoneNumber = req.PhoneNumber
}
if req.NIK != "" {
u.NIK = req.NIK
}
u.RoleID = int64(req.RoleID)
if req.Password != "" {
hashedPassword, err := req.HashedPassword(req.Password)
if err != nil {
return err
}
u.Password = hashedPassword
}
u.SiteID = req.SiteID
u.PartnerID = req.PartnerID
return nil
}
func (o *UserDB) SetDeleted(updatedby int64) {
currentTime := time.Now()
o.DeletedAt = &currentTime
o.UpdatedBy = updatedby
o.Status = userstatus.Inactive
}
type MemberList []*Customer
type CustomerList []*UserDB
type CustomerSearch struct {
Search string
Name string
RoleID int64
PartnerID int64
SiteID int64
Limit int
Offset int
}
func (b *CustomerList) ToCustomerList() []*Customer {
var users []*Customer
for _, user := range *b {
if user.UserType == "CUSTOMER" {
users = append(users, user.ToCustomer())
}
}
return users
}
type MemberSearch struct {
Search string
Limit int
Offset int
}