324 lines
6.5 KiB
Go
324 lines
6.5 KiB
Go
package widget
|
|
|
|
import (
|
|
"context"
|
|
"donat-widget/internal/model"
|
|
"donat-widget/internal/model/sql"
|
|
"errors"
|
|
"github.com/georgysavva/scany/v2/pgxscan"
|
|
"github.com/google/uuid"
|
|
"github.com/jackc/pgx/v5"
|
|
"log/slog"
|
|
)
|
|
|
|
func New(
|
|
db model.Db,
|
|
storage model.Storage,
|
|
) *RepoWidget {
|
|
return &RepoWidget{
|
|
db: db,
|
|
storage: storage,
|
|
}
|
|
}
|
|
|
|
type RepoWidget struct {
|
|
db model.Db
|
|
storage model.Storage
|
|
}
|
|
|
|
func (widgetRepo *RepoWidget) CreateWidget(
|
|
ctx context.Context,
|
|
streamerID int,
|
|
templateID int,
|
|
duration int,
|
|
minAmount int,
|
|
maxAmount int,
|
|
image string,
|
|
audio string,
|
|
name string,
|
|
) (model.WidgetID, error) {
|
|
args := pgx.NamedArgs{
|
|
"streamer_id": streamerID,
|
|
"template_id": templateID,
|
|
"duration": duration,
|
|
"min_amount": minAmount,
|
|
"max_amount": maxAmount,
|
|
"image": image,
|
|
"audio": audio,
|
|
"name": name,
|
|
}
|
|
widgetID, err := widgetRepo.db.Insert(ctx, sql.CreateWidget, args)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return 0, err
|
|
}
|
|
|
|
return model.WidgetID(widgetID.(int32)), nil
|
|
}
|
|
|
|
func (widgetRepo *RepoWidget) CheckWidgetName(
|
|
ctx context.Context,
|
|
streamerID int,
|
|
name string,
|
|
) (bool, error) {
|
|
args := pgx.NamedArgs{
|
|
"streamer_id": streamerID,
|
|
"name": name,
|
|
}
|
|
row, err := widgetRepo.db.SelectOne(ctx, sql.GetWidgetByName, args)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return false, err
|
|
}
|
|
|
|
if row == nil {
|
|
return false, nil
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func (widgetRepo *RepoWidget) GetWidgetsByStreamerID(
|
|
ctx context.Context,
|
|
streamerID int,
|
|
) ([]*model.GetWidgetDb, error) {
|
|
args := pgx.NamedArgs{"streamer_id": streamerID}
|
|
rows, err := widgetRepo.db.Select(ctx, sql.GetWidgetsByStreamerID, args)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return nil, err
|
|
}
|
|
|
|
var widgets []*model.GetWidgetDb
|
|
err = pgxscan.ScanAll(&widgets, rows)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return nil, err
|
|
}
|
|
|
|
return widgets, nil
|
|
}
|
|
|
|
func (widgetRepo *RepoWidget) UpdateWidget(
|
|
ctx context.Context,
|
|
widgetID int,
|
|
duration *int,
|
|
minAmount *int,
|
|
maxAmount *int,
|
|
isActive *bool,
|
|
image *uuid.UUID,
|
|
audio *uuid.UUID,
|
|
name *string,
|
|
) error {
|
|
args := pgx.NamedArgs{
|
|
"id": widgetID,
|
|
}
|
|
|
|
if duration != nil {
|
|
args["duration"] = *duration
|
|
}
|
|
if minAmount != nil {
|
|
args["min_amount"] = *minAmount
|
|
}
|
|
if maxAmount != nil {
|
|
args["max_amount"] = *maxAmount
|
|
}
|
|
if image != nil {
|
|
args["image"] = *image
|
|
}
|
|
if audio != nil {
|
|
args["audio"] = *audio
|
|
}
|
|
if name != nil {
|
|
args["name"] = *name
|
|
}
|
|
if isActive != nil {
|
|
args["is_active"] = *isActive
|
|
}
|
|
|
|
err := widgetRepo.db.Update(ctx, sql.UpdateWidget, args)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (widgetRepo *RepoWidget) WidgetByID(
|
|
ctx context.Context,
|
|
widgetID int,
|
|
accountID int,
|
|
) error {
|
|
args := pgx.NamedArgs{
|
|
"widget_id": widgetID,
|
|
"streamer_id": accountID,
|
|
}
|
|
|
|
row, err := widgetRepo.db.SelectOne(ctx, sql.GetWidgetById, args)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return err
|
|
}
|
|
|
|
if row == nil {
|
|
return errors.New("Widget not exists!")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//
|
|
//func (widgetRepo *RepoWidget) GetWidgetByID(
|
|
// ctx context.Context,
|
|
// widgetID model.WidgetID,
|
|
//) ([]*model.GetWidgetDb, error) {
|
|
// args := pgx.NamedArgs{"id": widgetID}
|
|
// rows, err := widgetRepo.db.Select(ctx, sql.GetWidgetByID, args)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// var widgets []*model.GetWidgetDb
|
|
// err = pgxscan.ScanAll(&widgets, rows)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// return widgets, nil
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) GetAllWidget(
|
|
// ctx context.Context,
|
|
// streamerID model.StreamerID,
|
|
//) ([]*model.GetWidgetDb, error) {
|
|
// args := pgx.NamedArgs{
|
|
// "streamer_id": streamerID,
|
|
// }
|
|
// rows, err := widgetRepo.db.Select(ctx, sql.GetAllWidget, args)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// var widgets []*model.GetWidgetDb
|
|
// err = pgxscan.ScanAll(&widgets, rows)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// return widgets, nil
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) SetMediaFile(
|
|
// file model.UploadFile,
|
|
// filename string,
|
|
// size int64,
|
|
// collection string,
|
|
//) (model.FileID, error) {
|
|
// fileID, err := widgetRepo.storage.Upload(file, filename, size, collection)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return "", err
|
|
// }
|
|
//
|
|
// return fileID, nil
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) GetMediaFile(
|
|
// fileID model.FileID,
|
|
//) (model.DownloadFile, error) {
|
|
// file, err := widgetRepo.storage.Download(fileID)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return nil, err
|
|
// }
|
|
//
|
|
// return file, err
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) UpdateMediaFile(
|
|
// ctx context.Context,
|
|
// widgetID model.WidgetID,
|
|
// file model.UploadFile,
|
|
// fileID model.FileID,
|
|
// filename string,
|
|
// size int64,
|
|
// collection string,
|
|
// mediaType model.MediaType,
|
|
//) error {
|
|
// err := widgetRepo.storage.Update(file, fileID, filename, size, collection)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return err
|
|
// }
|
|
//
|
|
// mediaType = mediaType + "_url"
|
|
// args := pgx.NamedArgs{
|
|
// string(mediaType): model.MediaUrl(fileID),
|
|
// "id": widgetID,
|
|
// }
|
|
// err = widgetRepo.db.Update(ctx, sql.UpdateMediaUrl(mediaType), args)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return err
|
|
// }
|
|
//
|
|
// return nil
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) SetMediaUrl(
|
|
// ctx context.Context,
|
|
// widgetID model.WidgetID,
|
|
// mediaUrl model.MediaUrl,
|
|
// mediaType model.MediaType,
|
|
//) error {
|
|
// mediaType = mediaType + "_url"
|
|
//
|
|
// args := pgx.NamedArgs{
|
|
// string(mediaType): mediaUrl,
|
|
// "id": widgetID,
|
|
// }
|
|
// err := widgetRepo.db.Update(ctx, sql.UpdateMediaUrl(mediaType), args)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return err
|
|
// }
|
|
// return nil
|
|
//}
|
|
//
|
|
//func (widgetRepo *RepoWidget) GetMediaUrl(
|
|
// ctx context.Context,
|
|
// widgetID model.WidgetID,
|
|
// mediaType model.MediaType,
|
|
//) (model.MediaUrl, error) {
|
|
// mediaType = mediaType + "_url"
|
|
// args := pgx.NamedArgs{
|
|
// "id": widgetID,
|
|
// }
|
|
// rows, err := widgetRepo.db.Select(ctx, sql.GetMediaUrl(mediaType), args)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return "", err
|
|
// }
|
|
//
|
|
// var widgets []*model.GetWidgetDb
|
|
// err = pgxscan.ScanAll(&widgets, rows)
|
|
// if err != nil {
|
|
// slog.Error(err.Error())
|
|
// return "", err
|
|
// }
|
|
//
|
|
// if len(widgets) == 0 {
|
|
// slog.Error("GetWidgetDb does not exist")
|
|
// return "", errors.New("widget does not exist")
|
|
// }
|
|
//
|
|
// widget := widgets[0]
|
|
// mediaUrl := widget.GetMediaUrl(mediaType)
|
|
//
|
|
// return mediaUrl, nil
|
|
//}
|