aditya.siregar 350c670d04 Update logo
2024-08-15 20:33:33 +07:00

254 lines
6.7 KiB
Go

package entity
import (
"furtuna-be/internal/constants/role"
"furtuna-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
BankAccountHolderNumber 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.BankAccountHolderNumber != "" {
o.BankAccountNumber = req.BankAccountHolderNumber
}
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 = &currentTime
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(),
}
}