package dto import ( "time" "browser.local/platform/domain" ) type SCUMSafeSummaryBody struct { Title string `json:"title,omitempty"` Message string `json:"message,omitempty"` Details map[string]string `json:"details,omitempty"` } type SCUMDataObservationResponse struct { ID string `json:"id"` ServerInstanceID string `json:"serverInstanceId"` PluginID string `json:"pluginId"` Source string `json:"source"` QueryKey string `json:"queryKey,omitempty"` SubjectType string `json:"subjectType,omitempty"` SubjectID string `json:"subjectId,omitempty"` Sequence uint64 `json:"sequence"` Checksum string `json:"checksum,omitempty"` Status string `json:"status"` ErrorCode string `json:"errorCode,omitempty"` SafeSummary SCUMSafeSummaryBody `json:"safeSummary,omitempty"` ObservedAt time.Time `json:"observedAt"` ReceivedAt time.Time `json:"receivedAt"` } type SCUMProjectionFreshnessBody struct { Status string `json:"status"` ObservationID string `json:"observationId,omitempty"` Source string `json:"source,omitempty"` QueryKey string `json:"queryKey,omitempty"` Sequence uint64 `json:"sequence,omitempty"` Checksum string `json:"checksum,omitempty"` StaleReason string `json:"staleReason,omitempty"` ObservedAt time.Time `json:"observedAt,omitempty"` ReceivedAt time.Time `json:"receivedAt,omitempty"` } type SCUMMutationGuardBody struct { FieldKey string `json:"fieldKey,omitempty"` Before any `json:"before,omitempty"` After any `json:"after,omitempty"` MaxRowsAffected int `json:"maxRowsAffected,omitempty"` SafetyWindow string `json:"safetyWindow,omitempty"` BackupRef string `json:"backupRef,omitempty"` RequiresOfflinePlayer bool `json:"requiresOfflinePlayer,omitempty"` RequiresMaintenance bool `json:"requiresMaintenance,omitempty"` RequiresBackup bool `json:"requiresBackup,omitempty"` } type SCUMOperationConfirmationBody struct { Status string `json:"status,omitempty"` ObservationID string `json:"observationId,omitempty"` ConfirmedFields map[string]any `json:"confirmedFields,omitempty"` AffectedRows int `json:"affectedRows,omitempty"` MutationChecksum string `json:"mutationChecksum,omitempty"` Checksum string `json:"checksum,omitempty"` ObservedAt time.Time `json:"observedAt,omitempty"` SafeSummary SCUMSafeSummaryBody `json:"safeSummary,omitempty"` } type SCUMOperationRequestBody struct { TemplateKey string `json:"templateKey"` PlayerID string `json:"playerId,omitempty"` Payload map[string]any `json:"payload,omitempty"` Guard SCUMMutationGuardBody `json:"guard,omitempty"` Reason string `json:"reason"` IdempotencyKey string `json:"idempotencyKey"` } type SCUMWorkflowCreateRequest struct { TemplateKey string `json:"templateKey"` IdempotencyKey string `json:"idempotencyKey"` Input map[string]any `json:"input,omitempty"` } type SCUMOperationResponse struct { ID string `json:"id"` ServerInstanceID string `json:"serverInstanceId"` PluginID string `json:"pluginId"` TemplateKey string `json:"templateKey"` PlayerID string `json:"playerId,omitempty"` RequesterID string `json:"requesterId,omitempty"` ApproverID string `json:"approverId,omitempty"` ApprovalLevel string `json:"approvalLevel"` Payload map[string]any `json:"payload,omitempty"` Guard SCUMMutationGuardBody `json:"guard,omitempty"` Confirmation SCUMOperationConfirmationBody `json:"confirmation,omitempty"` Status string `json:"status"` Reason string `json:"reason,omitempty"` RunJobID string `json:"runJobId,omitempty"` SafeSummary SCUMSafeSummaryBody `json:"safeSummary,omitempty"` AuditReferences []string `json:"auditReferences,omitempty"` CreatedAt time.Time `json:"createdAt"` ApprovedAt time.Time `json:"approvedAt,omitempty"` CompletedAt time.Time `json:"completedAt,omitempty"` UpdatedAt time.Time `json:"updatedAt"` } type SCUMOperationListResponse struct { Items []SCUMOperationResponse `json:"items"` Count int `json:"count"` } type SCUMWorkflowResponse struct { ID string `json:"id"` ServerInstanceID string `json:"serverInstanceId"` PluginID string `json:"pluginId"` TemplateKey string `json:"templateKey"` RequestedBy string `json:"requestedBy,omitempty"` IdempotencyKey string `json:"idempotencyKey,omitempty"` Status string `json:"status"` CurrentStepKey string `json:"currentStepKey,omitempty"` Input map[string]any `json:"input,omitempty"` SafeSummary SCUMSafeSummaryBody `json:"safeSummary,omitempty"` BlockerReason string `json:"blockerReason,omitempty"` AuditReferences []string `json:"auditReferences,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` CompletedAt time.Time `json:"completedAt,omitempty"` } type SCUMWorkflowListResponse struct { Items []SCUMWorkflowResponse `json:"items"` Count int `json:"count"` } type SCUMWorkflowStepResponse struct { ID string `json:"id"` WorkflowID string `json:"workflowId"` ServerInstanceID string `json:"serverInstanceId"` StepKey string `json:"stepKey"` DependsOn []string `json:"dependsOn,omitempty"` Status string `json:"status"` OperationKey string `json:"operationKey,omitempty"` QueryTemplateKey string `json:"queryTemplateKey,omitempty"` Capability string `json:"capability,omitempty"` TargetKey string `json:"targetKey,omitempty"` JobID string `json:"jobId,omitempty"` Attempt int `json:"attempt,omitempty"` MaxAttempts int `json:"maxAttempts,omitempty"` MutatesState bool `json:"mutatesState,omitempty"` Confirmation SCUMOperationConfirmationBody `json:"confirmation,omitempty"` SafeSummary SCUMSafeSummaryBody `json:"safeSummary,omitempty"` BlockerReason string `json:"blockerReason,omitempty"` AuditReferences []string `json:"auditReferences,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` CompletedAt time.Time `json:"completedAt,omitempty"` } type SCUMWorkflowStepListResponse struct { Items []SCUMWorkflowStepResponse `json:"items"` Count int `json:"count"` } func SCUMSafeSummaryFromDomain(value domain.SCUMSafeSummary) SCUMSafeSummaryBody { value = domain.CopySCUMSafeSummary(value) return SCUMSafeSummaryBody{Title: value.Title, Message: value.Message, Details: value.Details} } func scumSafeSummaryToDomain(value SCUMSafeSummaryBody) domain.SCUMSafeSummary { return domain.SCUMSafeSummary{Title: value.Title, Message: value.Message, Details: domain.CopyStringMap(value.Details)} } func SCUMDataObservationFromDomain(value domain.SCUMDataObservation) SCUMDataObservationResponse { value = domain.CopySCUMDataObservation(value) return SCUMDataObservationResponse{ID: value.ID, ServerInstanceID: value.ServerInstanceID, PluginID: value.PluginID, Source: value.Source, QueryKey: value.QueryKey, SubjectType: value.SubjectType, SubjectID: value.SubjectID, Sequence: value.Sequence, Checksum: value.Checksum, Status: string(value.Status), ErrorCode: value.ErrorCode, SafeSummary: SCUMSafeSummaryFromDomain(value.SafeSummary), ObservedAt: value.ObservedAt, ReceivedAt: value.ReceivedAt} } func SCUMProjectionFreshnessFromDomain(value domain.SCUMProjectionFreshnessState) SCUMProjectionFreshnessBody { value = domain.CopySCUMProjectionFreshnessState(value) return SCUMProjectionFreshnessBody{Status: string(value.Status), ObservationID: value.ObservationID, Source: value.Source, QueryKey: value.QueryKey, Sequence: value.Sequence, Checksum: value.Checksum, StaleReason: value.StaleReason, ObservedAt: value.ObservedAt, ReceivedAt: value.ReceivedAt} } func SCUMOperationRequestBodyToDomain(request SCUMOperationRequestBody) domain.SCUMOperationRequest { return domain.SCUMOperationRequest{TemplateKey: request.TemplateKey, PlayerID: request.PlayerID, Payload: domain.CopyGameClientBridgePayload(request.Payload), Guard: scumMutationGuardToDomain(request.Guard), Reason: request.Reason, IdempotencyKey: request.IdempotencyKey} } func SCUMWorkflowCreateRequestToDomain(request SCUMWorkflowCreateRequest) domain.SCUMWorkflowInstance { return domain.SCUMWorkflowInstance{TemplateKey: request.TemplateKey, IdempotencyKey: request.IdempotencyKey, Input: domain.CopyGameClientBridgePayload(request.Input)} } func SCUMOperationFromDomain(value domain.SCUMOperationRequest) SCUMOperationResponse { value = domain.CopySCUMOperationRequest(value) return SCUMOperationResponse{ID: value.ID, ServerInstanceID: value.ServerInstanceID, PluginID: value.PluginID, TemplateKey: value.TemplateKey, PlayerID: value.PlayerID, RequesterID: value.RequesterID, ApproverID: value.ApproverID, ApprovalLevel: string(value.ApprovalLevel), Payload: value.Payload, Guard: scumMutationGuardFromDomain(value.Guard), Confirmation: scumOperationConfirmationFromDomain(value.Confirmation), Status: string(value.Status), Reason: value.Reason, RunJobID: value.RunJobID, SafeSummary: SCUMSafeSummaryFromDomain(value.SafeSummary), AuditReferences: value.AuditReferences, CreatedAt: value.CreatedAt, ApprovedAt: value.ApprovedAt, CompletedAt: value.CompletedAt, UpdatedAt: value.UpdatedAt} } func SCUMOperationsFromDomain(values []domain.SCUMOperationRequest) SCUMOperationListResponse { items := make([]SCUMOperationResponse, len(values)) for index, value := range values { items[index] = SCUMOperationFromDomain(value) } return SCUMOperationListResponse{Items: items, Count: len(items)} } func SCUMWorkflowFromDomain(value domain.SCUMWorkflowInstance) SCUMWorkflowResponse { value = domain.CopySCUMWorkflowInstance(value) return SCUMWorkflowResponse{ID: value.ID, ServerInstanceID: value.ServerInstanceID, PluginID: value.PluginID, TemplateKey: value.TemplateKey, RequestedBy: value.RequestedBy, IdempotencyKey: value.IdempotencyKey, Status: string(value.Status), CurrentStepKey: value.CurrentStepKey, Input: value.Input, SafeSummary: SCUMSafeSummaryFromDomain(value.SafeSummary), BlockerReason: value.BlockerReason, AuditReferences: value.AuditReferences, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, CompletedAt: value.CompletedAt} } func SCUMWorkflowsFromDomain(values []domain.SCUMWorkflowInstance) SCUMWorkflowListResponse { items := make([]SCUMWorkflowResponse, len(values)) for index, value := range values { items[index] = SCUMWorkflowFromDomain(value) } return SCUMWorkflowListResponse{Items: items, Count: len(items)} } func SCUMWorkflowStepFromDomain(value domain.SCUMWorkflowStep) SCUMWorkflowStepResponse { value = domain.CopySCUMWorkflowStep(value) return SCUMWorkflowStepResponse{ID: value.ID, WorkflowID: value.WorkflowID, ServerInstanceID: value.ServerInstanceID, StepKey: value.StepKey, DependsOn: value.DependsOn, Status: string(value.Status), OperationKey: value.OperationKey, QueryTemplateKey: value.QueryTemplateKey, Capability: value.Capability, TargetKey: value.TargetKey, JobID: value.JobID, Attempt: value.Attempt, MaxAttempts: value.MaxAttempts, MutatesState: value.MutatesState, Confirmation: scumOperationConfirmationFromDomain(value.Confirmation), SafeSummary: SCUMSafeSummaryFromDomain(value.SafeSummary), BlockerReason: value.BlockerReason, AuditReferences: value.AuditReferences, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, CompletedAt: value.CompletedAt} } func SCUMWorkflowStepsFromDomain(values []domain.SCUMWorkflowStep) SCUMWorkflowStepListResponse { items := make([]SCUMWorkflowStepResponse, len(values)) for index, value := range values { items[index] = SCUMWorkflowStepFromDomain(value) } return SCUMWorkflowStepListResponse{Items: items, Count: len(items)} } func scumMutationGuardFromDomain(value domain.SCUMMutationGuard) SCUMMutationGuardBody { return SCUMMutationGuardBody{FieldKey: value.FieldKey, Before: value.Before, After: value.After, MaxRowsAffected: value.MaxRowsAffected, SafetyWindow: value.SafetyWindow, BackupRef: value.BackupRef, RequiresOfflinePlayer: value.RequiresOfflinePlayer, RequiresMaintenance: value.RequiresMaintenance, RequiresBackup: value.RequiresBackup} } func scumMutationGuardToDomain(value SCUMMutationGuardBody) domain.SCUMMutationGuard { return domain.SCUMMutationGuard{FieldKey: value.FieldKey, Before: value.Before, After: value.After, MaxRowsAffected: value.MaxRowsAffected, SafetyWindow: value.SafetyWindow, BackupRef: value.BackupRef, RequiresOfflinePlayer: value.RequiresOfflinePlayer, RequiresMaintenance: value.RequiresMaintenance, RequiresBackup: value.RequiresBackup} } func scumOperationConfirmationFromDomain(value domain.SCUMOperationConfirmation) SCUMOperationConfirmationBody { value = domain.CopySCUMOperationConfirmation(value) return SCUMOperationConfirmationBody{Status: value.Status, ObservationID: value.ObservationID, ConfirmedFields: value.ConfirmedFields, AffectedRows: value.AffectedRows, MutationChecksum: value.MutationChecksum, Checksum: value.Checksum, ObservedAt: value.ObservedAt, SafeSummary: SCUMSafeSummaryFromDomain(value.SafeSummary)} } func scumOperationConfirmationToDomain(value SCUMOperationConfirmationBody) domain.SCUMOperationConfirmation { return domain.SCUMOperationConfirmation{Status: value.Status, ObservationID: value.ObservationID, ConfirmedFields: domain.CopyGameClientBridgePayload(value.ConfirmedFields), AffectedRows: value.AffectedRows, MutationChecksum: value.MutationChecksum, Checksum: value.Checksum, ObservedAt: value.ObservedAt, SafeSummary: scumSafeSummaryToDomain(value.SafeSummary)} }