package target import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/sql" "github.com/georgysavva/scany/v2/pgxscan" "github.com/jackc/pgx/v5" "log/slog" ) func New(db model.Db) *RepoTarget { return &RepoTarget{ db: db, } } type RepoTarget struct { db model.Db } func (targetRepo *RepoTarget) CreateTarget( ctx context.Context, streamerID int, amount int, text string, ) (int, error) { args := pgx.NamedArgs{ "streamer_id": streamerID, "amount": amount, "text": text, } targetID, err := targetRepo.db.Insert(ctx, sql.CreateTarget, args) if err != nil { slog.Error(err.Error()) return 0, err } return targetID.(int), nil } func (targetRepo *RepoTarget) GetAllTarget( ctx context.Context, streamerID int, ) ([]*model.Target, error) { args := pgx.NamedArgs{ "streamer_id": streamerID, } rows, err := targetRepo.db.Select(ctx, sql.GetAllTarget, args) if err != nil { slog.Error(err.Error()) return nil, err } var targets []*model.Target err = pgxscan.ScanAll(&targets, rows) if err != nil { slog.Error(err.Error()) return nil, err } return targets, nil } func (targetRepo *RepoTarget) AddAmountToTarget( ctx context.Context, targetID int, amount int, ) error { args := pgx.NamedArgs{ "target_id": targetID, "amount": amount, } err := targetRepo.db.Update(ctx, sql.AddAmountToTarget, args) if err != nil { slog.Error(err.Error()) return err } return nil }