96 lines
1.7 KiB
Go
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
|
|
}
|