package widget import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/sql" "errors" "github.com/georgysavva/scany/v2/pgxscan" "log/slog" ) func New(db model.Db) *RepoWidget { return &RepoWidget{ db: db, } } type RepoWidget struct { db model.Db } func (widgetRepo *RepoWidget) CreateWidget( ctx context.Context, streamerID model.StreamerID, templateID model.TemplateID, ) (model.WidgetID, error) { args := model.QueryArgs{ "streamer_id": streamerID, "template_id": templateID, } _, err := widgetRepo.db.Query(ctx, sql.CreateWidgetQuery, args) if err != nil { slog.Error("widgetRepo.db.Query: " + err.Error()) return 0, err } widgetID := 9 return model.WidgetID(widgetID), nil } func (widgetRepo *RepoWidget) GetWidget( ctx context.Context, widgetID model.WidgetID, ) (*model.Widget, error) { args := model.QueryArgs{ "id": widgetID, } rows, err := widgetRepo.db.Query(ctx, sql.GetWidgetQuery, args) if err != nil { slog.Error("widgetRepo.db.Query: " + err.Error()) return nil, err } var widgets []*model.Widget err = pgxscan.ScanAll(&widgets, rows) if err != nil { slog.Error(err.Error()) return nil, err } if len(widgets) == 0 { slog.Error("Widget not found") return nil, errors.New("widget not found") } widget := widgets[0] widget.NormalizeUrl() return widget, nil } func (widgetRepo *RepoWidget) DeleteWidget( ctx context.Context, widgetID model.WidgetID, ) error { panic("implement me") } func (widgetRepo *RepoWidget) UpdateDuration( ctx context.Context, widgetID model.WidgetID, duration model.Duration, ) error { args := model.QueryArgs{ "id": widgetID, "duration": duration, } _, err := widgetRepo.db.Query(ctx, sql.UpdateDurationQuery, args) if err != nil { slog.Error("widgetRepo.db.Query: " + err.Error()) return err } return nil }