github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/invite/impl_applyviewsubjectsidx.go (about) 1 /* 2 * Copyright (c) 2023-present unTill Pro, Ltd. 3 */ 4 5 package invite 6 7 import ( 8 "github.com/voedger/voedger/pkg/goutils/iterate" 9 "github.com/voedger/voedger/pkg/istructs" 10 ) 11 12 func applyViewSubjectsIdx() istructs.Projector { 13 return istructs.Projector{ 14 Name: QNameApplyViewSubjectsIdx, 15 Func: applyViewSubjectsIdxProjector, 16 } 17 } 18 19 func applyViewSubjectsIdxProjector(event istructs.IPLogEvent, st istructs.IState, intents istructs.IIntents) (err error) { 20 return iterate.ForEachError(event.CUDs, func(cdocSubject istructs.ICUDRow) error { 21 if cdocSubject.QName() != QNameCDocSubject || !cdocSubject.IsNew() { 22 return nil 23 } 24 25 actualLogin := cdocSubject.AsString(Field_Login) // cdoc.sys.Subject.Login <- cdoc.sys.Invite.ActualLogin by ap.sys.ApplyJoinWorkspace 26 skbViewSubjectsIdx, err := GetSubjectIdxViewKeyBuilder(actualLogin, st) 27 if err != nil { 28 // notest 29 return err 30 } 31 32 // ap.sys.ApplyJoinWorkspace will not insert cdoc.sys.Subject if view.sys.SubjectsIdx record exists already by the login 33 // according to https://github.com/voedger/voedger/issues/1107 34 // so no overwrite here 35 subjectsIdxBuilder, err := intents.NewValue(skbViewSubjectsIdx) 36 if err != nil { 37 // notest 38 return err 39 } 40 subjectsIdxBuilder.PutRecordID(Field_SubjectID, cdocSubject.ID()) 41 return nil 42 }) 43 }