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  }