720 lines
26 KiB
Go
720 lines
26 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"browser.local/platform/domain"
|
|
)
|
|
|
|
type User struct {
|
|
// ID is the stable platform user identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// DisplayName is the user-visible account name.
|
|
DisplayName string `json:"displayName" db:"display_name"`
|
|
// Email is the optional login email.
|
|
Email string `json:"email,omitempty" db:"email"`
|
|
// Status is the user lifecycle status.
|
|
Status domain.UserStatus `json:"status" db:"status"`
|
|
// Roles stores assigned role keys.
|
|
Roles []string `json:"roles" db:"roles"`
|
|
// PasswordHash stores a platform-owned password verifier.
|
|
PasswordHash string `json:"passwordHash" db:"password_hash"`
|
|
// Profile stores bounded user contact metadata.
|
|
Profile domain.UserProfile `json:"profile" db:"profile"`
|
|
// Theme stores the user's persisted console theme preference.
|
|
Theme domain.UserThemePreference `json:"theme" db:"theme"`
|
|
// CreatedAt is the record creation timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
// UpdatedAt is the last update timestamp.
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
}
|
|
|
|
func (User) TableName() string { return "users" }
|
|
|
|
type AIProvider struct {
|
|
// ID is the stable AI provider identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// Name is the display name shown to operators.
|
|
Name string `json:"name" db:"name"`
|
|
// Kind identifies the provider protocol family.
|
|
Kind domain.AIProviderKind `json:"kind" db:"kind"`
|
|
// BaseURL is the provider or relay endpoint.
|
|
BaseURL string `json:"baseUrl" db:"base_url"`
|
|
// APIKeyRef references secret storage and never stores raw key material.
|
|
APIKeyRef string `json:"apiKeyRef" db:"api_key_ref"`
|
|
// Models lists allowed model identifiers.
|
|
Models []string `json:"models" db:"models"`
|
|
// DefaultModel is the optional default model identifier.
|
|
DefaultModel string `json:"defaultModel,omitempty" db:"default_model"`
|
|
// RelayMode controls direct, relay, or local routing.
|
|
RelayMode domain.AIRelayMode `json:"relayMode" db:"relay_mode"`
|
|
// TimeoutMS is the provider request timeout in milliseconds.
|
|
TimeoutMS int `json:"timeoutMs" db:"timeout_ms"`
|
|
// Status is the provider lifecycle status.
|
|
Status domain.AIProviderStatus `json:"status" db:"status"`
|
|
// RedactionPolicy identifies prompt/input/output redaction behavior.
|
|
RedactionPolicy string `json:"redactionPolicy" db:"redaction_policy"`
|
|
}
|
|
|
|
func (AIProvider) TableName() string { return "ai_providers" }
|
|
|
|
type PluginPermissions struct {
|
|
// AI allows platform-mediated AI requests.
|
|
AI bool `json:"ai" db:"ai"`
|
|
// Logs allows scoped log queries.
|
|
Logs bool `json:"logs" db:"logs"`
|
|
// Files allows scoped file/artifact operations.
|
|
Files bool `json:"files" db:"files"`
|
|
// Jobs allows lifecycle job dispatch.
|
|
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 {
|
|
// Install references the install action contract.
|
|
Install string `json:"install" db:"install"`
|
|
// Start references the start action contract.
|
|
Start string `json:"start" db:"start"`
|
|
// Stop references the stop action contract.
|
|
Stop string `json:"stop" db:"stop"`
|
|
// Restart references the optional restart action contract.
|
|
Restart string `json:"restart,omitempty" db:"restart"`
|
|
// Status references the optional status action contract.
|
|
Status string `json:"status,omitempty" db:"status"`
|
|
}
|
|
|
|
type GamePluginPage struct {
|
|
// Key is stable within the plugin manifest.
|
|
Key string `json:"key" db:"key"`
|
|
// Title is the page label shown by platform clients.
|
|
Title string `json:"title" db:"title"`
|
|
// Path is the plugin-local page route.
|
|
Path string `json:"path" db:"path"`
|
|
// Permissions lists scoped platform bridge permissions required by the page.
|
|
Permissions []string `json:"permissions" db:"permissions"`
|
|
}
|
|
|
|
type GamePlugin struct {
|
|
// ID is the installed game management plugin identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// Name is the plugin display name.
|
|
Name string `json:"name" db:"name"`
|
|
// Description is bounded marketplace metadata from the manifest.
|
|
Description string `json:"description,omitempty" db:"description"`
|
|
// Version is the installed plugin version.
|
|
Version string `json:"version" db:"version"`
|
|
// ServerType is the game/server type key this plugin manages.
|
|
ServerType string `json:"serverType" db:"server_type"`
|
|
// ServerDisplayName is the user-visible server type name.
|
|
ServerDisplayName string `json:"serverDisplayName,omitempty" db:"server_display_name"`
|
|
// SupportedOS lists run operating systems declared by the plugin.
|
|
SupportedOS []string `json:"supportedOs" db:"supported_os"`
|
|
// ManifestRef points to the immutable manifest artifact.
|
|
ManifestRef string `json:"manifestRef" db:"manifest_ref"`
|
|
// CreateFormSchemaRef points to the create form schema artifact.
|
|
CreateFormSchemaRef string `json:"createFormSchemaRef" db:"create_form_schema_ref"`
|
|
// RequiredRunCapabilities lists run capabilities needed by this plugin.
|
|
RequiredRunCapabilities []string `json:"requiredRunCapabilities" db:"required_run_capabilities"`
|
|
// DeclaredPermissions lists scoped manifest permission keys.
|
|
DeclaredPermissions []string `json:"declaredPermissions" db:"declared_permissions"`
|
|
// Permissions declares platform-mediated plugin abilities.
|
|
Permissions PluginPermissions `json:"permissions" db:"permissions"`
|
|
// LifecycleActions stores manifest lifecycle action references.
|
|
LifecycleActions PluginLifecycleActions `json:"lifecycleActions" db:"lifecycle_actions"`
|
|
// Pages stores plugin-local page metadata.
|
|
Pages []GamePluginPage `json:"pages" db:"pages"`
|
|
// Tags stores bounded catalog tags.
|
|
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.
|
|
Status domain.GamePluginStatus `json:"status" db:"status"`
|
|
}
|
|
|
|
func (GamePlugin) TableName() string { return "game_plugins" }
|
|
|
|
type ServerInstance struct {
|
|
// ID is the stable server instance identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// PluginID references the installed game management plugin.
|
|
PluginID string `json:"pluginId" db:"plugin_id"`
|
|
// PluginVersion records the plugin version used for creation or reconcile.
|
|
PluginVersion string `json:"pluginVersion" db:"plugin_version"`
|
|
// RunEndpointID references the selected run endpoint.
|
|
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
|
|
// Name is the server display name.
|
|
Name string `json:"name" db:"name"`
|
|
// OwnerUserID identifies the server owner account.
|
|
OwnerUserID string `json:"ownerUserId" db:"owner_user_id"`
|
|
// AdminUserIDs identifies server-scoped administrator accounts.
|
|
AdminUserIDs []string `json:"adminUserIds" db:"admin_user_ids"`
|
|
// State is the server lifecycle state.
|
|
State domain.ServerInstanceState `json:"state" db:"state"`
|
|
// ConfigVersion is the platform-managed optimistic concurrency version.
|
|
ConfigVersion int `json:"configVersion" db:"config_version"`
|
|
// CreatedAt is the record creation timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
// UpdatedAt is the last update timestamp.
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
}
|
|
|
|
func (ServerInstance) TableName() string { return "server_instances" }
|
|
|
|
type RunCapacity struct {
|
|
// MaxJobs is the advertised job concurrency.
|
|
MaxJobs int `json:"maxJobs" db:"max_jobs"`
|
|
// RunningJobs is the current running job count.
|
|
RunningJobs int `json:"runningJobs" db:"running_jobs"`
|
|
// QueuedJobs is the current queued job count.
|
|
QueuedJobs int `json:"queuedJobs" db:"queued_jobs"`
|
|
// Summary is a bounded human-readable capacity summary.
|
|
Summary string `json:"summary,omitempty" db:"summary"`
|
|
}
|
|
|
|
type RunEndpoint struct {
|
|
// ID is the stable run endpoint identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// DisplayName is the visible executor name.
|
|
DisplayName string `json:"displayName" db:"display_name"`
|
|
// Version is the run binary version.
|
|
Version string `json:"version" db:"version"`
|
|
// Status is the current endpoint status.
|
|
Status domain.RunEndpointStatus `json:"status" db:"status"`
|
|
// Capabilities lists advertised run capability keys.
|
|
Capabilities []string `json:"capabilities" db:"capabilities"`
|
|
// Capacity stores current queue and resource summary.
|
|
Capacity RunCapacity `json:"capacity" db:"capacity"`
|
|
// LastHeartbeatAt is the latest control heartbeat timestamp.
|
|
LastHeartbeatAt time.Time `json:"lastHeartbeatAt" db:"last_heartbeat_at"`
|
|
}
|
|
|
|
func (RunEndpoint) TableName() string { return "run_endpoints" }
|
|
|
|
type JobProgress struct {
|
|
// Percent is bounded from 0 to 100.
|
|
Percent int `json:"percent" db:"percent"`
|
|
// Message is a bounded progress summary.
|
|
Message string `json:"message,omitempty" db:"message"`
|
|
}
|
|
|
|
type Job struct {
|
|
// ID is the stable job identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// ServerInstanceID optionally references the target server.
|
|
ServerInstanceID string `json:"serverInstanceId,omitempty" db:"server_instance_id"`
|
|
// RunEndpointID references the target run endpoint.
|
|
RunEndpointID string `json:"runEndpointId" db:"run_endpoint_id"`
|
|
// Capability is the requested run capability key.
|
|
Capability string `json:"capability" db:"capability"`
|
|
// TargetKey is a logical config/file key, never a host path.
|
|
TargetKey string `json:"targetKey,omitempty" db:"target_key"`
|
|
// InputRef points to a platform-scoped write payload or artifact.
|
|
InputRef string `json:"inputRef,omitempty" db:"input_ref"`
|
|
// IdempotencyKey detects duplicate job requests per run endpoint.
|
|
IdempotencyKey string `json:"idempotencyKey" db:"idempotency_key"`
|
|
// State is the job lifecycle state.
|
|
State domain.JobState `json:"state" db:"state"`
|
|
// Progress stores bounded progress metadata.
|
|
Progress JobProgress `json:"progress" db:"progress"`
|
|
// ResultRef references the terminal result artifact or summary.
|
|
ResultRef string `json:"resultRef,omitempty" db:"result_ref"`
|
|
// CreatedAt is the record creation timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
// UpdatedAt is the last update timestamp.
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
}
|
|
|
|
func (Job) TableName() string { return "jobs" }
|
|
|
|
type Artifact struct {
|
|
// ID is the stable artifact identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// OwnerKind identifies the owning resource class.
|
|
OwnerKind domain.ArtifactOwnerKind `json:"ownerKind" db:"owner_kind"`
|
|
// OwnerID identifies the owning resource.
|
|
OwnerID string `json:"ownerId" db:"owner_id"`
|
|
// SizeBytes stores the expected or final artifact size.
|
|
SizeBytes int64 `json:"sizeBytes" db:"size_bytes"`
|
|
// Checksum stores the final checksum.
|
|
Checksum string `json:"checksum" db:"checksum"`
|
|
// State is the artifact lifecycle state.
|
|
State domain.ArtifactState `json:"state" db:"state"`
|
|
// CreatedAt is the record creation timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
// UpdatedAt is the last update timestamp.
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
}
|
|
|
|
func (Artifact) TableName() string { return "artifacts" }
|
|
|
|
type LogStream struct {
|
|
// ID is the stable log stream identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// ServerInstanceID references the target server.
|
|
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
|
|
// Source identifies process, file, plugin, or custom source.
|
|
Source domain.LogStreamSource `json:"source" db:"source"`
|
|
// StreamKey is stable within the server instance.
|
|
StreamKey string `json:"streamKey" db:"stream_key"`
|
|
// LatestSeq is the latest accepted sequence number.
|
|
LatestSeq uint64 `json:"latestSeq" db:"latest_seq"`
|
|
// StorageBackend identifies the log body backend.
|
|
StorageBackend domain.LogStorageBackend `json:"storageBackend" db:"storage_backend"`
|
|
// RetentionPolicy identifies retention behavior.
|
|
RetentionPolicy string `json:"retentionPolicy" db:"retention_policy"`
|
|
// CreatedAt is the record creation timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
// UpdatedAt is the last update timestamp.
|
|
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
|
|
}
|
|
|
|
func (LogStream) TableName() string { return "log_streams" }
|
|
|
|
type AuditEvent struct {
|
|
// ID is the stable audit event identifier.
|
|
ID string `json:"id" db:"id"`
|
|
// ActorID references the user or system actor.
|
|
ActorID string `json:"actorId" db:"actor_id"`
|
|
// Action is the stable action key.
|
|
Action string `json:"action" db:"action"`
|
|
// ResourceKind identifies the audited resource type.
|
|
ResourceKind string `json:"resourceKind" db:"resource_kind"`
|
|
// ResourceID identifies the audited resource.
|
|
ResourceID string `json:"resourceId" db:"resource_id"`
|
|
// Result is the audit outcome.
|
|
Result domain.AuditResult `json:"result" db:"result"`
|
|
// Summary is a bounded redacted summary.
|
|
Summary string `json:"summary" db:"summary"`
|
|
// CreatedAt is the audit timestamp.
|
|
CreatedAt time.Time `json:"createdAt" db:"created_at"`
|
|
}
|
|
|
|
func (AuditEvent) TableName() string { return "audit_events" }
|
|
|
|
func UserFromDomain(user domain.User) User {
|
|
user = domain.CopyUser(user)
|
|
return User{
|
|
ID: user.ID,
|
|
DisplayName: user.DisplayName,
|
|
Email: user.Email,
|
|
Status: user.Status,
|
|
Roles: user.Roles,
|
|
PasswordHash: user.PasswordHash,
|
|
Profile: user.Profile,
|
|
Theme: user.Theme,
|
|
CreatedAt: user.CreatedAt,
|
|
UpdatedAt: user.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (user User) ToDomain() domain.User {
|
|
return domain.User{
|
|
ID: user.ID,
|
|
DisplayName: user.DisplayName,
|
|
Email: user.Email,
|
|
Status: user.Status,
|
|
Roles: domain.CopyStringSlice(user.Roles),
|
|
PasswordHash: user.PasswordHash,
|
|
Profile: user.Profile,
|
|
Theme: user.Theme,
|
|
CreatedAt: user.CreatedAt,
|
|
UpdatedAt: user.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func AIProviderFromDomain(provider domain.AIProvider) AIProvider {
|
|
provider = domain.CopyAIProvider(provider)
|
|
return AIProvider{
|
|
ID: provider.ID,
|
|
Name: provider.Name,
|
|
Kind: provider.Kind,
|
|
BaseURL: provider.BaseURL,
|
|
APIKeyRef: provider.APIKeyRef,
|
|
Models: provider.Models,
|
|
DefaultModel: provider.DefaultModel,
|
|
RelayMode: provider.RelayMode,
|
|
TimeoutMS: provider.TimeoutMS,
|
|
Status: provider.Status,
|
|
RedactionPolicy: provider.RedactionPolicy,
|
|
}
|
|
}
|
|
|
|
func (provider AIProvider) ToDomain() domain.AIProvider {
|
|
return domain.AIProvider{
|
|
ID: provider.ID,
|
|
Name: provider.Name,
|
|
Kind: provider.Kind,
|
|
BaseURL: provider.BaseURL,
|
|
APIKeyRef: provider.APIKeyRef,
|
|
Models: domain.CopyStringSlice(provider.Models),
|
|
DefaultModel: provider.DefaultModel,
|
|
RelayMode: provider.RelayMode,
|
|
TimeoutMS: provider.TimeoutMS,
|
|
Status: provider.Status,
|
|
RedactionPolicy: provider.RedactionPolicy,
|
|
}
|
|
}
|
|
|
|
func GamePluginFromDomain(plugin domain.GamePlugin) GamePlugin {
|
|
plugin = domain.CopyGamePlugin(plugin)
|
|
return GamePlugin{
|
|
ID: plugin.ID,
|
|
Name: plugin.Name,
|
|
Description: plugin.Description,
|
|
Version: plugin.Version,
|
|
ServerType: plugin.ServerType,
|
|
ServerDisplayName: plugin.ServerDisplayName,
|
|
SupportedOS: plugin.SupportedOS,
|
|
ManifestRef: plugin.ManifestRef,
|
|
CreateFormSchemaRef: plugin.CreateFormSchemaRef,
|
|
RequiredRunCapabilities: plugin.RequiredRunCapabilities,
|
|
DeclaredPermissions: plugin.DeclaredPermissions,
|
|
Permissions: permissionsFromDomain(plugin.Permissions),
|
|
LifecycleActions: lifecycleActionsFromDomain(plugin.LifecycleActions),
|
|
Pages: pagesFromDomain(plugin.Pages),
|
|
Tags: plugin.Tags,
|
|
AIPurposes: plugin.AIPurposes,
|
|
RemoteAccess: remoteAccessFromDomain(plugin.RemoteAccess),
|
|
ValidationViolations: plugin.ValidationViolations,
|
|
Status: plugin.Status,
|
|
}
|
|
}
|
|
|
|
func (plugin GamePlugin) ToDomain() domain.GamePlugin {
|
|
return domain.GamePlugin{
|
|
ID: plugin.ID,
|
|
Name: plugin.Name,
|
|
Description: plugin.Description,
|
|
Version: plugin.Version,
|
|
ServerType: plugin.ServerType,
|
|
ServerDisplayName: plugin.ServerDisplayName,
|
|
SupportedOS: domain.CopyStringSlice(plugin.SupportedOS),
|
|
ManifestRef: plugin.ManifestRef,
|
|
CreateFormSchemaRef: plugin.CreateFormSchemaRef,
|
|
RequiredRunCapabilities: domain.CopyStringSlice(plugin.RequiredRunCapabilities),
|
|
DeclaredPermissions: domain.CopyStringSlice(plugin.DeclaredPermissions),
|
|
Permissions: plugin.Permissions.ToDomain(),
|
|
LifecycleActions: plugin.LifecycleActions.ToDomain(),
|
|
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,
|
|
}
|
|
}
|
|
|
|
func (actions PluginLifecycleActions) ToDomain() domain.PluginLifecycleActions {
|
|
return domain.PluginLifecycleActions{
|
|
Install: actions.Install,
|
|
Start: actions.Start,
|
|
Stop: actions.Stop,
|
|
Restart: actions.Restart,
|
|
Status: actions.Status,
|
|
}
|
|
}
|
|
|
|
func lifecycleActionsFromDomain(actions domain.PluginLifecycleActions) PluginLifecycleActions {
|
|
return PluginLifecycleActions{
|
|
Install: actions.Install,
|
|
Start: actions.Start,
|
|
Stop: actions.Stop,
|
|
Restart: actions.Restart,
|
|
Status: actions.Status,
|
|
}
|
|
}
|
|
|
|
func pagesToDomain(pages []GamePluginPage) []domain.GamePluginPage {
|
|
if pages == nil {
|
|
return nil
|
|
}
|
|
out := make([]domain.GamePluginPage, len(pages))
|
|
for i, page := range pages {
|
|
out[i] = domain.GamePluginPage{
|
|
Key: page.Key,
|
|
Title: page.Title,
|
|
Path: page.Path,
|
|
Permissions: domain.CopyStringSlice(page.Permissions),
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func pagesFromDomain(pages []domain.GamePluginPage) []GamePluginPage {
|
|
if pages == nil {
|
|
return nil
|
|
}
|
|
out := make([]GamePluginPage, len(pages))
|
|
for i, page := range pages {
|
|
out[i] = GamePluginPage{
|
|
Key: page.Key,
|
|
Title: page.Title,
|
|
Path: page.Path,
|
|
Permissions: domain.CopyStringSlice(page.Permissions),
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func (permissions PluginPermissions) ToDomain() domain.PluginPermissions {
|
|
return domain.PluginPermissions{
|
|
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,
|
|
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,
|
|
}
|
|
}
|
|
|
|
func ServerInstanceFromDomain(instance domain.ServerInstance) ServerInstance {
|
|
return ServerInstance{
|
|
ID: instance.ID,
|
|
PluginID: instance.PluginID,
|
|
PluginVersion: instance.PluginVersion,
|
|
RunEndpointID: instance.RunEndpointID,
|
|
Name: instance.Name,
|
|
State: instance.State,
|
|
ConfigVersion: instance.ConfigVersion,
|
|
CreatedAt: instance.CreatedAt,
|
|
UpdatedAt: instance.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (instance ServerInstance) ToDomain() domain.ServerInstance {
|
|
return domain.ServerInstance{
|
|
ID: instance.ID,
|
|
PluginID: instance.PluginID,
|
|
PluginVersion: instance.PluginVersion,
|
|
RunEndpointID: instance.RunEndpointID,
|
|
Name: instance.Name,
|
|
State: instance.State,
|
|
ConfigVersion: instance.ConfigVersion,
|
|
CreatedAt: instance.CreatedAt,
|
|
UpdatedAt: instance.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func RunEndpointFromDomain(endpoint domain.RunEndpoint) RunEndpoint {
|
|
endpoint = domain.CopyRunEndpoint(endpoint)
|
|
return RunEndpoint{
|
|
ID: endpoint.ID,
|
|
DisplayName: endpoint.DisplayName,
|
|
Version: endpoint.Version,
|
|
Status: endpoint.Status,
|
|
Capabilities: endpoint.Capabilities,
|
|
Capacity: capacityFromDomain(endpoint.Capacity),
|
|
LastHeartbeatAt: endpoint.LastHeartbeatAt,
|
|
}
|
|
}
|
|
|
|
func (endpoint RunEndpoint) ToDomain() domain.RunEndpoint {
|
|
return domain.RunEndpoint{
|
|
ID: endpoint.ID,
|
|
DisplayName: endpoint.DisplayName,
|
|
Version: endpoint.Version,
|
|
Status: endpoint.Status,
|
|
Capabilities: domain.CopyStringSlice(endpoint.Capabilities),
|
|
Capacity: endpoint.Capacity.ToDomain(),
|
|
LastHeartbeatAt: endpoint.LastHeartbeatAt,
|
|
}
|
|
}
|
|
|
|
func (capacity RunCapacity) ToDomain() domain.RunCapacity {
|
|
return domain.RunCapacity{
|
|
MaxJobs: capacity.MaxJobs,
|
|
RunningJobs: capacity.RunningJobs,
|
|
QueuedJobs: capacity.QueuedJobs,
|
|
Summary: capacity.Summary,
|
|
}
|
|
}
|
|
|
|
func capacityFromDomain(capacity domain.RunCapacity) RunCapacity {
|
|
return RunCapacity{
|
|
MaxJobs: capacity.MaxJobs,
|
|
RunningJobs: capacity.RunningJobs,
|
|
QueuedJobs: capacity.QueuedJobs,
|
|
Summary: capacity.Summary,
|
|
}
|
|
}
|
|
|
|
func JobFromDomain(job domain.Job) Job {
|
|
return Job{
|
|
ID: job.ID,
|
|
ServerInstanceID: job.ServerInstanceID,
|
|
RunEndpointID: job.RunEndpointID,
|
|
Capability: job.Capability,
|
|
TargetKey: job.TargetKey,
|
|
InputRef: job.InputRef,
|
|
IdempotencyKey: job.IdempotencyKey,
|
|
State: job.State,
|
|
Progress: progressFromDomain(job.Progress),
|
|
ResultRef: job.ResultRef,
|
|
CreatedAt: job.CreatedAt,
|
|
UpdatedAt: job.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (job Job) ToDomain() domain.Job {
|
|
return domain.Job{
|
|
ID: job.ID,
|
|
ServerInstanceID: job.ServerInstanceID,
|
|
RunEndpointID: job.RunEndpointID,
|
|
Capability: job.Capability,
|
|
TargetKey: job.TargetKey,
|
|
InputRef: job.InputRef,
|
|
IdempotencyKey: job.IdempotencyKey,
|
|
State: job.State,
|
|
Progress: job.Progress.ToDomain(),
|
|
ResultRef: job.ResultRef,
|
|
CreatedAt: job.CreatedAt,
|
|
UpdatedAt: job.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (progress JobProgress) ToDomain() domain.JobProgress {
|
|
return domain.JobProgress{
|
|
Percent: progress.Percent,
|
|
Message: progress.Message,
|
|
}
|
|
}
|
|
|
|
func progressFromDomain(progress domain.JobProgress) JobProgress {
|
|
return JobProgress{
|
|
Percent: progress.Percent,
|
|
Message: progress.Message,
|
|
}
|
|
}
|
|
|
|
func ArtifactFromDomain(artifact domain.Artifact) Artifact {
|
|
return Artifact{
|
|
ID: artifact.ID,
|
|
OwnerKind: artifact.OwnerKind,
|
|
OwnerID: artifact.OwnerID,
|
|
SizeBytes: artifact.SizeBytes,
|
|
Checksum: artifact.Checksum,
|
|
State: artifact.State,
|
|
CreatedAt: artifact.CreatedAt,
|
|
UpdatedAt: artifact.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (artifact Artifact) ToDomain() domain.Artifact {
|
|
return domain.Artifact{
|
|
ID: artifact.ID,
|
|
OwnerKind: artifact.OwnerKind,
|
|
OwnerID: artifact.OwnerID,
|
|
SizeBytes: artifact.SizeBytes,
|
|
Checksum: artifact.Checksum,
|
|
State: artifact.State,
|
|
CreatedAt: artifact.CreatedAt,
|
|
UpdatedAt: artifact.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func LogStreamFromDomain(stream domain.LogStream) LogStream {
|
|
return LogStream{
|
|
ID: stream.ID,
|
|
ServerInstanceID: stream.ServerInstanceID,
|
|
Source: stream.Source,
|
|
StreamKey: stream.StreamKey,
|
|
LatestSeq: stream.LatestSeq,
|
|
StorageBackend: stream.StorageBackend,
|
|
RetentionPolicy: stream.RetentionPolicy,
|
|
CreatedAt: stream.CreatedAt,
|
|
UpdatedAt: stream.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func (stream LogStream) ToDomain() domain.LogStream {
|
|
return domain.LogStream{
|
|
ID: stream.ID,
|
|
ServerInstanceID: stream.ServerInstanceID,
|
|
Source: stream.Source,
|
|
StreamKey: stream.StreamKey,
|
|
LatestSeq: stream.LatestSeq,
|
|
StorageBackend: stream.StorageBackend,
|
|
RetentionPolicy: stream.RetentionPolicy,
|
|
CreatedAt: stream.CreatedAt,
|
|
UpdatedAt: stream.UpdatedAt,
|
|
}
|
|
}
|
|
|
|
func AuditEventFromDomain(event domain.AuditEvent) AuditEvent {
|
|
return AuditEvent{
|
|
ID: event.ID,
|
|
ActorID: event.ActorID,
|
|
Action: event.Action,
|
|
ResourceKind: event.ResourceKind,
|
|
ResourceID: event.ResourceID,
|
|
Result: event.Result,
|
|
Summary: event.Summary,
|
|
CreatedAt: event.CreatedAt,
|
|
}
|
|
}
|
|
|
|
func (event AuditEvent) ToDomain() domain.AuditEvent {
|
|
return domain.AuditEvent{
|
|
ID: event.ID,
|
|
ActorID: event.ActorID,
|
|
Action: event.Action,
|
|
ResourceKind: event.ResourceKind,
|
|
ResourceID: event.ResourceID,
|
|
Result: event.Result,
|
|
Summary: event.Summary,
|
|
CreatedAt: event.CreatedAt,
|
|
}
|
|
}
|