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 }