github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/invite/impl_applycancelacceptedinvite.go (about) 1 /* 2 * Copyright (c) 2023-present unTill Pro, Ltd. 3 */ 4 5 package invite 6 7 import ( 8 "fmt" 9 10 "github.com/voedger/voedger/pkg/appdef" 11 "github.com/voedger/voedger/pkg/istructs" 12 "github.com/voedger/voedger/pkg/itokens" 13 payloads "github.com/voedger/voedger/pkg/itokens-payloads" 14 "github.com/voedger/voedger/pkg/state" 15 coreutils "github.com/voedger/voedger/pkg/utils" 16 "github.com/voedger/voedger/pkg/utils/federation" 17 ) 18 19 func asyncProjectorApplyCancelAcceptedInvite(timeFunc coreutils.TimeFunc, federation federation.IFederation, tokens itokens.ITokens) istructs.Projector { 20 return istructs.Projector{ 21 Name: qNameAPApplyCancelAcceptedInvite, 22 Func: applyCancelAcceptedInvite(timeFunc, federation, tokens), 23 } 24 } 25 26 // AFTER EXEC c.sys.InitiateCancelAcceptedInvite 27 func applyCancelAcceptedInvite(timeFunc coreutils.TimeFunc, federation federation.IFederation, tokens itokens.ITokens) func(event istructs.IPLogEvent, state istructs.IState, intents istructs.IIntents) (err error) { 28 return func(event istructs.IPLogEvent, s istructs.IState, intents istructs.IIntents) (err error) { 29 skbCDocInvite, err := s.KeyBuilder(state.Record, qNameCDocInvite) 30 if err != nil { 31 return 32 } 33 skbCDocInvite.PutRecordID(state.Field_ID, event.ArgumentObject().AsRecordID(field_InviteID)) 34 svCDocInvite, err := s.MustExist(skbCDocInvite) 35 if err != nil { 36 return 37 } 38 39 skbCDocSubject, err := s.KeyBuilder(state.Record, QNameCDocSubject) 40 if err != nil { 41 return 42 } 43 skbCDocSubject.PutRecordID(state.Field_ID, svCDocInvite.AsRecordID(field_SubjectID)) 44 svCDocSubject, err := s.MustExist(skbCDocSubject) 45 if err != nil { 46 return 47 } 48 49 appQName := s.App() 50 51 token, err := payloads.GetSystemPrincipalToken(tokens, appQName) 52 if err != nil { 53 return 54 } 55 56 // Update subject 57 _, err = federation.Func( 58 fmt.Sprintf("api/%s/%d/c.sys.CUD", appQName, event.Workspace()), 59 fmt.Sprintf(`{"cuds":[{"sys.ID":%d,"fields":{"sys.IsActive":false}}]}`, svCDocSubject.AsRecordID(appdef.SystemField_ID)), 60 coreutils.WithAuthorizeBy(token), 61 coreutils.WithDiscardResponse()) 62 if err != nil { 63 return 64 } 65 66 // Deactivate joined workspace 67 _, err = federation.Func( 68 fmt.Sprintf("api/%s/%d/c.sys.DeactivateJoinedWorkspace", appQName, svCDocInvite.AsInt64(field_InviteeProfileWSID)), 69 fmt.Sprintf(`{"args":{"InvitingWorkspaceWSID":%d}}`, event.Workspace()), 70 coreutils.WithAuthorizeBy(token), 71 coreutils.WithDiscardResponse()) 72 if err != nil { 73 return 74 } 75 76 // Update invite 77 _, err = federation.Func( 78 fmt.Sprintf("api/%s/%d/c.sys.CUD", appQName, event.Workspace()), 79 fmt.Sprintf(`{"cuds":[{"sys.ID":%d,"fields":{"State":%d,"Updated":%d}}]}`, event.ArgumentObject().AsRecordID(field_InviteID), State_Cancelled, timeFunc().UnixMilli()), 80 coreutils.WithAuthorizeBy(token), 81 coreutils.WithDiscardResponse()) 82 83 return err 84 } 85 }