// Package models holds the MongoDB documents written by more than one Vantage // service. Documents only the control plane touches stay in // server/internal/models. package models import ( "time" "go.mongodb.org/mongo-driver/v2/bson" ) // Instance is one deployment of Vantage: its own subdomain, users, servers, // keys, workflows, monitors and secrets. It is the unit a licence attaches to. // // A paying customer may hold several. That grouping is called an Account and // lives only in the admin control plane — this service never sees it. type Instance struct { ID bson.ObjectID `bson:"_id,omitempty" json:"_id,omitempty"` InstanceID string `bson:"instance_id" json:"instance_id"` Name string `bson:"name" json:"name"` Slug string `bson:"slug" json:"slug"` CreatedAt time.Time `bson:"created_at" json:"created_at"` // LicenseBlob is the authoritative licence. LicenseTier and LicenseExpiry // are a denormalised cache for listing and for the admin service's queries, // rewritten from the verified payload every time a blob is accepted. // Nothing reads them for enforcement. // // The blob is json:"-" because there is no reason to spray it through API // responses. It is signed public data, not a secret. LicenseBlob string `bson:"license_blob,omitempty" json:"-"` LicenseTier string `bson:"license_tier,omitempty" json:"license_tier,omitempty"` LicenseExpiry *time.Time `bson:"license_expiry,omitempty" json:"license_expiry,omitempty"` }