diff --git a/go/apps/api/routes/v2_keys_update_credits/handler.go b/go/apps/api/routes/v2_keys_update_credits/handler.go index 466a74848e..bd503e1c37 100644 --- a/go/apps/api/routes/v2_keys_update_credits/handler.go +++ b/go/apps/api/routes/v2_keys_update_credits/handler.go @@ -129,11 +129,29 @@ func (h *Handler) Handle(ctx context.Context, s *zen.Session) error { } key, err = db.TxWithResult(ctx, h.DB.RW(), func(ctx context.Context, tx db.DBTX) (db.FindLiveKeyByIDRow, error) { - err = db.Query.UpdateKeyCredits(ctx, tx, db.UpdateKeyCreditsParams{ - ID: key.ID, - Operation: string(req.Operation), - Credits: credits, - }) + switch req.Operation { + case openapi.Set: + err = db.Query.UpdateKeyCreditsSet(ctx, tx, db.UpdateKeyCreditsSetParams{ + ID: key.ID, + Credits: credits, + }) + case openapi.Increment: + err = db.Query.UpdateKeyCreditsIncrement(ctx, tx, db.UpdateKeyCreditsIncrementParams{ + ID: key.ID, + Credits: credits, + }) + case openapi.Decrement: + err = db.Query.UpdateKeyCreditsDecrement(ctx, tx, db.UpdateKeyCreditsDecrementParams{ + ID: key.ID, + Credits: credits, + }) + default: + return db.FindLiveKeyByIDRow{}, fault.New("invalid operation", + fault.Code(codes.App.Validation.InvalidInput.URN()), + fault.Internal(fmt.Sprintf("invalid operation: %s", req.Operation)), + fault.Public("Invalid operation specified."), + ) + } if err != nil { return db.FindLiveKeyByIDRow{}, fault.Wrap(err, fault.Code(codes.App.Internal.ServiceUnavailable.URN()), diff --git a/go/internal/services/usagelimiter/limit.go b/go/internal/services/usagelimiter/limit.go index a27e484a5e..af2a802072 100644 --- a/go/internal/services/usagelimiter/limit.go +++ b/go/internal/services/usagelimiter/limit.go @@ -32,10 +32,9 @@ func (s *service) Limit(ctx context.Context, req UsageRequest) (UsageResponse, e return UsageResponse{Valid: false, Remaining: 0}, nil } - err = db.Query.UpdateKeyCredits(ctx, s.db.RW(), db.UpdateKeyCreditsParams{ - ID: req.KeyId, - Operation: "decrement", - Credits: sql.NullInt32{Int32: req.Cost, Valid: true}, + err = db.Query.UpdateKeyCreditsDecrement(ctx, s.db.RW(), db.UpdateKeyCreditsDecrementParams{ + ID: req.KeyId, + Credits: sql.NullInt32{Int32: req.Cost, Valid: true}, }) if err != nil { return UsageResponse{}, err diff --git a/go/pkg/db/key_update_credits.sql_generated.go b/go/pkg/db/key_update_credits.sql_generated.go deleted file mode 100644 index 9465a0f7a4..0000000000 --- a/go/pkg/db/key_update_credits.sql_generated.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.27.0 -// source: key_update_credits.sql - -package db - -import ( - "context" - "database/sql" -) - -const updateKeyCredits = `-- name: UpdateKeyCredits :exec -UPDATE ` + "`" + `keys` + "`" + ` -SET remaining_requests = -CASE - WHEN ? = 'set' THEN ? - WHEN ? = 'increment' THEN remaining_requests + ? - WHEN ? = 'decrement' AND remaining_requests - ? > 0 THEN remaining_requests - ? - WHEN ? = 'decrement' AND remaining_requests - ? <= 0 THEN 0 -END -WHERE id = ? -` - -type UpdateKeyCreditsParams struct { - Operation interface{} `db:"operation"` - Credits sql.NullInt32 `db:"credits"` - ID string `db:"id"` -} - -// UpdateKeyCredits -// -// UPDATE `keys` -// SET remaining_requests = -// CASE -// WHEN ? = 'set' THEN ? -// WHEN ? = 'increment' THEN remaining_requests + ? -// WHEN ? = 'decrement' AND remaining_requests - ? > 0 THEN remaining_requests - ? -// WHEN ? = 'decrement' AND remaining_requests - ? <= 0 THEN 0 -// END -// WHERE id = ? -func (q *Queries) UpdateKeyCredits(ctx context.Context, db DBTX, arg UpdateKeyCreditsParams) error { - _, err := db.ExecContext(ctx, updateKeyCredits, - arg.Operation, - arg.Credits, - arg.Operation, - arg.Credits, - arg.Operation, - arg.Credits, - arg.Credits, - arg.Operation, - arg.Credits, - arg.ID, - ) - return err -} diff --git a/go/pkg/db/key_update_credits_decrement.sql_generated.go b/go/pkg/db/key_update_credits_decrement.sql_generated.go new file mode 100644 index 0000000000..4dcada52b8 --- /dev/null +++ b/go/pkg/db/key_update_credits_decrement.sql_generated.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: key_update_credits_decrement.sql + +package db + +import ( + "context" + "database/sql" +) + +const updateKeyCreditsDecrement = `-- name: UpdateKeyCreditsDecrement :exec +UPDATE ` + "`" + `keys` + "`" + ` +SET remaining_requests = CASE + WHEN remaining_requests >= ? THEN remaining_requests - ? + ELSE 0 +END +WHERE id = ? +` + +type UpdateKeyCreditsDecrementParams struct { + Credits sql.NullInt32 `db:"credits"` + ID string `db:"id"` +} + +// UpdateKeyCreditsDecrement +// +// UPDATE `keys` +// SET remaining_requests = CASE +// WHEN remaining_requests >= ? THEN remaining_requests - ? +// ELSE 0 +// END +// WHERE id = ? +func (q *Queries) UpdateKeyCreditsDecrement(ctx context.Context, db DBTX, arg UpdateKeyCreditsDecrementParams) error { + _, err := db.ExecContext(ctx, updateKeyCreditsDecrement, arg.Credits, arg.Credits, arg.ID) + return err +} diff --git a/go/pkg/db/key_update_credits_increment.sql_generated.go b/go/pkg/db/key_update_credits_increment.sql_generated.go new file mode 100644 index 0000000000..675c12ceb7 --- /dev/null +++ b/go/pkg/db/key_update_credits_increment.sql_generated.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: key_update_credits_increment.sql + +package db + +import ( + "context" + "database/sql" +) + +const updateKeyCreditsIncrement = `-- name: UpdateKeyCreditsIncrement :exec +UPDATE ` + "`" + `keys` + "`" + ` +SET remaining_requests = remaining_requests + ? +WHERE id = ? +` + +type UpdateKeyCreditsIncrementParams struct { + Credits sql.NullInt32 `db:"credits"` + ID string `db:"id"` +} + +// UpdateKeyCreditsIncrement +// +// UPDATE `keys` +// SET remaining_requests = remaining_requests + ? +// WHERE id = ? +func (q *Queries) UpdateKeyCreditsIncrement(ctx context.Context, db DBTX, arg UpdateKeyCreditsIncrementParams) error { + _, err := db.ExecContext(ctx, updateKeyCreditsIncrement, arg.Credits, arg.ID) + return err +} diff --git a/go/pkg/db/key_update_credits_set.sql_generated.go b/go/pkg/db/key_update_credits_set.sql_generated.go new file mode 100644 index 0000000000..8aece9bc4c --- /dev/null +++ b/go/pkg/db/key_update_credits_set.sql_generated.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: key_update_credits_set.sql + +package db + +import ( + "context" + "database/sql" +) + +const updateKeyCreditsSet = `-- name: UpdateKeyCreditsSet :exec +UPDATE ` + "`" + `keys` + "`" + ` +SET remaining_requests = ? +WHERE id = ? +` + +type UpdateKeyCreditsSetParams struct { + Credits sql.NullInt32 `db:"credits"` + ID string `db:"id"` +} + +// UpdateKeyCreditsSet +// +// UPDATE `keys` +// SET remaining_requests = ? +// WHERE id = ? +func (q *Queries) UpdateKeyCreditsSet(ctx context.Context, db DBTX, arg UpdateKeyCreditsSetParams) error { + _, err := db.ExecContext(ctx, updateKeyCreditsSet, arg.Credits, arg.ID) + return err +} diff --git a/go/pkg/db/querier_generated.go b/go/pkg/db/querier_generated.go index 59d54c3c93..b2fb569a24 100644 --- a/go/pkg/db/querier_generated.go +++ b/go/pkg/db/querier_generated.go @@ -1527,22 +1527,31 @@ type Querier interface { // updated_at_m = ? // WHERE id = ? UpdateKey(ctx context.Context, db DBTX, arg UpdateKeyParams) error - //UpdateKeyCredits + //UpdateKeyCreditsDecrement // // UPDATE `keys` - // SET remaining_requests = - // CASE - // WHEN ? = 'set' THEN ? - // WHEN ? = 'increment' THEN remaining_requests + ? - // WHEN ? = 'decrement' AND remaining_requests - ? > 0 THEN remaining_requests - ? - // WHEN ? = 'decrement' AND remaining_requests - ? <= 0 THEN 0 + // SET remaining_requests = CASE + // WHEN remaining_requests >= ? THEN remaining_requests - ? + // ELSE 0 // END // WHERE id = ? - UpdateKeyCredits(ctx context.Context, db DBTX, arg UpdateKeyCreditsParams) error + UpdateKeyCreditsDecrement(ctx context.Context, db DBTX, arg UpdateKeyCreditsDecrementParams) error + //UpdateKeyCreditsIncrement + // + // UPDATE `keys` + // SET remaining_requests = remaining_requests + ? + // WHERE id = ? + UpdateKeyCreditsIncrement(ctx context.Context, db DBTX, arg UpdateKeyCreditsIncrementParams) error //UpdateKeyCreditsRefill // // UPDATE `keys` SET refill_amount = ?, refill_day = ? WHERE id = ? UpdateKeyCreditsRefill(ctx context.Context, db DBTX, arg UpdateKeyCreditsRefillParams) error + //UpdateKeyCreditsSet + // + // UPDATE `keys` + // SET remaining_requests = ? + // WHERE id = ? + UpdateKeyCreditsSet(ctx context.Context, db DBTX, arg UpdateKeyCreditsSetParams) error //UpdateKeyringKeyEncryption // // UPDATE `key_auth` SET store_encrypted_keys = ? WHERE id = ? diff --git a/go/pkg/db/queries/key_update_credits.sql b/go/pkg/db/queries/key_update_credits.sql deleted file mode 100644 index f7d5929f0d..0000000000 --- a/go/pkg/db/queries/key_update_credits.sql +++ /dev/null @@ -1,10 +0,0 @@ --- name: UpdateKeyCredits :exec -UPDATE `keys` -SET remaining_requests = -CASE - WHEN sqlc.narg('operation') = 'set' THEN sqlc.narg('credits') - WHEN sqlc.narg('operation') = 'increment' THEN remaining_requests + sqlc.narg('credits') - WHEN sqlc.narg('operation') = 'decrement' AND remaining_requests - sqlc.narg('credits') > 0 THEN remaining_requests - sqlc.narg('credits') - WHEN sqlc.narg('operation') = 'decrement' AND remaining_requests - sqlc.narg('credits') <= 0 THEN 0 -END -WHERE id = ?; diff --git a/go/pkg/db/queries/key_update_credits_decrement.sql b/go/pkg/db/queries/key_update_credits_decrement.sql new file mode 100644 index 0000000000..fd83c92cf9 --- /dev/null +++ b/go/pkg/db/queries/key_update_credits_decrement.sql @@ -0,0 +1,7 @@ +-- name: UpdateKeyCreditsDecrement :exec +UPDATE `keys` +SET remaining_requests = CASE + WHEN remaining_requests >= sqlc.arg('credits') THEN remaining_requests - sqlc.arg('credits') + ELSE 0 +END +WHERE id = ?; diff --git a/go/pkg/db/queries/key_update_credits_increment.sql b/go/pkg/db/queries/key_update_credits_increment.sql new file mode 100644 index 0000000000..e0c3ddb423 --- /dev/null +++ b/go/pkg/db/queries/key_update_credits_increment.sql @@ -0,0 +1,4 @@ +-- name: UpdateKeyCreditsIncrement :exec +UPDATE `keys` +SET remaining_requests = remaining_requests + sqlc.arg('credits') +WHERE id = ?; \ No newline at end of file diff --git a/go/pkg/db/queries/key_update_credits_set.sql b/go/pkg/db/queries/key_update_credits_set.sql new file mode 100644 index 0000000000..d9c0f99a7e --- /dev/null +++ b/go/pkg/db/queries/key_update_credits_set.sql @@ -0,0 +1,4 @@ +-- name: UpdateKeyCreditsSet :exec +UPDATE `keys` +SET remaining_requests = sqlc.narg('credits') +WHERE id = ?; \ No newline at end of file