package dto import ( "time" "browser.local/platform/domain" ) type PluginLifecycleActionRequest struct { ServerInstanceID string `json:"serverInstanceId"` Operation string `json:"operation"` TargetVersion string `json:"targetVersion,omitempty"` IdempotencyKey string `json:"idempotencyKey"` } type PluginLifecycleInstallationResponse struct { ID string `json:"id"` PluginID string `json:"pluginId"` ServerInstanceID string `json:"serverInstanceId"` CurrentVersion string `json:"currentVersion,omitempty"` TargetVersion string `json:"targetVersion,omitempty"` PreviousVersion string `json:"previousVersion,omitempty"` DesiredState string `json:"desiredState"` CurrentState string `json:"currentState"` LastOperation string `json:"lastOperation,omitempty"` Compatibility string `json:"compatibility,omitempty"` DependencyState string `json:"dependencyState,omitempty"` JobID string `json:"jobId,omitempty"` FailureReason string `json:"failureReason,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } type PluginLifecycleListResponse struct { Items []PluginLifecycleInstallationResponse `json:"items"` Count int `json:"count"` } type PluginLifecycleActionResponse struct { Status string `json:"status"` Installation PluginLifecycleInstallationResponse `json:"installation"` Job JobResponse `json:"job"` } func (request PluginLifecycleActionRequest) ToDomain(pluginID string) domain.PluginLifecycleRequest { return domain.PluginLifecycleRequest{PluginID: pluginID, ServerInstanceID: request.ServerInstanceID, Operation: domain.PluginLifecycleOperation(request.Operation), TargetVersion: request.TargetVersion, IdempotencyKey: request.IdempotencyKey} } func PluginLifecycleFromDomain(installation domain.PluginLifecycleInstallation) PluginLifecycleInstallationResponse { installation = domain.CopyPluginLifecycleInstallation(installation) return PluginLifecycleInstallationResponse{ID: installation.ID, PluginID: installation.PluginID, ServerInstanceID: installation.ServerInstanceID, CurrentVersion: installation.CurrentVersion, TargetVersion: installation.TargetVersion, PreviousVersion: installation.PreviousVersion, DesiredState: string(installation.DesiredState), CurrentState: string(installation.CurrentState), LastOperation: string(installation.LastOperation), Compatibility: installation.Compatibility, DependencyState: string(installation.DependencyState), JobID: installation.JobID, FailureReason: installation.FailureReason, CreatedAt: installation.CreatedAt, UpdatedAt: installation.UpdatedAt} } func PluginLifecycleListFromDomain(installations []domain.PluginLifecycleInstallation) PluginLifecycleListResponse { items := make([]PluginLifecycleInstallationResponse, len(installations)) for i, installation := range installations { items[i] = PluginLifecycleFromDomain(installation) } return PluginLifecycleListResponse{Items: items, Count: len(items)} } func PluginLifecycleResultFromDomain(result domain.PluginLifecycleResult) PluginLifecycleActionResponse { result = domain.CopyPluginLifecycleResult(result) return PluginLifecycleActionResponse{Status: result.Status, Installation: PluginLifecycleFromDomain(result.Installation), Job: JobFromDomain(result.Job)} }