github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/workspace/provide.go (about) 1 /* 2 * Copyright (c) 2022-present unTill Pro, Ltd. 3 */ 4 5 package workspace 6 7 import ( 8 "github.com/voedger/voedger/pkg/appdef" 9 "github.com/voedger/voedger/pkg/extensionpoints" 10 "github.com/voedger/voedger/pkg/istructs" 11 "github.com/voedger/voedger/pkg/istructsmem" 12 "github.com/voedger/voedger/pkg/itokens" 13 "github.com/voedger/voedger/pkg/sys/authnz" 14 coreutils "github.com/voedger/voedger/pkg/utils" 15 "github.com/voedger/voedger/pkg/utils/federation" 16 ) 17 18 func Provide(cfg *istructsmem.AppConfigType, appDefBuilder appdef.IAppDefBuilder, asp istructs.IAppStructsProvider, timeFunc coreutils.TimeFunc, tokensAPI itokens.ITokens, 19 federation federation.IFederation, itokens itokens.ITokens, ep extensionpoints.IExtensionPoint, wsPostInitFunc WSPostInitFunc) { 20 // c.sys.InitChildWorkspace 21 cfg.Resources.Add(istructsmem.NewCommandFunction( 22 authnz.QNameCommandInitChildWorkspace, 23 provideExecCmdInitChildWorkspace(cfg.AppDef), 24 )) 25 26 // c.sys.CreateWorkspaceID 27 // target app, (target cluster, base profile WSID) 28 cfg.Resources.Add(istructsmem.NewCommandFunction( 29 QNameCommandCreateWorkspaceID, 30 execCmdCreateWorkspaceID(asp, cfg.Name), 31 )) 32 33 // c.sys.CreateWorkspace 34 cfg.Resources.Add(istructsmem.NewCommandFunction( 35 QNameCommandCreateWorkspace, 36 execCmdCreateWorkspace(timeFunc, asp, cfg.Name), 37 )) 38 39 // q.sys.QueryChildWorkspaceByName 40 cfg.Resources.Add(istructsmem.NewQueryFunction( 41 QNameQueryChildWorkspaceByName, 42 qcwbnQryExec, 43 )) 44 45 provideViewNextWSID(appDefBuilder) 46 47 // deactivate workspace 48 provideDeactivateWorkspace(cfg, tokensAPI, federation) 49 50 // projectors 51 cfg.AddAsyncProjectors( 52 asyncProjectorInvokeCreateWorkspace(federation, itokens), 53 asyncProjectorInvokeCreateWorkspaceID(federation, itokens), 54 asyncProjectorInitializeWorkspace(federation, timeFunc, ep, itokens, wsPostInitFunc), 55 ) 56 cfg.AddSyncProjectors( 57 syncProjectorChildWorkspaceIdx(), 58 syncProjectorWorkspaceIDIdx(), 59 ) 60 } 61 62 // proj.sys.ChildWorkspaceIdx 63 func syncProjectorChildWorkspaceIdx() istructs.Projector { 64 return istructs.Projector{ 65 Name: QNameProjectorChildWorkspaceIdx, 66 Func: childWorkspaceIdxProjector, 67 } 68 } 69 70 // Projector<A, InitializeWorkspace> 71 func asyncProjectorInitializeWorkspace(federation federation.IFederation, nowFunc coreutils.TimeFunc, ep extensionpoints.IExtensionPoint, 72 tokensAPI itokens.ITokens, wsPostInitFunc WSPostInitFunc) istructs.Projector { 73 return istructs.Projector{ 74 Name: qNameAPInitializeWorkspace, 75 Func: initializeWorkspaceProjector(nowFunc, federation, ep, tokensAPI, wsPostInitFunc), 76 } 77 } 78 79 // Projector<A, InvokeCreateWorkspaceID> 80 func asyncProjectorInvokeCreateWorkspaceID(federation federation.IFederation, tokensAPI itokens.ITokens) istructs.Projector { 81 return istructs.Projector{ 82 Name: qNameAPInvokeCreateWorkspaceID, 83 Func: invokeCreateWorkspaceIDProjector(federation, tokensAPI), 84 } 85 } 86 87 // Projector<A, InvokeCreateWorkspace> 88 func asyncProjectorInvokeCreateWorkspace(federation federation.IFederation, tokensAPI itokens.ITokens) istructs.Projector { 89 return istructs.Projector{ 90 Name: qNameAPInvokeCreateWorkspace, 91 Func: invokeCreateWorkspaceProjector(federation, tokensAPI), 92 } 93 } 94 95 // sp.sys.WorkspaceIDIdx 96 func syncProjectorWorkspaceIDIdx() istructs.Projector { 97 return istructs.Projector{ 98 Name: QNameProjectorViewWorkspaceIDIdx, 99 Func: workspaceIDIdxProjector, 100 } 101 }