package donat import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/api" "fmt" "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 } fmt.Println(widgets) 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 }