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  }