2025-03-06 17:12:39 +05:00

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
//}