| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package models
- import (
- "database/sql/driver"
- "encoding/json"
- "github.com/google/uuid"
- "gorm.io/gorm"
- )
- // APIContractRevision represents a revision of an API contract
- type APIContractRevision struct {
- gorm.Model
- // ID is a UUID for the APIContract
- ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"`
- // Base64Contract is the APIContract as json encoded in base64
- Base64Contract string `json:"base64_contract"`
- // ClusterID is the ID of the cluster that the config created.
- // This should be a foreign key, but GORM doesnt play well with FKs.
- ClusterID int `json:"cluster_id"`
- // ProjectID is the ID of the project that the config belongs to.
- // This should be a foreign key, but GORM doesnt play well with FKs.
- ProjectID int `json:"project_id"`
- // Condition is the status of the apply that happened for this revision.
- // Condition will contain any failure reasons for a revision, or "SUCCESS" if the revision was applied successfully.
- // Further details to expand upon this condition are available in ConditionMetadata
- Condition string `json:"condition"`
- // ConditionMetadata contains all information about the condition of a given revision.
- // If condition is "SUCCESS", this will likely be empty.
- // This will follow the error response contract, with the following keys:
- // {
- // "errors": [
- // {
- // "code": "string",
- // "message": "string",
- // "metadata": {}
- // }
- // ]
- // }
- ConditionMetadata JSONB `json:"condition_metadata" sql:"type:jsonb" gorm:"type:jsonb"`
- }
- // TableName overrides the table name
- func (APIContractRevision) TableName() string {
- return "api_contract_revisions"
- }
- // JSONB implements the jsonb type in postgres for gorm
- type JSONB map[string]any
- // Value implements the driver.Valuer interface
- func (j JSONB) Value() (driver.Value, error) {
- valueString, err := json.Marshal(j)
- return string(valueString), err
- }
- // Scan implements the sql.Scanner interface
- func (j *JSONB) Scan(value interface{}) error {
- if err := json.Unmarshal(value.([]byte), &j); err != nil {
- return err
- }
- return nil
- }
|