Update template
This commit is contained in:
@@ -55,6 +55,13 @@ type Customer struct {
|
||||
OTP string
|
||||
}
|
||||
|
||||
type CustomerPoints struct {
|
||||
ID uint64
|
||||
CustomerID uint64
|
||||
TotalPoints int
|
||||
AvailablePoints int
|
||||
}
|
||||
|
||||
type AuthenticateUser struct {
|
||||
ID int64
|
||||
Token string
|
||||
|
||||
@@ -18,6 +18,10 @@ type CustomerRepo interface {
|
||||
FindByPhone(ctx mycontext.Context, phone string) (*entity.Customer, error)
|
||||
FindByEmail(ctx mycontext.Context, email string) (*entity.Customer, error)
|
||||
AddPoints(ctx mycontext.Context, id int64, points int, reference string) error
|
||||
GetPointsByCustomerID(
|
||||
ctx mycontext.Context,
|
||||
customerID int64,
|
||||
) (*entity.CustomerPoints, error)
|
||||
FindSequence(ctx mycontext.Context, partnerID int64) (int64, error)
|
||||
GetAllCustomers(ctx mycontext.Context, req entity.MemberSearch) (entity.MemberList, int, error)
|
||||
VerifyOTP(ctx mycontext.Context, verificationHash string, otpCode string) (int64, error)
|
||||
@@ -172,6 +176,31 @@ func (r *customerRepository) AddPoints(ctx mycontext.Context, customerID int64,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *customerRepository) GetPointsByCustomerID(
|
||||
ctx mycontext.Context,
|
||||
customerID int64,
|
||||
) (*entity.CustomerPoints, error) {
|
||||
var cp models.CustomerPointsDB
|
||||
|
||||
if err := r.db.Where("customer_id = ?", customerID).First(&cp).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, errors.New("customer not found")
|
||||
}
|
||||
return nil, errors.Wrap(err, "failed to find customer point by customer_id")
|
||||
}
|
||||
|
||||
return r.toDomainCustomerPoint(cp), nil
|
||||
}
|
||||
|
||||
func (r *customerRepository) toDomainCustomerPoint(dbModel models.CustomerPointsDB) *entity.CustomerPoints {
|
||||
return &entity.CustomerPoints{
|
||||
ID: dbModel.ID,
|
||||
CustomerID: dbModel.CustomerID,
|
||||
TotalPoints: dbModel.TotalPoints,
|
||||
AvailablePoints: dbModel.AvailablePoints,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *customerRepository) toCustomerDBModel(customer *entity.Customer) models.CustomerDB {
|
||||
return models.CustomerDB{
|
||||
ID: customer.ID,
|
||||
|
||||
@@ -21,6 +21,10 @@ type Repository interface {
|
||||
FindByPhone(ctx mycontext.Context, phone string) (*entity.Customer, error)
|
||||
FindByEmail(ctx mycontext.Context, email string) (*entity.Customer, error)
|
||||
AddPoints(ctx mycontext.Context, id int64, points int, reference string) error
|
||||
GetPointsByCustomerID(
|
||||
ctx mycontext.Context,
|
||||
customerID int64,
|
||||
) (*entity.CustomerPoints, error)
|
||||
FindSequence(ctx mycontext.Context, partnerID int64) (int64, error)
|
||||
GetAllCustomers(ctx mycontext.Context, req entity.MemberSearch) (entity.MemberList, int, error)
|
||||
VerifyOTP(ctx mycontext.Context, verificationHash string, otpCode string) (int64, error)
|
||||
@@ -29,6 +33,7 @@ type Repository interface {
|
||||
type Service interface {
|
||||
ResolveCustomer(ctx mycontext.Context, req *entity.CustomerResolutionRequest) (int64, error)
|
||||
AddPoints(ctx mycontext.Context, customerID int64, points int, reference string) error
|
||||
GetCustomerPoints(ctx mycontext.Context, customerID int64) (*entity.CustomerPoints, error)
|
||||
GetCustomer(ctx mycontext.Context, id int64) (*entity.Customer, error)
|
||||
CustomerCheck(ctx mycontext.Context, req *entity.CustomerResolutionRequest) (*entity.CustomerCheckResponse, error)
|
||||
GetAllCustomers(ctx mycontext.Context, req *entity.MemberSearch) (*entity.MemberList, int, error)
|
||||
@@ -188,6 +193,15 @@ func (s *customerSvc) AddPoints(ctx mycontext.Context, customerID int64, points
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *customerSvc) GetCustomerPoints(ctx mycontext.Context, customerID int64) (*entity.CustomerPoints, error) {
|
||||
cp, err := s.repo.GetPointsByCustomerID(ctx, customerID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to add points to customer")
|
||||
}
|
||||
|
||||
return cp, nil
|
||||
}
|
||||
|
||||
func (s *customerSvc) GetCustomer(ctx mycontext.Context, id int64) (*entity.Customer, error) {
|
||||
customer, err := s.repo.FindByID(ctx, id)
|
||||
if err != nil {
|
||||
|
||||
@@ -52,7 +52,7 @@ func (s *orderSvc) processPostOrderActions(
|
||||
}
|
||||
|
||||
if order.CustomerID != nil && *order.CustomerID > 0 {
|
||||
err = s.addCustomerPoints(ctx, *order.CustomerID, int(order.Total/1000), fmt.Sprintf("TRX #%s", trx.ID))
|
||||
err = s.addCustomerPoints(ctx, *order.CustomerID, int(order.Total/50000), fmt.Sprintf("TRX #%s", trx.ID))
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when adding points", zap.Error(err))
|
||||
}
|
||||
@@ -84,10 +84,21 @@ func (s *orderSvc) addCustomerPoints(ctx mycontext.Context, customerID int64, po
|
||||
}
|
||||
|
||||
func (s *orderSvc) sendTransactionReceipt(ctx mycontext.Context, order *entity.Order, transaction *entity.Transaction, paymentMethod string) error {
|
||||
newPoint := int(order.Total / 50000)
|
||||
|
||||
if newPoint <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if order.CustomerID == nil || *order.CustomerID == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
customerPoint, err := s.customer.GetCustomerPoints(ctx, *order.CustomerID)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
customer, err := s.customer.GetCustomer(ctx, *order.CustomerID)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error getting customer details", zap.Error(err))
|
||||
@@ -133,14 +144,15 @@ func (s *orderSvc) sendTransactionReceipt(ctx mycontext.Context, order *entity.O
|
||||
}
|
||||
|
||||
transactionDate := transaction.CreatedAt.Format("02 January 2006 15:04")
|
||||
viewTransactionLink := fmt.Sprintf("https://enaklo.co.id/transaction/%s", transaction.ID)
|
||||
viewTransactionLink := "https://web.enaklo.co.id"
|
||||
|
||||
emailData := map[string]interface{}{
|
||||
"UserName": customer.Name,
|
||||
"PointsName": "ELP",
|
||||
"PointsBalance": int(order.Total / 1000),
|
||||
"NewPoints": int(order.Total / 1000),
|
||||
"RedeemLink": "enaklo.co.id",
|
||||
"PointsName": "Point",
|
||||
"PointsBalance": newPoint,
|
||||
"NewPoints": newPoint,
|
||||
"TotalPoints": customerPoint.TotalPoints,
|
||||
"RedeemLink": "web.enaklo.co.id",
|
||||
"BranchName": branchName,
|
||||
"TransactionNumber": order.ID,
|
||||
"TransactionDate": transactionDate,
|
||||
@@ -149,6 +161,8 @@ func (s *orderSvc) sendTransactionReceipt(ctx mycontext.Context, order *entity.O
|
||||
"TotalPayment": fmt.Sprintf("Rp %s", formatCurrency(order.Total)),
|
||||
"ViewTransactionLink": viewTransactionLink,
|
||||
"ExpiryDate": order.CreatedAt.Format("02 January 2006"),
|
||||
"UndianDate": "17 Mei 2025",
|
||||
"WebURL": "https://web.enaklo.co.id/undian",
|
||||
}
|
||||
|
||||
return s.notification.SendEmailTransactional(ctx, entity.SendEmailNotificationParam{
|
||||
|
||||
@@ -44,6 +44,7 @@ type CustomerService interface {
|
||||
ResolveCustomer(ctx mycontext.Context, req *entity.CustomerResolutionRequest) (int64, error)
|
||||
AddPoints(ctx mycontext.Context, customerID int64, points int, reference string) error
|
||||
GetCustomer(ctx mycontext.Context, id int64) (*entity.Customer, error)
|
||||
GetCustomerPoints(ctx mycontext.Context, customerID int64) (*entity.CustomerPoints, error)
|
||||
}
|
||||
|
||||
type TransactionService interface {
|
||||
|
||||
Reference in New Issue
Block a user