package target import ( "context" "donat-widget/internal/model" "donat-widget/internal/model/sql" "errors" "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 model.StreamerID, amount model.DonatAmount, text string, ) error { args := pgx.NamedArgs{ "streamer_id": streamerID, "amount": amount, "text": text, } _, err := targetRepo.db.Query(ctx, sql.CreateTarget, args) if err != nil { slog.Error("targetRepo.db.Query", err) return err } return nil } func (targetRepo *RepoTarget) GetAllTarget( ctx context.Context, streamerID model.StreamerID, ) ([]*model.Target, error) { args := pgx.NamedArgs{ "streamer_id": streamerID, } rows, err := targetRepo.db.Query(ctx, sql.GetAllTarget, args) if err != nil { slog.Error("targetRepo.db.Query", err) return nil, err } var targets []*model.Target err = pgxscan.ScanAll(&targets, rows) if err != nil { slog.Error("targetRepo.db.Query", err) return nil, err } if len(targets) == 0 { return nil, errors.New("donat not found") } return targets, nil } func (targetRepo *RepoTarget) AddAmountToTarget( ctx context.Context, targetID model.TargetID, amount model.DonatAmount, ) error { args := pgx.NamedArgs{ "target_id": targetID, "amount": amount, } _, err := targetRepo.db.Query(ctx, sql.AddAmountToTarget, args) if err != nil { slog.Error("targetRepo.db.Query", err) return err } return nil }