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, streamerID, 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 } func (donatService *ServiceDonat) GetInnerDonatPage( ctx context.Context, streamerID model.StreamerID, ) (model.InnerDonatePageResponse, error) { return model.InnerDonatePageResponse{}, nil } func (donatService *ServiceDonat) GetOuterDonatPage( ctx context.Context, streamerID model.StreamerID, ) (model.OuterDonatePageResponse, error) { return model.OuterDonatePageResponse{}, nil } func (donatService *ServiceDonat) UpdateDonatePage( ctx context.Context, streamerID model.StreamerID, updateModel model.UpdateDonatPage, ) error { return nil } func (donatService *ServiceDonat) GetVoiceSettings( ctx context.Context, streamerID model.StreamerID, ) (model.VoiceSettingsResponse, error) { return model.VoiceSettingsResponse{}, nil } func (donatService *ServiceDonat) UpdateVoiceSettings( ctx context.Context, streamerID model.StreamerID, updateModel model.UpdateVoiceSettings, ) error { return nil } func (donatService *ServiceDonat) GetFiltersSettings( ctx context.Context, streamerID model.StreamerID, ) (model.FilterSettingResponse, error) { return model.FilterSettingResponse{}, nil } func (donatService *ServiceDonat) UpdateFiltersSettings( ctx context.Context, streamerID model.StreamerID, updateModel model.UpdateFilterSettings, ) error { return nil } func (donatService *ServiceDonat) GetModerationSettings( ctx context.Context, streamerID model.StreamerID, ) (model.ModerationResponse, error) { return model.ModerationResponse{}, nil } func (donatService *ServiceDonat) UpdateModerationSettings( ctx context.Context, streamerID model.StreamerID, updateModel model.UpdateModeration, ) error { return nil }