package model import ( "time" "browser.local/platform/domain" ) // ClientManagerInstallation is the durable desired/observed lifecycle aggregate for one server/profile. type ClientManagerInstallation struct { // ID is the stable installation identifier. ID string `json:"id" db:"id"` // ServerInstanceID scopes the installation to one authorized server. ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"` // PluginID identifies the installed game plugin declaration. PluginID string `json:"pluginId" db:"plugin_id"` // ProfileKey identifies the plugin client-manager profile. ProfileKey string `json:"profileKey" db:"profile_key"` // RunEndpointID is the fenced machine executor assignment. RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"` // TargetOS is the package operating-system target. TargetOS string `json:"targetOs" db:"target_os"` // TargetArch is the package architecture target. TargetArch string `json:"targetArch" db:"target_arch"` // Status is the durable lifecycle state. Status domain.ClientManagerLifecycleStatus `json:"status" db:"status"` // Phase is a bounded safe execution phase. Phase string `json:"phase" db:"phase"` DesiredVersion string `json:"desiredVersion" db:"desired_version"` ActiveVersion string `json:"activeVersion" db:"active_version"` PreviousVersion string `json:"previousVersion" db:"previous_version"` DesiredRevision string `json:"desiredRevision" db:"desired_revision"` ActiveRevision string `json:"activeRevision" db:"active_revision"` PreviousRevision string `json:"previousRevision" db:"previous_revision"` DesiredArtifactID string `json:"desiredArtifactId" db:"desired_artifact_id"` ActiveArtifactID string `json:"activeArtifactId" db:"active_artifact_id"` PreviousArtifactID string `json:"previousArtifactId" db:"previous_artifact_id"` Checksum string `json:"checksum" db:"checksum"` KeyGeneration int `json:"keyGeneration" db:"key_generation"` DeploymentGeneration int `json:"deploymentGeneration" db:"deployment_generation"` CurrentJobID string `json:"currentJobId" db:"current_job_id"` LastSuccessfulJobID string `json:"lastSuccessfulJobId" db:"last_successful_job_id"` LastOperation domain.ClientManagerLifecycleOperation `json:"lastOperation" db:"last_operation"` Health domain.ClientManagerHealthStatus `json:"health" db:"health"` HealthReason string `json:"healthReason" db:"health_reason"` LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"` LastHeartbeatSequence uint64 `json:"lastHeartbeatSequence" db:"last_heartbeat_sequence"` Retryable bool `json:"retryable" db:"retryable"` RequiresRedeploy bool `json:"requiresRedeploy" db:"requires_redeploy"` CreatedAt time.Time `json:"createdAt" db:"created_at"` UpdatedAt time.Time `json:"updatedAt" db:"updated_at"` InstalledAt time.Time `json:"installedAt" db:"installed_at"` UninstalledAt time.Time `json:"uninstalledAt" db:"uninstalled_at"` } func (ClientManagerInstallation) TableName() string { return "client_manager_installations" } // ClientManagerSession stores only the hash and fences for a short-lived component session. type ClientManagerSession struct { ID string `json:"id" db:"id"` InstallationID string `json:"installationId" db:"installation_id"` ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"` ProfileKey string `json:"profileKey" db:"profile_key"` RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"` ArtifactID string `json:"artifactId" db:"artifact_id"` KeyGeneration int `json:"keyGeneration" db:"key_generation"` DeploymentGeneration int `json:"deploymentGeneration" db:"deployment_generation"` TokenHash string `json:"tokenHash" db:"token_hash"` Capabilities []string `json:"capabilities" db:"capabilities"` Status domain.ClientManagerSessionStatus `json:"status" db:"status"` LastHeartbeatSequence uint64 `json:"lastHeartbeatSequence" db:"last_heartbeat_sequence"` LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"` ExpiresAt time.Time `json:"expiresAt" db:"expires_at"` CreatedAt time.Time `json:"createdAt" db:"created_at"` UpdatedAt time.Time `json:"updatedAt" db:"updated_at"` RevokedAt time.Time `json:"revokedAt" db:"revoked_at"` } func (ClientManagerSession) TableName() string { return "client_manager_sessions" } // ClientManagerRegistrationNonce is a bounded replay fence for one signed registration request. type ClientManagerRegistrationNonce struct { ID string `json:"id" db:"id"` InstallationID string `json:"installationId" db:"installation_id"` ExpiresAt time.Time `json:"expiresAt" db:"expires_at"` CreatedAt time.Time `json:"createdAt" db:"created_at"` } func (ClientManagerRegistrationNonce) TableName() string { return "client_manager_registration_nonces" } func ClientManagerInstallationFromDomain(value domain.ClientManagerInstallation) ClientManagerInstallation { return ClientManagerInstallation(value) } func (value ClientManagerInstallation) ToDomain() domain.ClientManagerInstallation { return domain.ClientManagerInstallation(value) } func ClientManagerSessionFromDomain(value domain.ClientManagerSession) ClientManagerSession { value = domain.CopyClientManagerSession(value) return ClientManagerSession(value) } func (value ClientManagerSession) ToDomain() domain.ClientManagerSession { return domain.CopyClientManagerSession(domain.ClientManagerSession(value)) } func ClientManagerRegistrationNonceFromDomain(value domain.ClientManagerRegistrationNonce) ClientManagerRegistrationNonce { return ClientManagerRegistrationNonce(value) } func (value ClientManagerRegistrationNonce) ToDomain() domain.ClientManagerRegistrationNonce { return domain.ClientManagerRegistrationNonce(value) }