Documentation
¶
Overview ¶
Package approval is the B2B spend-approval domain: before a company's (models/company) cart converts to an order, it can require sign-off from an admin or sales manager. The pure state machine governing the pending → approved/rejected transition lives in service.go.
Index ¶
Constants ¶
const ( TypeAdmin = "admin" TypeSalesManager = "sales_manager" )
Approval types.
const ( StatusPending = "pending" StatusApproved = "approved" StatusRejected = "rejected" )
Approval lifecycle states.
const ( ActionApprove = "approve" ActionReject = "reject" )
Actions that drive an approval's state machine.
Variables ¶
var ErrAlreadyResolved = errors.New("approval: already resolved")
ErrAlreadyResolved is returned when an action is taken on an approval that has already left the pending state.
var ErrUnknownAction = errors.New("approval: unknown action")
ErrUnknownAction is returned for an action that is neither approve nor reject.
Functions ¶
func NextStatus ¶
NextStatus computes the status an approval moves to when action is applied to its current status. Only a pending approval is transitionable: "approve" yields approved, "reject" yields rejected. Any action on an already-resolved approval returns ErrAlreadyResolved; an unrecognized action returns ErrUnknownAction.
Types ¶
type Approval ¶
type Approval struct {
mixin.Model[Approval]
CartId string `json:"cartId"`
OrderId string `json:"orderId,omitempty"`
CompanyId string `json:"companyId"`
// Type is the approver role required: admin or sales_manager.
Type string `json:"type"`
Status string `json:"status" orm:"default:pending"`
// HandledBy records the user who approved or rejected.
HandledBy string `json:"handledBy,omitempty"`
Metadata Map `json:"metadata,omitempty" datastore:"-"`
Metadata_ string `json:"-" datastore:",noindex"`
}
Approval is a spend-approval gate on a B2B cart/order. It is resolved once its status leaves pending; NextStatus (service.go) enforces the transitions.
func (*Approval) IsResolved ¶
IsResolved reports whether the approval has been decided (no longer pending).