Add default_plan_ladder_id with a forward data migration and update the runtime to resolve the ladder's rank-0 tier at use-time. Regenerate sqlc, update auto-provisioning, ReapplyDefaultsForPool, operator UI and tests; add GetTierByLadderRank and pool/provision query helpers. Add a CSP-safe confirm-action modal and wire operator actions to it. Close plan-sole-writer safety gaps and serialize IssueGrant with a FOR UPDATE pool lock to prevent ladder races.
300 lines
8.5 KiB
Go
300 lines
8.5 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.29.0
|
|
// source: pool_provisions.sql
|
|
|
|
package entitlements
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const createPoolProvision = `-- name: CreatePoolProvision :one
|
|
INSERT INTO entitlements.pool_provisions (pool_id, grant_id, entitlement_set_id, quantity)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id
|
|
`
|
|
|
|
type CreatePoolProvisionParams struct {
|
|
PoolID string `json:"pool_id"`
|
|
GrantID uuid.NullUUID `json:"grant_id"`
|
|
EntitlementSetID string `json:"entitlement_set_id"`
|
|
Quantity int32 `json:"quantity"`
|
|
}
|
|
|
|
func (q *Queries) CreatePoolProvision(ctx context.Context, arg CreatePoolProvisionParams) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, createPoolProvision,
|
|
arg.PoolID,
|
|
arg.GrantID,
|
|
arg.EntitlementSetID,
|
|
arg.Quantity,
|
|
)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const createSubscriptionPoolProvision = `-- name: CreateSubscriptionPoolProvision :one
|
|
INSERT INTO entitlements.pool_provisions (pool_id, subscription_id, billing_account_id, entitlement_set_id, quantity)
|
|
VALUES ($1, $2, $3, $4, $5)
|
|
RETURNING provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id
|
|
`
|
|
|
|
type CreateSubscriptionPoolProvisionParams struct {
|
|
PoolID string `json:"pool_id"`
|
|
SubscriptionID uuid.NullUUID `json:"subscription_id"`
|
|
BillingAccountID uuid.NullUUID `json:"billing_account_id"`
|
|
EntitlementSetID string `json:"entitlement_set_id"`
|
|
Quantity int32 `json:"quantity"`
|
|
}
|
|
|
|
func (q *Queries) CreateSubscriptionPoolProvision(ctx context.Context, arg CreateSubscriptionPoolProvisionParams) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, createSubscriptionPoolProvision,
|
|
arg.PoolID,
|
|
arg.SubscriptionID,
|
|
arg.BillingAccountID,
|
|
arg.EntitlementSetID,
|
|
arg.Quantity,
|
|
)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getActivePoolProvisionsByPoolID = `-- name: GetActivePoolProvisionsByPoolID :many
|
|
SELECT provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id FROM entitlements.pool_provisions
|
|
WHERE pool_id = $1 AND status = 'active'
|
|
ORDER BY created_at ASC
|
|
`
|
|
|
|
func (q *Queries) GetActivePoolProvisionsByPoolID(ctx context.Context, poolID string) ([]PoolProvision, error) {
|
|
rows, err := q.db.QueryContext(ctx, getActivePoolProvisionsByPoolID, poolID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []PoolProvision{}
|
|
for rows.Next() {
|
|
var i PoolProvision
|
|
if err := rows.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const getPoolProvisionByGrantID = `-- name: GetPoolProvisionByGrantID :one
|
|
SELECT provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id FROM entitlements.pool_provisions
|
|
WHERE grant_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetPoolProvisionByGrantID(ctx context.Context, grantID uuid.NullUUID) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, getPoolProvisionByGrantID, grantID)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getPoolProvisionByProvisionID = `-- name: GetPoolProvisionByProvisionID :one
|
|
SELECT provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id FROM entitlements.pool_provisions
|
|
WHERE provision_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetPoolProvisionByProvisionID(ctx context.Context, provisionID string) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, getPoolProvisionByProvisionID, provisionID)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getPoolProvisionBySubscriptionID = `-- name: GetPoolProvisionBySubscriptionID :one
|
|
SELECT provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id FROM entitlements.pool_provisions
|
|
WHERE subscription_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetPoolProvisionBySubscriptionID(ctx context.Context, subscriptionID uuid.NullUUID) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, getPoolProvisionBySubscriptionID, subscriptionID)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getPoolProvisionsByPoolID = `-- name: GetPoolProvisionsByPoolID :many
|
|
SELECT provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id FROM entitlements.pool_provisions
|
|
WHERE pool_id = $1
|
|
ORDER BY created_at ASC
|
|
`
|
|
|
|
func (q *Queries) GetPoolProvisionsByPoolID(ctx context.Context, poolID string) ([]PoolProvision, error) {
|
|
rows, err := q.db.QueryContext(ctx, getPoolProvisionsByPoolID, poolID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []PoolProvision{}
|
|
for rows.Next() {
|
|
var i PoolProvision
|
|
if err := rows.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, i)
|
|
}
|
|
if err := rows.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const updatePoolProvisionStatus = `-- name: UpdatePoolProvisionStatus :one
|
|
UPDATE entitlements.pool_provisions
|
|
SET status = $1::VARCHAR(20),
|
|
ended_at = CASE WHEN $1::VARCHAR(20) = 'ended' THEN NOW() ELSE ended_at END,
|
|
suspended_at = CASE WHEN $1::VARCHAR(20) = 'suspended' THEN NOW() ELSE suspended_at END
|
|
WHERE provision_id = $2
|
|
RETURNING provision_id, pool_id, billing_account_id, subscription_id, purchase_id, grant_id, quantity, status, activated_at, suspended_at, ended_at, created_at, updated_at, entitlement_set_id
|
|
`
|
|
|
|
type UpdatePoolProvisionStatusParams struct {
|
|
Status string `json:"status"`
|
|
ProvisionID string `json:"provision_id"`
|
|
}
|
|
|
|
func (q *Queries) UpdatePoolProvisionStatus(ctx context.Context, arg UpdatePoolProvisionStatusParams) (PoolProvision, error) {
|
|
row := q.db.QueryRowContext(ctx, updatePoolProvisionStatus, arg.Status, arg.ProvisionID)
|
|
var i PoolProvision
|
|
err := row.Scan(
|
|
&i.ProvisionID,
|
|
&i.PoolID,
|
|
&i.BillingAccountID,
|
|
&i.SubscriptionID,
|
|
&i.PurchaseID,
|
|
&i.GrantID,
|
|
&i.Quantity,
|
|
&i.Status,
|
|
&i.ActivatedAt,
|
|
&i.SuspendedAt,
|
|
&i.EndedAt,
|
|
&i.CreatedAt,
|
|
&i.UpdatedAt,
|
|
&i.EntitlementSetID,
|
|
)
|
|
return i, err
|
|
}
|