Skip to content

Commit 78de6ab

Browse files
committed
Add withdraw event
1 parent 74a46e4 commit 78de6ab

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-- +migrate Up
2+
INSERT INTO events(nullifier, type, status, created_at, updated_at, points_amount)
3+
SELECT w.nullifier AS nullifier, 'withdraw' AS type, 'claimed' AS status,
4+
EXTRACT('EPOCH' FROM w.created_at) AS created_at, EXTRACT('EPOCH' FROM w.created_at) AS updated_at,
5+
(-w.amount) AS points_amount FROM withdrawals w;
6+
7+
-- +migrate Down
8+
DELETE FROM events WHERE type='withdraw';

internal/data/evtypes/models/extra.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
TypeEarlyTest = "early_test"
2525
TypeDailyQuestion = "daily_question"
2626
TypeBonusCode = "bonus_code"
27+
TypeWithdraw = "withdraw"
2728
)
2829

2930
const (

internal/service/handlers/withdraw.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/rarimo/geo-auth-svc/pkg/auth"
1313
"github.com/rarimo/geo-points-svc/internal/config"
1414
"github.com/rarimo/geo-points-svc/internal/data"
15+
"github.com/rarimo/geo-points-svc/internal/data/evtypes/models"
1516
"github.com/rarimo/geo-points-svc/internal/data/pg"
1617
"github.com/rarimo/geo-points-svc/internal/service/requests"
1718
"github.com/rarimo/geo-points-svc/resources"
@@ -95,13 +96,35 @@ func Withdraw(w http.ResponseWriter, r *http.Request) {
9596
return
9697
}
9798

98-
_, err = WithdrawalsQ(r).Insert(data.Withdrawal{
99-
TxHash: txHash[:],
100-
Nullifier: nullifier,
101-
Amount: req.Data.Attributes.Amount,
99+
err = EventsQ(r).Transaction(func() error {
100+
_, err = WithdrawalsQ(r).Insert(data.Withdrawal{
101+
TxHash: txHash[:],
102+
Nullifier: nullifier,
103+
Amount: req.Data.Attributes.Amount,
104+
})
105+
if err != nil {
106+
return fmt.Errorf("failed to insert withdraw entry: %w", err)
107+
}
108+
109+
if evType := EventTypes(r).Get(models.TypeWithdraw); evType == nil {
110+
return fmt.Errorf("event type %s absent", models.TypeWithdraw)
111+
}
112+
113+
pAmount := -req.Data.Attributes.Amount
114+
err = EventsQ(r).Insert(data.Event{
115+
Nullifier: nullifier,
116+
Type: models.TypeWithdraw,
117+
Status: data.EventClaimed,
118+
PointsAmount: &pAmount,
119+
})
120+
if err != nil {
121+
return fmt.Errorf("failed to insert withdraw event: %w", err)
122+
}
123+
124+
return nil
102125
})
103126
if err != nil {
104-
log.WithError(err).Error("Failed to insert withdraw")
127+
log.WithError(err).Error("Failed to insert withdraw and event")
105128
ape.RenderErr(w, problems.InternalError())
106129
return
107130
}

0 commit comments

Comments
 (0)