2024-10-21 10:31:25 +05:00

82 lines
1.5 KiB
Go

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