2024-10-21 10:31:25 +05:00

238 lines
4.8 KiB
Go

package widget
import (
"context"
"donat-widget/internal/model"
"log/slog"
)
func New(
widgetRepo model.WidgetRepo,
donatRepo model.DonatRepo,
) *ServiceWidget {
return &ServiceWidget{
widgetRepo: widgetRepo,
donatRepo: donatRepo,
}
}
type ServiceWidget struct {
widgetRepo model.WidgetRepo
donatRepo model.DonatRepo
}
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("widgetService.widgetRepo.CreateWidget: " + err.Error())
return 0, err
}
return widgetID, nil
}
func (widgetService *ServiceWidget) DeleteWidget(
ctx context.Context,
widgetID model.WidgetID,
) error {
err := widgetService.widgetRepo.DeleteWidget(ctx, widgetID)
if err != nil {
slog.Error("widgetService.widgetRepo.DeleteWidget: " + err.Error())
return err
}
return nil
}
func (widgetService *ServiceWidget) UpdateDuration(
ctx context.Context,
widgetID model.WidgetID,
duration model.Duration,
) error {
err := widgetService.widgetRepo.UpdateDuration(ctx, widgetID, duration)
if err != nil {
slog.Error("widgetService.widgetRepo.UpdateDuration: " + err.Error())
return err
}
return nil
}
func (widgetService *ServiceWidget) GetWidgetHTML(
ctx context.Context,
widgetID model.WidgetID,
) (model.WidgetHTML, error) {
var widgetHTML model.WidgetHTML
widget, err := widgetService.widgetRepo.GetWidget(ctx, widgetID)
if err != nil {
slog.Error("widgetService.widgetRepo.GetWidget: " + err.Error())
return widgetHTML, err
}
if widget.TemplateID == 1 {
widgetHTML = model.GetTemplate1(
widgetID,
widget.BackgroundUrl,
)
}
return widgetHTML, nil
}
func (widgetService *ServiceWidget) GetWidgetInfo(
ctx context.Context,
widgetID model.WidgetID,
) (*model.DonatAndWidget, error) {
widget, err := widgetService.widgetRepo.GetWidget(ctx, widgetID)
if err != nil {
slog.Error("widgetService.widgetRepo.GetWidget: " + err.Error())
return nil, err
}
donats, err := widgetService.donatRepo.GetDonat(ctx, widgetID)
if err != nil {
slog.Error("widgetService.donatRepo.GetDonat: " + err.Error())
return nil, err
}
var donatAndWidget model.DonatAndWidget
if len(donats) == 0 {
donatAndWidget = model.DonatAndWidget{
Display: false,
}
} else {
donatAndWidget = model.DonatAndWidget{
Widget: widget,
Donat: donats[0],
Display: true,
}
}
return &donatAndWidget, 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("mediaService.mediaRepo.SetMediaFile: " + err.Error())
return err
}
err = widgetService.SetMediaUrl(
ctx,
mediaType,
widgetID,
model.MediaUrl(fileID),
)
if err != nil {
slog.Error("mediaService.SetMediaUrl: " + 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("mediaService.mediaRepo.GetMediaUrl: " + err.Error())
return nil, err
}
file, err := widgetService.widgetRepo.GetMediaFile(
model.FileID(fileID),
)
if err != nil {
slog.Error("mediaService.mediaRepo.GetMediaFile: " + err.Error())
return nil, err
}
return file, nil
}
func (widgetService *ServiceWidget) UpdateMediaFile(
ctx context.Context,
widgetID model.WidgetID,
mediaType model.MediaType,
file model.UploadFile,
filename string,
size int64,
collection string,
) error {
fileID, err := widgetService.widgetRepo.GetMediaUrl(
ctx,
widgetID,
mediaType,
)
if err != nil {
slog.Error("mediaService.mediaRepo.GetMediaUrl: " + err.Error())
return err
}
err = widgetService.widgetRepo.UpdateMediaFile(
ctx,
widgetID,
file,
model.FileID(fileID),
filename,
size,
collection,
mediaType,
)
if err != nil {
slog.Error("mediaService.mediaRepo.UpdateMediaFile: " + err.Error())
return err
}
return 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("mediaService.mediaRepo.SetMediaUrl: " + err.Error())
return err
}
return nil
}