github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/invite/impl_initiateleaveworkspace.go (about)

     1  /*
     2   * Copyright (c) 2023-present unTill Pro, Ltd.
     3   */
     4  
     5  package invite
     6  
     7  import (
     8  	"net/http"
     9  
    10  	"github.com/voedger/voedger/pkg/appdef"
    11  	"github.com/voedger/voedger/pkg/istructs"
    12  	"github.com/voedger/voedger/pkg/istructsmem"
    13  	"github.com/voedger/voedger/pkg/state"
    14  	coreutils "github.com/voedger/voedger/pkg/utils"
    15  )
    16  
    17  func provideCmdInitiateLeaveWorkspace(cfg *istructsmem.AppConfigType, timeFunc coreutils.TimeFunc) {
    18  	cfg.Resources.Add(istructsmem.NewCommandFunction(
    19  		qNameCmdInitiateLeaveWorkspace,
    20  		execCmdInitiateLeaveWorkspace(timeFunc),
    21  	))
    22  }
    23  
    24  func execCmdInitiateLeaveWorkspace(timeFunc coreutils.TimeFunc) func(args istructs.ExecCommandArgs) (err error) {
    25  	return func(args istructs.ExecCommandArgs) (err error) {
    26  		skbPrincipal, err := args.State.KeyBuilder(state.RequestSubject, appdef.NullQName)
    27  		if err != nil {
    28  			return
    29  		}
    30  		svPrincipal, err := args.State.MustExist(skbPrincipal)
    31  		if err != nil {
    32  			return
    33  		}
    34  
    35  		skbViewInviteIndex, err := args.State.KeyBuilder(state.View, qNameViewInviteIndex)
    36  		if err != nil {
    37  			return
    38  		}
    39  		skbViewInviteIndex.PutInt32(field_Dummy, value_Dummy_One)
    40  		skbViewInviteIndex.PutString(Field_Login, svPrincipal.AsString(state.Field_Name))
    41  		svViewInviteIndex, err := args.State.MustExist(skbViewInviteIndex)
    42  		if err != nil {
    43  			return
    44  		}
    45  
    46  		skbCDocInvite, err := args.State.KeyBuilder(state.Record, qNameCDocInvite)
    47  		if err != nil {
    48  			return err
    49  		}
    50  		skbCDocInvite.PutRecordID(state.Field_ID, svViewInviteIndex.AsRecordID(field_InviteID))
    51  		svCDocInvite, err := args.State.MustExist(skbCDocInvite)
    52  		if err != nil {
    53  			return err
    54  		}
    55  
    56  		if !isValidInviteState(svCDocInvite.AsInt32(field_State), qNameCmdInitiateLeaveWorkspace) {
    57  			return coreutils.NewHTTPError(http.StatusBadRequest, ErrInviteStateInvalid)
    58  		}
    59  
    60  		svbCDocInvite, err := args.Intents.UpdateValue(skbCDocInvite, svCDocInvite)
    61  		if err != nil {
    62  			return err
    63  		}
    64  		svbCDocInvite.PutInt32(field_State, State_ToBeLeft)
    65  		svbCDocInvite.PutInt64(field_Updated, timeFunc().UnixMilli())
    66  		svbCDocInvite.PutBool(appdef.SystemField_IsActive, false)
    67  
    68  		return
    69  	}
    70  }