160 lines
2.8 KiB
Go
160 lines
2.8 KiB
Go
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
|
|
}
|