package widget import ( "context" "donat-widget/internal/model" "errors" "log/slog" ) func New( widgetRepo model.WidgetRepo, ) *ServiceWidget { return &ServiceWidget{ widgetRepo: widgetRepo, } } type ServiceWidget struct { widgetRepo model.WidgetRepo } func (widgetService *ServiceWidget) CreateWidget( ctx context.Context, streamerID model.StreamerID, templateID model.TemplateID, duration model.Duration, minAmount model.DonatAmount, ) (model.WidgetID, error) { widgetID, err := widgetService.widgetRepo.CreateWidget( ctx, streamerID, templateID, duration, minAmount, ) if err != nil { slog.Error(err.Error()) return 0, err } return widgetID, nil } func (widgetService *ServiceWidget) GetWidgetHTML( ctx context.Context, streamerID model.StreamerID, ) (model.WidgetHTML, error) { widgets, err := widgetService.widgetRepo.GetWidgetByStreamerID(ctx, streamerID) if err != nil { slog.Error(err.Error()) return "", err } if len(widgets) == 0 { return "", errors.New("widget not found") } widget := widgets[0] var widgetHTML model.WidgetHTML if widget.TemplateID == 1 { widgetHTML = model.GetTemplate1( streamerID, widget.BackgroundUrl, ) } return widgetHTML, nil } func (widgetService *ServiceWidget) GetWidgetByID( ctx context.Context, widgetID model.WidgetID, ) ([]*model.Widget, error) { widget, err := widgetService.widgetRepo.GetWidgetByID(ctx, widgetID) if err != nil { slog.Error(err.Error()) return nil, err } return widget, nil } func (widgetService *ServiceWidget) SetMediaFile( ctx context.Context, mediaType model.MediaType, widgetID model.WidgetID, file model.UploadFile, filename string, size int64, collection string, ) error { fileID, err := widgetService.widgetRepo.SetMediaFile( file, filename, size, collection, ) if err != nil { slog.Error(err.Error()) return err } err = widgetService.SetMediaUrl( ctx, mediaType, widgetID, model.MediaUrl(fileID), ) if err != nil { slog.Error(err.Error()) return err } return nil } func (widgetService *ServiceWidget) GetMediaFile( ctx context.Context, widgetID model.WidgetID, mediaType model.MediaType, ) (model.DownloadFile, error) { fileID, err := widgetService.widgetRepo.GetMediaUrl( ctx, widgetID, mediaType, ) if err != nil { slog.Error(err.Error()) return nil, err } file, err := widgetService.widgetRepo.GetMediaFile( model.FileID(fileID), ) if err != nil { slog.Error(err.Error()) return nil, err } return file, nil } func (widgetService *ServiceWidget) SetMediaUrl( ctx context.Context, mediaType model.MediaType, widgetID model.WidgetID, mediaUrl model.MediaUrl, ) error { err := widgetService.widgetRepo.SetMediaUrl( ctx, widgetID, mediaUrl, mediaType, ) if err != nil { slog.Error(err.Error()) return err } return nil }