2024-10-29 23:08:16 +05:00

86 lines
1.5 KiB
Go

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.Insert(ctx, sql.CreateTarget, args)
if err != nil {
slog.Error(err.Error())
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.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
}
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.Update(ctx, sql.AddAmountToTarget, args)
if err != nil {
slog.Error(err.Error())
return err
}
return nil
}