Complete platform management workflows
This commit is contained in:
@@ -0,0 +1,211 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
)
|
||||
|
||||
type RuntimeBinding struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
PluginID string `json:"pluginId" db:"plugin_id"`
|
||||
ProfileKey string `json:"profileKey" db:"profile_key"`
|
||||
Mode string `json:"mode" db:"mode"`
|
||||
Bindings map[string]string `json:"bindings" db:"bindings"`
|
||||
MissingKeys []string `json:"missingKeys" db:"missing_keys"`
|
||||
Status domain.RuntimeBindingStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (RuntimeBinding) TableName() string { return "runtime_bindings" }
|
||||
|
||||
type EncryptedComponentKey struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
ComponentKind domain.DistributionComponentKind `json:"componentKind" db:"component_kind"`
|
||||
ComponentKey string `json:"componentKey,omitempty" db:"component_key"`
|
||||
EncryptedKey string `json:"encryptedKey" db:"encrypted_key"`
|
||||
KeyHash string `json:"keyHash" db:"key_hash"`
|
||||
Fingerprint string `json:"fingerprint" db:"fingerprint"`
|
||||
SecretRef string `json:"secretRef" db:"secret_ref"`
|
||||
Generation int `json:"generation" db:"generation"`
|
||||
Status domain.ComponentKeyStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
ResetAt time.Time `json:"resetAt,omitempty" db:"reset_at"`
|
||||
}
|
||||
|
||||
func (EncryptedComponentKey) TableName() string { return "encrypted_component_keys" }
|
||||
|
||||
type RunDistribution struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
PluginID string `json:"pluginId" db:"plugin_id"`
|
||||
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
|
||||
TargetOS string `json:"targetOs" db:"target_os"`
|
||||
TargetArch string `json:"targetArch" db:"target_arch"`
|
||||
PackageFormat string `json:"packageFormat" db:"package_format"`
|
||||
ArtifactID string `json:"artifactId" db:"artifact_id"`
|
||||
Checksum string `json:"checksum" db:"checksum"`
|
||||
KeyGeneration int `json:"keyGeneration" db:"key_generation"`
|
||||
SecretRef string `json:"secretRef" db:"secret_ref"`
|
||||
Status domain.DistributionStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (RunDistribution) TableName() string { return "run_distributions" }
|
||||
|
||||
type ClientManagerDistribution struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
PluginID string `json:"pluginId" db:"plugin_id"`
|
||||
ProfileKey string `json:"profileKey" db:"profile_key"`
|
||||
TargetOS string `json:"targetOs" db:"target_os"`
|
||||
TargetArch string `json:"targetArch" db:"target_arch"`
|
||||
RepositoryURL string `json:"repositoryUrl" db:"repository_url"`
|
||||
SourceRevision string `json:"sourceRevision" db:"source_revision"`
|
||||
BuildJobID string `json:"buildJobId" db:"build_job_id"`
|
||||
ArtifactID string `json:"artifactId" db:"artifact_id"`
|
||||
Checksum string `json:"checksum" db:"checksum"`
|
||||
KeyGeneration int `json:"keyGeneration" db:"key_generation"`
|
||||
SecretRef string `json:"secretRef" db:"secret_ref"`
|
||||
Status domain.DistributionStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (ClientManagerDistribution) TableName() string { return "client_manager_distributions" }
|
||||
|
||||
type DependencyStatus struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
PluginID string `json:"pluginId" db:"plugin_id"`
|
||||
ProbeKey string `json:"probeKey" db:"probe_key"`
|
||||
TargetOS string `json:"targetOs" db:"target_os"`
|
||||
TargetArch string `json:"targetArch" db:"target_arch"`
|
||||
State domain.DependencyState `json:"state" db:"state"`
|
||||
Required bool `json:"required" db:"required"`
|
||||
InstallPlanKey string `json:"installPlanKey,omitempty" db:"install_plan_key"`
|
||||
Message string `json:"message,omitempty" db:"message"`
|
||||
CheckedAt time.Time `json:"checkedAt" db:"checked_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (DependencyStatus) TableName() string { return "dependency_statuses" }
|
||||
|
||||
type ClientManagerBuildJob struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
PluginID string `json:"pluginId" db:"plugin_id"`
|
||||
ProfileKey string `json:"profileKey" db:"profile_key"`
|
||||
TargetOS string `json:"targetOs" db:"target_os"`
|
||||
TargetArch string `json:"targetArch" db:"target_arch"`
|
||||
RepositoryURL string `json:"repositoryUrl" db:"repository_url"`
|
||||
SourceRevision string `json:"sourceRevision" db:"source_revision"`
|
||||
ArtifactID string `json:"artifactId" db:"artifact_id"`
|
||||
Checksum string `json:"checksum" db:"checksum"`
|
||||
KeyGeneration int `json:"keyGeneration" db:"key_generation"`
|
||||
LogsRef string `json:"logsRef,omitempty" db:"logs_ref"`
|
||||
Status domain.DistributionJobStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (ClientManagerBuildJob) TableName() string { return "client_manager_build_jobs" }
|
||||
|
||||
type RunUpdateJob struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
||||
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
|
||||
ArtifactID string `json:"artifactId" db:"artifact_id"`
|
||||
Checksum string `json:"checksum" db:"checksum"`
|
||||
JobID string `json:"jobId" db:"job_id"`
|
||||
IdempotencyKey string `json:"idempotencyKey" db:"idempotency_key"`
|
||||
Status domain.DistributionJobStatus `json:"status" db:"status"`
|
||||
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
||||
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
||||
}
|
||||
|
||||
func (RunUpdateJob) TableName() string { return "run_update_jobs" }
|
||||
|
||||
func RuntimeBindingFromDomain(binding domain.RuntimeBinding) RuntimeBinding {
|
||||
binding = domain.CopyRuntimeBinding(binding)
|
||||
return RuntimeBinding{
|
||||
ID: binding.ID,
|
||||
ServerInstanceID: binding.ServerInstanceID,
|
||||
PluginID: binding.PluginID,
|
||||
ProfileKey: binding.ProfileKey,
|
||||
Mode: binding.Mode,
|
||||
Bindings: binding.Bindings,
|
||||
MissingKeys: binding.MissingKeys,
|
||||
Status: binding.Status,
|
||||
CreatedAt: binding.CreatedAt,
|
||||
UpdatedAt: binding.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func (binding RuntimeBinding) ToDomain() domain.RuntimeBinding {
|
||||
return domain.RuntimeBinding{
|
||||
ID: binding.ID,
|
||||
ServerInstanceID: binding.ServerInstanceID,
|
||||
PluginID: binding.PluginID,
|
||||
ProfileKey: binding.ProfileKey,
|
||||
Mode: binding.Mode,
|
||||
Bindings: domain.CopyStringMap(binding.Bindings),
|
||||
MissingKeys: domain.CopyStringSlice(binding.MissingKeys),
|
||||
Status: binding.Status,
|
||||
CreatedAt: binding.CreatedAt,
|
||||
UpdatedAt: binding.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func EncryptedComponentKeyFromDomain(key domain.EncryptedComponentKey) EncryptedComponentKey {
|
||||
return EncryptedComponentKey(key)
|
||||
}
|
||||
|
||||
func (key EncryptedComponentKey) ToDomain() domain.EncryptedComponentKey {
|
||||
return domain.EncryptedComponentKey(key)
|
||||
}
|
||||
|
||||
func RunDistributionFromDomain(distribution domain.RunDistribution) RunDistribution {
|
||||
return RunDistribution(distribution)
|
||||
}
|
||||
|
||||
func (distribution RunDistribution) ToDomain() domain.RunDistribution {
|
||||
return domain.RunDistribution(distribution)
|
||||
}
|
||||
|
||||
func ClientManagerDistributionFromDomain(distribution domain.ClientManagerDistribution) ClientManagerDistribution {
|
||||
return ClientManagerDistribution(distribution)
|
||||
}
|
||||
|
||||
func (distribution ClientManagerDistribution) ToDomain() domain.ClientManagerDistribution {
|
||||
return domain.ClientManagerDistribution(distribution)
|
||||
}
|
||||
|
||||
func DependencyStatusFromDomain(status domain.DependencyStatus) DependencyStatus {
|
||||
return DependencyStatus(status)
|
||||
}
|
||||
|
||||
func (status DependencyStatus) ToDomain() domain.DependencyStatus {
|
||||
return domain.DependencyStatus(status)
|
||||
}
|
||||
|
||||
func ClientManagerBuildJobFromDomain(job domain.ClientManagerBuildJob) ClientManagerBuildJob {
|
||||
return ClientManagerBuildJob(job)
|
||||
}
|
||||
|
||||
func (job ClientManagerBuildJob) ToDomain() domain.ClientManagerBuildJob {
|
||||
return domain.ClientManagerBuildJob(job)
|
||||
}
|
||||
|
||||
func RunUpdateJobFromDomain(job domain.RunUpdateJob) RunUpdateJob {
|
||||
return RunUpdateJob(job)
|
||||
}
|
||||
|
||||
func (job RunUpdateJob) ToDomain() domain.RunUpdateJob {
|
||||
return domain.RunUpdateJob(job)
|
||||
}
|
||||
+52
-10
@@ -69,6 +69,21 @@ type PluginPermissions struct {
|
||||
Jobs bool `json:"jobs" db:"jobs"`
|
||||
// Artifacts allows artifact metadata and transfer references.
|
||||
Artifacts bool `json:"artifacts" db:"artifacts"`
|
||||
// RemoteAccess allows platform-mediated remote server operations.
|
||||
RemoteAccess bool `json:"remoteAccess" db:"remote_access"`
|
||||
}
|
||||
|
||||
type GamePluginRemoteAccess struct {
|
||||
// Methods lists declared remote access transports such as ftp, rsync, or run.
|
||||
Methods []string `json:"methods" db:"methods"`
|
||||
// RunCapabilities lists remote run job capabilities enabled by the plugin.
|
||||
RunCapabilities []string `json:"runCapabilities" db:"run_capabilities"`
|
||||
// DatabaseEngines lists database engines supported through run-mediated reads.
|
||||
DatabaseEngines []string `json:"databaseEngines" db:"database_engines"`
|
||||
// RCON indicates that platform-mediated RCON commands are supported.
|
||||
RCON bool `json:"rcon" db:"rcon"`
|
||||
// LogTransfer indicates that run-mediated log transfer is supported.
|
||||
LogTransfer bool `json:"logTransfer" db:"log_transfer"`
|
||||
}
|
||||
|
||||
type PluginLifecycleActions struct {
|
||||
@@ -128,6 +143,8 @@ type GamePlugin struct {
|
||||
Tags []string `json:"tags" db:"tags"`
|
||||
// AIPurposes stores platform-mediated AI usage purposes.
|
||||
AIPurposes []string `json:"aiPurposes" db:"ai_purposes"`
|
||||
// RemoteAccess stores plugin-declared remote access metadata.
|
||||
RemoteAccess GamePluginRemoteAccess `json:"remoteAccess" db:"remote_access"`
|
||||
// ValidationViolations stores safe validation findings for invalid plugins.
|
||||
ValidationViolations []string `json:"validationViolations" db:"validation_violations"`
|
||||
// Status is the plugin lifecycle status.
|
||||
@@ -377,6 +394,7 @@ func GamePluginFromDomain(plugin domain.GamePlugin) GamePlugin {
|
||||
Pages: pagesFromDomain(plugin.Pages),
|
||||
Tags: plugin.Tags,
|
||||
AIPurposes: plugin.AIPurposes,
|
||||
RemoteAccess: remoteAccessFromDomain(plugin.RemoteAccess),
|
||||
ValidationViolations: plugin.ValidationViolations,
|
||||
Status: plugin.Status,
|
||||
}
|
||||
@@ -400,6 +418,7 @@ func (plugin GamePlugin) ToDomain() domain.GamePlugin {
|
||||
Pages: pagesToDomain(plugin.Pages),
|
||||
Tags: domain.CopyStringSlice(plugin.Tags),
|
||||
AIPurposes: domain.CopyStringSlice(plugin.AIPurposes),
|
||||
RemoteAccess: plugin.RemoteAccess.ToDomain(),
|
||||
ValidationViolations: domain.CopyStringSlice(plugin.ValidationViolations),
|
||||
Status: plugin.Status,
|
||||
}
|
||||
@@ -459,21 +478,44 @@ func pagesFromDomain(pages []domain.GamePluginPage) []GamePluginPage {
|
||||
|
||||
func (permissions PluginPermissions) ToDomain() domain.PluginPermissions {
|
||||
return domain.PluginPermissions{
|
||||
AI: permissions.AI,
|
||||
Logs: permissions.Logs,
|
||||
Files: permissions.Files,
|
||||
Jobs: permissions.Jobs,
|
||||
Artifacts: permissions.Artifacts,
|
||||
AI: permissions.AI,
|
||||
Logs: permissions.Logs,
|
||||
Files: permissions.Files,
|
||||
Jobs: permissions.Jobs,
|
||||
Artifacts: permissions.Artifacts,
|
||||
RemoteAccess: permissions.RemoteAccess,
|
||||
}
|
||||
}
|
||||
|
||||
func permissionsFromDomain(permissions domain.PluginPermissions) PluginPermissions {
|
||||
return PluginPermissions{
|
||||
AI: permissions.AI,
|
||||
Logs: permissions.Logs,
|
||||
Files: permissions.Files,
|
||||
Jobs: permissions.Jobs,
|
||||
Artifacts: permissions.Artifacts,
|
||||
AI: permissions.AI,
|
||||
Logs: permissions.Logs,
|
||||
Files: permissions.Files,
|
||||
Jobs: permissions.Jobs,
|
||||
Artifacts: permissions.Artifacts,
|
||||
RemoteAccess: permissions.RemoteAccess,
|
||||
}
|
||||
}
|
||||
|
||||
func (remote GamePluginRemoteAccess) ToDomain() domain.GamePluginRemoteAccess {
|
||||
return domain.GamePluginRemoteAccess{
|
||||
Methods: domain.CopyStringSlice(remote.Methods),
|
||||
RunCapabilities: domain.CopyStringSlice(remote.RunCapabilities),
|
||||
DatabaseEngines: domain.CopyStringSlice(remote.DatabaseEngines),
|
||||
RCON: remote.RCON,
|
||||
LogTransfer: remote.LogTransfer,
|
||||
}
|
||||
}
|
||||
|
||||
func remoteAccessFromDomain(remote domain.GamePluginRemoteAccess) GamePluginRemoteAccess {
|
||||
remote = domain.CopyGamePluginRemoteAccess(remote)
|
||||
return GamePluginRemoteAccess{
|
||||
Methods: remote.Methods,
|
||||
RunCapabilities: remote.RunCapabilities,
|
||||
DatabaseEngines: remote.DatabaseEngines,
|
||||
RCON: remote.RCON,
|
||||
LogTransfer: remote.LogTransfer,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user