220 lines
5.3 KiB
Go
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 = ¤tTime
|
|
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
|
|
}
|