2024-10-29 22:07:14 +05:00

120 lines
2.5 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(err.Error())
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(err.Error())
return api.CreatePaymentResponse{}, err
}
createPaymentResponse, err := donatService.paymentClient.CreatePayment(streamerID, amount, orderID)
if err != nil {
slog.Error(err.Error())
return api.CreatePaymentResponse{}, err
}
return createPaymentResponse, nil
}
func (donatService *ServiceDonat) GetDonatByStreamerID(
ctx context.Context,
streamerID model.StreamerID,
) ([]*model.Donat, error) {
donats, err := donatService.donatRepo.GetDonatByStreamerID(ctx, streamerID)
if err != nil {
slog.Error(err.Error())
return nil, err
}
return donats, nil
}
func (donatService *ServiceDonat) GetDonatByOrderID(
ctx context.Context,
orderID model.OrderID,
) (*model.Donat, error) {
donat, err := donatService.donatRepo.GetDonatByOrderID(ctx, orderID)
if err != nil {
slog.Error(err.Error())
return nil, err
}
return donat, nil
}
func (donatService *ServiceDonat) MarkDonatPaid(
ctx context.Context,
orderID model.OrderID,
) error {
err := donatService.donatRepo.MarkDonatPaid(
ctx,
orderID,
)
if err != nil {
slog.Error(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
}