first commit
This commit is contained in:
55
framework/configstore/tables/pricingoverride.go
Normal file
55
framework/configstore/tables/pricingoverride.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package tables
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/maximhq/bifrost/core/schemas"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// TablePricingOverride is the persistence model for governance pricing overrides.
|
||||
type TablePricingOverride struct {
|
||||
ID string `gorm:"primaryKey;type:varchar(255)" json:"id"`
|
||||
Name string `gorm:"type:varchar(255);not null" json:"name"`
|
||||
ScopeKind string `gorm:"type:varchar(50);index:idx_pricing_override_scope;not null" json:"scope_kind"`
|
||||
VirtualKeyID *string `gorm:"type:varchar(255);index:idx_pricing_override_scope" json:"virtual_key_id,omitempty"`
|
||||
ProviderID *string `gorm:"type:varchar(255);index:idx_pricing_override_scope" json:"provider_id,omitempty"`
|
||||
ProviderKeyID *string `gorm:"type:varchar(255);index:idx_pricing_override_scope" json:"provider_key_id,omitempty"`
|
||||
MatchType string `gorm:"type:varchar(20);index:idx_pricing_override_match;not null" json:"match_type"`
|
||||
Pattern string `gorm:"type:varchar(255);not null" json:"pattern"`
|
||||
RequestTypesJSON string `gorm:"type:text" json:"-"`
|
||||
PricingPatchJSON string `gorm:"type:text" json:"pricing_patch,omitempty"`
|
||||
ConfigHash string `gorm:"type:varchar(255);null" json:"config_hash,omitempty"`
|
||||
CreatedAt time.Time `gorm:"index;not null" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"index;not null" json:"updated_at"`
|
||||
|
||||
RequestTypes []schemas.RequestType `gorm:"-" json:"request_types,omitempty"`
|
||||
}
|
||||
|
||||
// TableName returns the backing table name for governance pricing overrides.
|
||||
func (TablePricingOverride) TableName() string { return "governance_pricing_overrides" }
|
||||
|
||||
// BeforeSave serializes virtual fields into their JSON columns before persistence.
|
||||
func (p *TablePricingOverride) BeforeSave(tx *gorm.DB) error {
|
||||
if len(p.RequestTypes) > 0 {
|
||||
b, err := json.Marshal(p.RequestTypes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.RequestTypesJSON = string(b)
|
||||
} else {
|
||||
p.RequestTypesJSON = "[]"
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AfterFind restores virtual fields from their persisted JSON columns.
|
||||
func (p *TablePricingOverride) AfterFind(tx *gorm.DB) error {
|
||||
if p.RequestTypesJSON != "" {
|
||||
if err := json.Unmarshal([]byte(p.RequestTypesJSON), &p.RequestTypes); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user