2024-09-10 22:37:01 +05:00

96 lines
1.7 KiB
Go

package donat
import (
"context"
"donat-widget/internal/model"
"github.com/georgysavva/scany/v2/pgxscan"
"github.com/jackc/pgx/v5"
"log/slog"
)
func New(
db model.Db,
) *RepoDonat {
return &RepoDonat{db}
}
type RepoDonat struct {
db model.Db
}
func (repoDonat *RepoDonat) SetDonat(
ctx context.Context,
widgetID model.WidgetID,
text string,
amount model.DonatAmount,
donatUser string,
) error {
query := `
INSERT INTO donats (widget_id, text, amount, donat_user)
VALUES (@widget_id, @text, @amount, @donat_user);
`
args := pgx.NamedArgs{
"widget_id": widgetID,
"text": text,
"amount": amount,
"donat_user": donatUser,
}
_, err := repoDonat.db.Query(ctx, query, args)
if err != nil {
slog.Error("repoDonat.db.Query: " + err.Error())
return err
}
return nil
}
func (repoDonat *RepoDonat) GetDonat(
ctx context.Context,
widgetID model.WidgetID,
) ([]*model.Donat, error) {
query := `
SELECT * FROM donats WHERE widget_id = (@widget_id);
`
args := pgx.NamedArgs{
"widget_id": widgetID,
}
rows, err := repoDonat.db.Query(ctx, query, args)
if err != nil {
slog.Error("repoDonat.db.Query: " + err.Error())
return nil, err
}
var donats []*model.Donat
err = pgxscan.ScanAll(&donats, rows)
if err != nil {
slog.Error("repoMedia.pgxscan.ScanAll: " + err.Error())
return nil, err
}
return donats, nil
}
func (repoDonat *RepoDonat) DeleteDonat(
ctx context.Context,
donatID model.DonatID,
) error {
query := `
DELETE FROM donats WHERE id = (@id);
`
args := pgx.NamedArgs{
"id": donatID,
}
_, err := repoDonat.db.Query(ctx, query, args)
if err != nil {
slog.Error("repoDonat.db.Query: " + err.Error())
return err
}
return nil
}