Example #1
0
        public async Task <IEnumerable <ColidEntryContactInvalidUsersDto> > CollectAndPrepareContactMessagesForEntries()
        {
            var contactAndEntryList = new List <ColidEntryContactInvalidUsersDto>();
            var adUserEmailSet      = await _reportingService.GetContactsFromAllColidEntries();

            var adUserValidEmailSet = RemoveInvalidEmailsByPattern(adUserEmailSet);
            var contactValidityList = await _appDataService.CheckUsersValidityAsync(adUserValidEmailSet);

            // ad invalid emails by pattern to invalid contacts -> allow any string in reporting service
            var invalidContacts      = contactValidityList.Where(x => !x.AccountEnabled);
            var invalidContactsMails = invalidContacts.Select(c => c.Mail).ToHashSet();

            foreach (var adUserDto in invalidContacts)
            {
                var entityList = await _reportingService.GetContactReferencedEntries(adUserDto.Mail);

                foreach (var colidEntryContactsDto in entityList)
                {
                    if (IsTechnicalUserInEntry(colidEntryContactsDto, adUserDto.Mail))
                    {
                        continue; // then skip message creation
                    }

                    var contactPerson     = DetermineContactPerson(adUserDto.Mail, colidEntryContactsDto, invalidContactsMails);
                    var contactAndEntries = contactAndEntryList.FirstOrDefault(c => c.ContactMail == contactPerson);

                    if (contactAndEntries != null)
                    {
                        if (contactAndEntries.TryGetColidEntry(colidEntryContactsDto.PidUri, out ColidEntryInvalidUsersDto colidEntry))
                        {
                            // append invalid user to existing users' colid entry
                            colidEntry.InvalidUsers.Add(adUserDto.Mail);
                        }
                        else
                        {
                            // create new colid entry for user
                            var ce = new ColidEntryInvalidUsersDto(colidEntryContactsDto.PidUri,
                                                                   colidEntryContactsDto.Label, new HashSet <string> {
                                adUserDto.Mail
                            });
                            contactAndEntries.ColidEntries.Add(ce);
                        }
                    }
                    else
                    {
                        // create new contact message
                        var invalidUserDto = new ColidEntryInvalidUsersDto(colidEntryContactsDto.PidUri,
                                                                           colidEntryContactsDto.Label, new HashSet <string> {
                            adUserDto.Mail
                        });
                        var contactDto = new ColidEntryContactInvalidUsersDto();
                        contactDto.ContactMail = contactPerson;
                        contactDto.ColidEntries.Add(invalidUserDto);
                        contactAndEntryList.Add(contactDto);
                    }
                }
            }

            return(contactAndEntryList);
        }