Introduce DB migrations for ladder and pool-attachment tables and an audit log for provision transitions. Make product_type nullable and add lifecycle_status plus a product_kinds view. Implement Transition and ReapplyDefaultsForPool primitives, SQLC queries/models, webhook and Temporal workflow integration, and accompanying unit/integration tests.
151 lines
4.0 KiB
Go
151 lines
4.0 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.29.0
|
|
// source: pool_provision_transitions.sql
|
|
|
|
package entitlements
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const createPoolProvisionTransition = `-- name: CreatePoolProvisionTransition :one
|
|
INSERT INTO entitlements.pool_provision_transitions
|
|
(pool_id, provision_id, plan_ladder_id, from_rank, to_rank,
|
|
transition_type, actor_type, actor_id, reason, effective_at)
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
|
RETURNING transition_id, pool_id, provision_id, plan_ladder_id, from_rank, to_rank, transition_type, actor_type, actor_id, reason, effective_at, created_at
|
|
`
|
|
|
|
type CreatePoolProvisionTransitionParams struct {
|
|
PoolID string `json:"pool_id"`
|
|
ProvisionID uuid.NullUUID `json:"provision_id"`
|
|
PlanLadderID string `json:"plan_ladder_id"`
|
|
FromRank sql.NullInt32 `json:"from_rank"`
|
|
ToRank sql.NullInt32 `json:"to_rank"`
|
|
TransitionType string `json:"transition_type"`
|
|
ActorType string `json:"actor_type"`
|
|
ActorID uuid.NullUUID `json:"actor_id"`
|
|
Reason sql.NullString `json:"reason"`
|
|
EffectiveAt time.Time `json:"effective_at"`
|
|
}
|
|
|
|
func (q *Queries) CreatePoolProvisionTransition(ctx context.Context, arg CreatePoolProvisionTransitionParams) (PoolProvisionTransition, error) {
|
|
row := q.db.QueryRowContext(ctx, createPoolProvisionTransition,
|
|
arg.PoolID,
|
|
arg.ProvisionID,
|
|
arg.PlanLadderID,
|
|
arg.FromRank,
|
|
arg.ToRank,
|
|
arg.TransitionType,
|
|
arg.ActorType,
|
|
arg.ActorID,
|
|
arg.Reason,
|
|
arg.EffectiveAt,
|
|
)
|
|
var i PoolProvisionTransition
|
|
err := row.Scan(
|
|
&i.TransitionID,
|
|
&i.PoolID,
|
|
&i.ProvisionID,
|
|
&i.PlanLadderID,
|
|
&i.FromRank,
|
|
&i.ToRank,
|
|
&i.TransitionType,
|
|
&i.ActorType,
|
|
&i.ActorID,
|
|
&i.Reason,
|
|
&i.EffectiveAt,
|
|
&i.CreatedAt,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const listTransitionsByPool = `-- name: ListTransitionsByPool :many
|
|
SELECT transition_id, pool_id, provision_id, plan_ladder_id, from_rank, to_rank, transition_type, actor_type, actor_id, reason, effective_at, created_at FROM entitlements.pool_provision_transitions
|
|
WHERE pool_id = $1
|
|
ORDER BY effective_at DESC, created_at DESC
|
|
`
|
|
|
|
func (q *Queries) ListTransitionsByPool(ctx context.Context, poolID string) ([]PoolProvisionTransition, error) {
|
|
rows, err := q.db.QueryContext(ctx, listTransitionsByPool, poolID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []PoolProvisionTransition{}
|
|
for rows.Next() {
|
|
var i PoolProvisionTransition
|
|
if err := rows.Scan(
|
|
&i.TransitionID,
|
|
&i.PoolID,
|
|
&i.ProvisionID,
|
|
&i.PlanLadderID,
|
|
&i.FromRank,
|
|
&i.ToRank,
|
|
&i.TransitionType,
|
|
&i.ActorType,
|
|
&i.ActorID,
|
|
&i.Reason,
|
|
&i.EffectiveAt,
|
|
&i.CreatedAt,
|
|
); 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 listTransitionsByProvision = `-- name: ListTransitionsByProvision :many
|
|
SELECT transition_id, pool_id, provision_id, plan_ladder_id, from_rank, to_rank, transition_type, actor_type, actor_id, reason, effective_at, created_at FROM entitlements.pool_provision_transitions
|
|
WHERE provision_id = $1
|
|
ORDER BY effective_at ASC, created_at ASC
|
|
`
|
|
|
|
func (q *Queries) ListTransitionsByProvision(ctx context.Context, provisionID uuid.NullUUID) ([]PoolProvisionTransition, error) {
|
|
rows, err := q.db.QueryContext(ctx, listTransitionsByProvision, provisionID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
items := []PoolProvisionTransition{}
|
|
for rows.Next() {
|
|
var i PoolProvisionTransition
|
|
if err := rows.Scan(
|
|
&i.TransitionID,
|
|
&i.PoolID,
|
|
&i.ProvisionID,
|
|
&i.PlanLadderID,
|
|
&i.FromRank,
|
|
&i.ToRank,
|
|
&i.TransitionType,
|
|
&i.ActorType,
|
|
&i.ActorID,
|
|
&i.Reason,
|
|
&i.EffectiveAt,
|
|
&i.CreatedAt,
|
|
); 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
|
|
}
|