Yimaru-BackEnd/internal/domain/shop_transaction.go

316 lines
11 KiB
Go

package domain
import (
"time"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
)
type ShopTransactionType int
const (
TRANSACTION_CASHOUT ShopTransactionType = iota
TRANSACTION_DEPOSIT
TRANSACTION_BET
)
type PaymentOption int64
const (
CASH_TRANSACTION PaymentOption = iota
TELEBIRR_TRANSACTION
ARIFPAY_TRANSACTION
BANK
)
// ShopTransaction only represents branch transactions
// This is only used for statistic data
type ShopTransaction struct {
ID int64
Amount Currency
BranchID int64
CompanyID int64
UserID int64
Type ShopTransactionType
PaymentOption PaymentOption
FullName string
PhoneNumber string
// Payment Details for bank
BankCode ValidString
BeneficiaryName ValidString
AccountName ValidString
AccountNumber ValidString
ReferenceNumber ValidString
Verified bool
ApprovedBy ValidInt64
UpdatedAt time.Time
CreatedAt time.Time
}
type ShopTransactionRes struct {
ID int64 `json:"id" example:"1"`
Amount float32 `json:"amount" example:"100.0"`
BranchID int64 `json:"branch_id" example:"1"`
BranchName string `json:"branch_name" example:"Branch Name"`
BranchLocation string `json:"branch_location" example:"Branch Location"`
CompanyID int64 `json:"company_id" example:"1"`
UserID int64 `json:"user_id" example:"1"`
CreatorFirstName string `json:"creator_first_name" example:"John"`
CreatorLastName string `json:"creator_last_name" example:"Smith"`
CreatorPhoneNumber string `json:"creator_phone_number" example:"0911111111"`
CashierName string `json:"cashier_name" example:"John Smith"`
Type int64 `json:"type" example:"1"`
PaymentOption PaymentOption `json:"payment_option" example:"1"`
FullName string `json:"full_name" example:"John Smith"`
PhoneNumber string `json:"phone_number" example:"0911111111"`
BankCode string `json:"bank_code"`
BeneficiaryName string `json:"beneficiary_name"`
AccountName string `json:"account_name"`
AccountNumber string `json:"account_number"`
ReferenceNumber string `json:"reference_number"`
Verified bool `json:"verified" example:"true"`
ApprovedBy int64 `json:"approved_by" example:"1"`
ApproverFirstName string `json:"approver_first_name" example:"John"`
ApproverLastName string `json:"approver_last_name" example:"Smith"`
ApproverPhoneNumber string `json:"approver_phone_number" example:"0911111111"`
UpdatedAt time.Time `json:"updated_at"`
CreatedAt time.Time `json:"created_at"`
}
type ShopTransactionDetail struct {
ID int64
Amount Currency
BranchID int64
BranchName string
BranchLocation string
CompanyID int64
UserID int64
CreatorFirstName string
CreatorLastName string
CreatorPhoneNumber string
Type ShopTransactionType
PaymentOption PaymentOption
FullName string
PhoneNumber string
// Payment Details for bank
BankCode ValidString
BeneficiaryName ValidString
AccountName ValidString
AccountNumber ValidString
ReferenceNumber ValidString
Verified bool
ApprovedBy ValidInt64
ApproverFirstName ValidString
ApproverLastName ValidString
ApproverPhoneNumber ValidString
UpdatedAt time.Time
CreatedAt time.Time
}
type ShopTransactionFilter struct {
CompanyID ValidInt64
BranchID ValidInt64
UserID ValidInt64
Query ValidString
CreatedBefore ValidTime
CreatedAfter ValidTime
}
type CreateShopTransaction struct {
Amount Currency
BranchID int64
CompanyID int64
UserID int64
Type ShopTransactionType
PaymentOption PaymentOption
FullName string
PhoneNumber string
// Payment Details for bank
BankCode ValidString
BeneficiaryName ValidString
AccountName ValidString
AccountNumber ValidString
ReferenceNumber ValidString
Verified bool
ApprovedBy ValidInt64
}
func ConvertShopTransaction(transaction ShopTransaction) ShopTransactionRes {
newTransaction := ShopTransactionRes{
ID: transaction.ID,
Amount: transaction.Amount.Float32(),
BranchID: transaction.BranchID,
CompanyID: transaction.CompanyID,
UserID: transaction.UserID,
Type: int64(transaction.Type),
PaymentOption: transaction.PaymentOption,
FullName: transaction.FullName,
PhoneNumber: transaction.PhoneNumber,
BankCode: transaction.BankCode.Value,
BeneficiaryName: transaction.BeneficiaryName.Value,
AccountName: transaction.AccountName.Value,
AccountNumber: transaction.AccountNumber.Value,
ReferenceNumber: transaction.ReferenceNumber.Value,
Verified: transaction.Verified,
ApprovedBy: transaction.ApprovedBy.Value,
CreatedAt: transaction.CreatedAt,
UpdatedAt: transaction.UpdatedAt,
}
return newTransaction
}
func ConvertShopTransactionDetail(transaction ShopTransactionDetail) ShopTransactionRes {
newTransaction := ShopTransactionRes{
ID: transaction.ID,
Amount: transaction.Amount.Float32(),
BranchID: transaction.BranchID,
BranchName: transaction.BranchName,
BranchLocation: transaction.BranchLocation,
CompanyID: transaction.CompanyID,
UserID: transaction.UserID,
CreatorFirstName: transaction.CreatorFirstName,
CreatorLastName: transaction.CreatorLastName,
CreatorPhoneNumber: transaction.CreatorPhoneNumber,
Type: int64(transaction.Type),
PaymentOption: transaction.PaymentOption,
FullName: transaction.FullName,
PhoneNumber: transaction.PhoneNumber,
BankCode: transaction.BankCode.Value,
BeneficiaryName: transaction.BeneficiaryName.Value,
AccountName: transaction.AccountName.Value,
AccountNumber: transaction.AccountNumber.Value,
ReferenceNumber: transaction.ReferenceNumber.Value,
Verified: transaction.Verified,
ApprovedBy: transaction.ApprovedBy.Value,
ApproverFirstName: transaction.ApproverFirstName.Value,
ApproverLastName: transaction.ApproverLastName.Value,
ApproverPhoneNumber: transaction.ApproverPhoneNumber.Value,
CreatedAt: transaction.CreatedAt,
UpdatedAt: transaction.UpdatedAt,
}
return newTransaction
}
type UpdateTransactionVerifiedReq struct {
Verified bool `json:"verified" example:"true"`
}
func ConvertDBShopTransaction(transaction dbgen.ShopTransaction) ShopTransaction {
return ShopTransaction{
ID: transaction.ID,
Amount: Currency(transaction.Amount),
BranchID: transaction.BranchID,
UserID: transaction.UserID,
Type: ShopTransactionType(transaction.Type),
PaymentOption: PaymentOption(transaction.PaymentOption),
FullName: transaction.FullName,
PhoneNumber: transaction.PhoneNumber,
BankCode: ValidString{
Value: transaction.BankCode.String,
Valid: transaction.BankCode.Valid,
},
BeneficiaryName: ValidString{
Value: transaction.BeneficiaryName.String,
Valid: transaction.BeneficiaryName.Valid,
},
AccountName: ValidString{
Value: transaction.AccountName.String,
Valid: transaction.AccountName.Valid,
},
AccountNumber: ValidString{
Value: transaction.AccountName.String,
Valid: transaction.AccountNumber.Valid,
},
ReferenceNumber: ValidString{
Value: transaction.ReferenceNumber.String,
Valid: transaction.ReferenceNumber.Valid,
},
ApprovedBy: ValidInt64{
Value: transaction.ApprovedBy.Int64,
Valid: transaction.ApprovedBy.Valid,
},
CreatedAt: transaction.CreatedAt.Time,
UpdatedAt: transaction.UpdatedAt.Time,
Verified: transaction.Verified,
CompanyID: transaction.CompanyID,
}
}
func ConvertDBShopTransactionDetail(transaction dbgen.ShopTransactionDetail) ShopTransactionDetail {
return ShopTransactionDetail{
ID: transaction.ID,
Amount: Currency(transaction.Amount),
BranchID: transaction.BranchID,
UserID: transaction.UserID,
CreatorFirstName: transaction.CreatorFirstName.String,
CreatorLastName: transaction.CreatorLastName.String,
CreatorPhoneNumber: transaction.CreatorPhoneNumber.String,
Type: ShopTransactionType(transaction.Type),
PaymentOption: PaymentOption(transaction.PaymentOption),
FullName: transaction.FullName,
PhoneNumber: transaction.PhoneNumber,
BankCode: ValidString{
Value: transaction.BankCode.String,
Valid: transaction.BankCode.Valid,
},
BeneficiaryName: ValidString{
Value: transaction.BeneficiaryName.String,
Valid: transaction.BeneficiaryName.Valid,
},
AccountName: ValidString{
Value: transaction.AccountName.String,
Valid: transaction.AccountName.Valid,
},
AccountNumber: ValidString{
Value: transaction.AccountName.String,
Valid: transaction.AccountNumber.Valid,
},
ReferenceNumber: ValidString{
Value: transaction.ReferenceNumber.String,
Valid: transaction.ReferenceNumber.Valid,
},
ApprovedBy: ValidInt64{
Value: transaction.ApprovedBy.Int64,
Valid: transaction.ApprovedBy.Valid,
},
ApproverFirstName: ValidString{
Value: transaction.ApproverFirstName.String,
Valid: transaction.ApproverFirstName.Valid,
},
ApproverLastName: ValidString{
Value: transaction.ApproverLastName.String,
Valid: transaction.ApproverLastName.Valid,
},
ApproverPhoneNumber: ValidString{
Value: transaction.ApproverPhoneNumber.String,
Valid: transaction.ApproverPhoneNumber.Valid,
},
CreatedAt: transaction.CreatedAt.Time,
UpdatedAt: transaction.UpdatedAt.Time,
Verified: transaction.Verified,
CompanyID: transaction.CompanyID,
BranchName: transaction.BranchName.String,
BranchLocation: transaction.BranchLocation.String,
}
}
func ConvertCreateShopTransaction(transaction CreateShopTransaction) dbgen.CreateShopTransactionParams {
return dbgen.CreateShopTransactionParams{
Amount: int64(transaction.Amount),
BranchID: transaction.BranchID,
UserID: transaction.UserID,
Type: int64(transaction.Type),
PaymentOption: int64(transaction.PaymentOption),
FullName: transaction.FullName,
PhoneNumber: transaction.PhoneNumber,
CompanyID: transaction.CompanyID,
BankCode: transaction.BankCode.ToPG(),
BeneficiaryName: transaction.BeneficiaryName.ToPG(),
AccountName: transaction.AccountName.ToPG(),
AccountNumber: transaction.AccountNumber.ToPG(),
ReferenceNumber: transaction.ReferenceNumber.ToPG(),
}
}