115 lines
7.1 KiB
Go
115 lines
7.1 KiB
Go
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)
|
|
}
|