86 lines
1.5 KiB
Go
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
|
|
}
|