84 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 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
}
defer rows.Close()
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
}