2024-10-21 10:31:25 +05:00

102 lines
2.1 KiB
Go

package donat
import (
"context"
"donat-widget/internal/model"
"donat-widget/internal/model/api"
"log/slog"
)
type ServiceDonat struct {
donatRepo model.DonatRepo
widgetRepo model.WidgetRepo
paymentClient model.PaymentClient
}
func New(
donatRepo model.DonatRepo,
widgetRepo model.WidgetRepo,
paymentClient model.PaymentClient,
) *ServiceDonat {
return &ServiceDonat{
donatRepo: donatRepo,
widgetRepo: widgetRepo,
paymentClient: paymentClient,
}
}
func (donatService *ServiceDonat) CreateDonat(
ctx context.Context,
streamerID model.StreamerID,
orderID model.OrderID,
targetID model.TargetID,
amount model.DonatAmount,
text string,
donatUser string,
) (api.CreatePaymentResponse, error) {
widgets, err := donatService.widgetRepo.GetAllWidget(ctx, streamerID)
if err != nil {
slog.Error("donatService.widgetRepo.GetAllWidget: ", err)
return api.CreatePaymentResponse{}, err
}
var widgetID model.WidgetID
for _, widget := range widgets {
if widget.MinAmount <= amount {
widgetID = widget.ID
}
}
err = donatService.donatRepo.CreateDonat(
ctx,
widgetID,
orderID,
targetID,
amount,
text,
donatUser,
)
if err != nil {
slog.Error("donatService.donatRepo.CreateDonat: " + err.Error())
return api.CreatePaymentResponse{}, err
}
createPaymentResponse, err := donatService.paymentClient.CreatePayment(streamerID, amount, orderID)
if err != nil {
slog.Error("donatService.paymentClient.CreatePayment: " + err.Error())
return api.CreatePaymentResponse{}, err
}
return createPaymentResponse, nil
}
func (donatService *ServiceDonat) MarkDonatPaid(
ctx context.Context,
orderID model.OrderID,
) error {
err := donatService.donatRepo.MarkDonatPaid(
ctx,
orderID,
)
if err != nil {
slog.Error("donatService.donatRepo.MarkDonatView: " + err.Error())
return err
}
return nil
}
func (donatService *ServiceDonat) MarkDonatView(
ctx context.Context,
donatID model.DonatID,
) error {
err := donatService.donatRepo.MarkDonatView(
ctx,
donatID,
)
if err != nil {
slog.Error("donatService.donatRepo.MarkDonatView: " + err.Error())
return err
}
return nil
}