254 lines
6.6 KiB
Go
254 lines
6.6 KiB
Go
package entity
|
|
|
|
import (
|
|
"enaklo-pos-be/internal/constants/role"
|
|
"enaklo-pos-be/internal/constants/userstatus"
|
|
"time"
|
|
)
|
|
|
|
type CreatePartnerRequest struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Address string `json:"address"`
|
|
FullName string `json:"full_name"`
|
|
Email string `json:"email"`
|
|
Password string `json:"password" validate:"required"`
|
|
NIK string `json:"nik"`
|
|
PhoneNumber string `json:"phone_number"`
|
|
BankName string `json:"bank_name"`
|
|
BankAccountNumber string `json:"bank_account_number"`
|
|
Status string `json:"status"`
|
|
BankAccountHolderName string `json:"bank_account_holder_name"`
|
|
Logo string `json:"logo"`
|
|
}
|
|
|
|
type Partner struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement;column:id"`
|
|
Name string `gorm:"type:varchar(255);not null;column:name"`
|
|
Status string `gorm:"type:varchar(50);column:status"`
|
|
LicenseExpiredDate *time.Time `gorm:"type:date;column:license_expired_date"`
|
|
Address string `gorm:"type:varchar(255);column:address"`
|
|
BankName string `gorm:"type:varchar(255);column:bank_name"`
|
|
BankAccountNumber string `gorm:"type:varchar(50);column:bank_account_number"`
|
|
BankAccountHolderName string `gorm:"type:varchar(255);column:bank_account_holder_name"`
|
|
CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"`
|
|
DeletedAt *time.Time `gorm:"column:deleted_at"`
|
|
CreatedBy int64 `gorm:"type:int;column:created_by"`
|
|
UpdatedBy int64 `gorm:"type:int;column:updated_by"`
|
|
AdminUserID int64 `gorm:"type:int;column:admin_user_id"`
|
|
Balance float64 `gorm:"-"`
|
|
AdminName string `gorm:"-"`
|
|
AdminPhoneNumber string `gorm:"-"`
|
|
AdminEmail string `gorm:"-"`
|
|
Logo string `gorm:"type:varchar;column:logo"`
|
|
}
|
|
|
|
type PartnerUpdate struct {
|
|
ID int64
|
|
Email string
|
|
Name string
|
|
Status string
|
|
Address string
|
|
PhoneNumber string
|
|
BankName string
|
|
BankAccountNumber string
|
|
BankAccountHolderName string
|
|
NIK string
|
|
AdminUserID int64
|
|
AdminName string
|
|
Password string
|
|
Logo string
|
|
}
|
|
|
|
func (c *PartnerUpdate) ToUserAdmin(partnerID *int64) *User {
|
|
return &User{
|
|
ID: c.AdminUserID,
|
|
Name: c.Name,
|
|
Password: c.Password,
|
|
Email: c.Email,
|
|
NIK: c.NIK,
|
|
PhoneNumber: c.PhoneNumber,
|
|
Status: userstatus.UserStatus(c.Status),
|
|
PartnerID: partnerID,
|
|
}
|
|
}
|
|
|
|
func (Partner) TableName() string {
|
|
return "partners"
|
|
}
|
|
|
|
type PartnerSearch struct {
|
|
Search string
|
|
PartnerID *int64
|
|
Name string
|
|
Limit int
|
|
Offset int
|
|
}
|
|
|
|
type PartnerList []*PartnerDB
|
|
|
|
type PartnerDB struct {
|
|
Partner
|
|
}
|
|
|
|
type PartnerDBSearch struct {
|
|
Partner
|
|
WalletBalance float64 `gorm:"type:number;column:wallet_balance"`
|
|
AdminName string `gorm:"type:varchar;column:admin_name"`
|
|
AdminEmail string `gorm:"type:varchar;column:admin_email"`
|
|
AdminPhoneNumber string `gorm:"type:varchar;column:admin_phone_number"`
|
|
}
|
|
|
|
func (p *Partner) ToPartnerDB() *PartnerDB {
|
|
return &PartnerDB{
|
|
Partner: *p,
|
|
}
|
|
}
|
|
|
|
func (PartnerDB) TableName() string {
|
|
return "partners"
|
|
}
|
|
|
|
func (e *PartnerDB) ToPartner() *Partner {
|
|
return &Partner{
|
|
ID: e.ID,
|
|
Name: e.Name,
|
|
Status: e.Status,
|
|
Address: e.Address,
|
|
CreatedAt: e.CreatedAt,
|
|
UpdatedAt: e.UpdatedAt,
|
|
CreatedBy: e.CreatedBy,
|
|
Balance: e.Balance,
|
|
AdminEmail: e.AdminEmail,
|
|
AdminPhoneNumber: e.AdminPhoneNumber,
|
|
AdminName: e.AdminName,
|
|
BankAccountHolderName: e.BankAccountHolderName,
|
|
BankName: e.BankName,
|
|
BankAccountNumber: e.BankAccountNumber,
|
|
Logo: e.Logo,
|
|
}
|
|
}
|
|
|
|
func (p *PartnerList) ToPartnerList() []*Partner {
|
|
var partners []*Partner
|
|
for _, partner := range *p {
|
|
partners = append(partners, partner.ToPartner())
|
|
}
|
|
return partners
|
|
}
|
|
|
|
func (o *PartnerDB) ToUpdatedPartner(updatedBy int64, req Partner) {
|
|
o.UpdatedBy = updatedBy
|
|
|
|
if req.Name != "" {
|
|
o.Name = req.Name
|
|
}
|
|
|
|
if req.Status != "" {
|
|
o.Status = req.Status
|
|
}
|
|
|
|
if req.Address != "" {
|
|
o.Address = req.Address
|
|
}
|
|
|
|
if req.BankAccountNumber != "" {
|
|
o.BankAccountNumber = req.BankAccountNumber
|
|
}
|
|
|
|
if req.BankAccountHolderName != "" {
|
|
o.BankAccountHolderName = req.BankAccountHolderName
|
|
}
|
|
|
|
if req.Status != "" {
|
|
o.Status = req.Status
|
|
}
|
|
}
|
|
|
|
func (o *PartnerDB) ToUpdatedPartnerData(updatedBy int64, req PartnerUpdate) {
|
|
o.UpdatedBy = updatedBy
|
|
|
|
if req.Name != "" {
|
|
o.Name = req.Name
|
|
}
|
|
|
|
if req.Status != "" {
|
|
o.Status = req.Status
|
|
}
|
|
|
|
if req.Address != "" {
|
|
o.Address = req.Address
|
|
}
|
|
|
|
if req.BankName != "" {
|
|
o.BankName = req.BankName
|
|
}
|
|
|
|
if req.BankAccountNumber != "" {
|
|
o.BankAccountNumber = req.BankAccountNumber
|
|
}
|
|
|
|
if req.BankAccountHolderName != "" {
|
|
o.BankAccountHolderName = req.BankAccountHolderName
|
|
}
|
|
|
|
if req.Status != "" {
|
|
o.Status = req.Status
|
|
}
|
|
|
|
if req.Logo != "" {
|
|
o.Logo = req.Logo
|
|
}
|
|
}
|
|
|
|
func (o *PartnerDB) SetDeleted(updatedBy int64) {
|
|
currentTime := time.Now()
|
|
o.DeletedAt = ¤tTime
|
|
o.UpdatedBy = updatedBy
|
|
}
|
|
|
|
func (c *CreatePartnerRequest) ToUserAdmin(partnerID int64) *User {
|
|
return &User{
|
|
Name: c.FullName,
|
|
Password: c.Password,
|
|
Email: c.Email,
|
|
NIK: c.NIK,
|
|
PhoneNumber: c.PhoneNumber,
|
|
Status: "Active",
|
|
RoleID: role.PartnerAdmin,
|
|
PartnerID: &partnerID,
|
|
}
|
|
}
|
|
|
|
func (e *CreatePartnerRequest) ToPartnerDB(createdBy int64) *PartnerDB {
|
|
twoDays := 48 * time.Hour
|
|
licenseExpiredDate := time.Now().Add(twoDays)
|
|
|
|
return &PartnerDB{
|
|
Partner: Partner{
|
|
Name: e.Name,
|
|
Status: e.Status,
|
|
Address: e.Address,
|
|
CreatedBy: createdBy,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
BankAccountHolderName: e.BankAccountHolderName,
|
|
BankAccountNumber: e.BankAccountNumber,
|
|
BankName: e.BankName,
|
|
LicenseExpiredDate: &licenseExpiredDate,
|
|
Logo: e.Logo,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (e *CreatePartnerRequest) ToWallet(partnerID int64) *Wallet {
|
|
return &Wallet{
|
|
PartnerID: partnerID,
|
|
Balance: 0,
|
|
Currency: "IDR",
|
|
Status: "active",
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
}
|