213 lines
5.2 KiB
Go
Raw Normal View History

2023-10-08 15:59:42 +07:00
package entity
import (
"furtuna-be/internal/constants/role"
"furtuna-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 {
2024-06-03 14:40:50 +07:00
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"`
2024-06-05 00:24:53 +07:00
SiteID *int64 `gorm:"column:site_id" json:"site_id"`
2024-07-12 02:29:18 +07:00
SiteName string `gorm:"column:name" json:"site_name"`
2024-06-03 14:40:50 +07:00
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"`
2024-07-23 01:36:25 +07:00
ResetPassword bool `gorm:"column:reset_password" json:"reset_password"`
2023-10-08 15:59:42 +07:00
}
2024-08-15 11:01:55 +07:00
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
}
2023-10-08 15:59:42 +07:00
func (u *UserDB) ToUser() *User {
if u == nil {
return &User{}
}
userEntity := &User{
2024-07-23 01:36:25 +07:00
ID: u.ID,
Name: u.Name,
Email: u.Email,
2024-08-15 22:37:57 +07:00
NIK: u.NIK,
2024-08-28 14:04:16 +07:00
PhoneNumber: u.PhoneNumber,
2024-07-23 01:36:25 +07:00
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,
2023-10-08 15:59:42 +07:00
}
return userEntity
}
func (u *UserDB) ToUserRoleDB() *UserRoleDB {
if u == nil {
return &UserRoleDB{}
}
userRole := &UserRoleDB{
ID: 0,
UserID: u.ID,
RoleID: u.RoleID,
2024-06-03 14:40:50 +07:00
PartnerID: u.PartnerID,
2023-10-08 15:59:42 +07:00
CreatedAt: u.CreatedAt,
UpdatedAt: u.UpdatedAt,
2024-06-05 00:24:53 +07:00
SiteID: u.SiteID,
2023-10-08 15:59:42 +07:00
}
return userRole
}
func (UserDB) TableName() string {
return "users"
}
2024-08-02 00:51:54 +07:00
func (u *UserDB) ToUserAuthenticate(signedToken string, license PartnerLicense) *AuthenticateUser {
2023-10-08 15:59:42 +07:00
return &AuthenticateUser{
2024-08-04 01:14:59 +07:00
ID: u.ID,
2024-08-02 00:51:54 +07:00
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,
2024-08-04 01:14:59 +07:00
UserType: u.UserType,
2023-10-08 15:59:42 +07:00
}
}
type UserSearch struct {
Search string
Name string
RoleID int64
PartnerID int64
2024-07-30 19:38:23 +07:00
SiteID int64
2023-10-08 15:59:42 +07:00
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
}
2024-07-30 14:18:18 +07:00
if req.PhoneNumber != "" {
u.PhoneNumber = req.PhoneNumber
}
if req.NIK != "" {
u.NIK = req.NIK
2023-10-08 15:59:42 +07:00
}
2024-08-29 23:24:05 +07:00
u.RoleID = int64(req.RoleID)
2023-10-08 15:59:42 +07:00
if req.Password != "" {
hashedPassword, err := req.HashedPassword(req.Password)
if err != nil {
return err
}
u.Password = hashedPassword
}
2024-08-29 23:24:05 +07:00
u.SiteID = req.SiteID
u.PartnerID = req.PartnerID
2023-10-08 15:59:42 +07:00
return nil
}
func (o *UserDB) SetDeleted(updatedby int64) {
currentTime := time.Now()
o.DeletedAt = &currentTime
o.UpdatedBy = updatedby
o.Status = userstatus.Inactive
}
2024-08-15 11:01:55 +07:00
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 {
2024-08-28 14:04:16 +07:00
if user.UserType == "CUSTOMER" {
users = append(users, user.ToCustomer())
}
2024-08-15 11:01:55 +07:00
}
return users
}