feat: support custom server deployment drafts
This commit is contained in:
@@ -85,6 +85,9 @@ type Core interface {
|
||||
CreateServerInstanceForSession(string, domain.ServerInstance) (domain.ServerInstance, error)
|
||||
CreateServerInstanceWorkflow(domain.ServerLifecycleCreate) (domain.ServerLifecycleResult, error)
|
||||
CreateServerInstanceWorkflowForSession(string, domain.ServerLifecycleCreate) (domain.ServerLifecycleResult, error)
|
||||
GetServerDeploymentForSession(string, string) (domain.ServerDeploymentView, error)
|
||||
UpdateServerDeploymentForSession(string, string, domain.ServerDeploymentUpdate) (domain.ServerDeploymentView, error)
|
||||
DeployServerInstanceForSession(string, domain.ServerLifecycleCommand) (domain.ServerLifecycleResult, error)
|
||||
StartServerInstance(domain.ServerLifecycleCommand) (domain.ServerLifecycleResult, error)
|
||||
StartServerInstanceForSession(string, domain.ServerLifecycleCommand) (domain.ServerLifecycleResult, error)
|
||||
StopServerInstance(domain.ServerLifecycleCommand) (domain.ServerLifecycleResult, error)
|
||||
@@ -693,6 +696,7 @@ func gamePluginFromManifestRegistration(registration domain.GamePluginManifestRe
|
||||
SupportedOS: manifest.Server.SupportedOS,
|
||||
ManifestRef: registration.ManifestRef,
|
||||
CreateFormSchemaRef: manifest.Server.CreateFormSchema,
|
||||
CreateFields: manifest.Server.CreateFields,
|
||||
RequiredRunCapabilities: manifest.Capabilities,
|
||||
DeclaredPermissions: manifest.Permissions,
|
||||
Permissions: pluginPermissionsFromManifest(manifest.Permissions),
|
||||
@@ -1458,6 +1462,7 @@ func marketplacePluginFromGamePlugin(plugin domain.GamePlugin) domain.PluginMark
|
||||
SupportedOS: plugin.SupportedOS,
|
||||
ManifestRef: plugin.ManifestRef,
|
||||
CreateFormSchemaRef: plugin.CreateFormSchemaRef,
|
||||
CreateFields: plugin.CreateFields,
|
||||
Capabilities: plugin.RequiredRunCapabilities,
|
||||
DeclaredPermissions: plugin.DeclaredPermissions,
|
||||
Permissions: plugin.Permissions,
|
||||
@@ -1534,9 +1539,12 @@ func (svc *CoreService) CreateServerInstance(instance domain.ServerInstance) (do
|
||||
if err != nil {
|
||||
return domain.ServerInstance{}, fmt.Errorf("get plugin dependency: %w", err)
|
||||
}
|
||||
endpoint, err := svc.store.RunEndpoints().Get(instance.RunEndpointID)
|
||||
if err != nil {
|
||||
return domain.ServerInstance{}, fmt.Errorf("get run endpoint dependency: %w", err)
|
||||
var endpoint domain.RunEndpoint
|
||||
if strings.TrimSpace(instance.RunEndpointID) != "" {
|
||||
endpoint, err = svc.store.RunEndpoints().Get(instance.RunEndpointID)
|
||||
if err != nil {
|
||||
return domain.ServerInstance{}, fmt.Errorf("get run endpoint dependency: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if instance.PluginVersion == "" {
|
||||
@@ -1559,8 +1567,15 @@ func (svc *CoreService) CreateServerInstance(instance domain.ServerInstance) (do
|
||||
if err := validator.ValidateServerInstance(instance); err != nil {
|
||||
return domain.ServerInstance{}, err
|
||||
}
|
||||
if err := validator.ValidateServerInstanceDependencies(instance, plugin, endpoint); err != nil {
|
||||
return domain.ServerInstance{}, err
|
||||
if instance.State != domain.ServerInstanceStateDraft && strings.TrimSpace(instance.RunEndpointID) == "" {
|
||||
return domain.ServerInstance{}, validationError("runEndpointId is required when server is not a draft")
|
||||
}
|
||||
if strings.TrimSpace(instance.RunEndpointID) != "" {
|
||||
if err := validator.ValidateServerInstanceDependencies(instance, plugin, endpoint); err != nil {
|
||||
return domain.ServerInstance{}, err
|
||||
}
|
||||
} else if plugin.Status != domain.GamePluginStatusInstalled || plugin.Version != instance.PluginVersion {
|
||||
return domain.ServerInstance{}, validationError("plugin must be installed and match the server plugin version")
|
||||
}
|
||||
if err := svc.store.ServerInstances().Create(instance); err != nil {
|
||||
return domain.ServerInstance{}, err
|
||||
|
||||
Reference in New Issue
Block a user