public async Task <PersonDetails> GetDetails(Roles roles, int id) { var personDb = await _personRepository.FindPerson(id); var family = await PersonUtils.FindSiblings(personDb, _personRepository); family.AddRange(personDb.Relationships); var familyDetails = new List <Family>(); foreach (var familyMember in family.OrderBy(f => f.Relationship)) { var familyMemberDetails = await _personRepository.FindPerson(familyMember.PersonId); if (roles != Roles.General || familyMemberDetails.Dead) { familyDetails.Add(new Family { Id = familyMember.PersonId, Name = familyMemberDetails.PreferredName, Relationship = familyMember.Relationship.ToString() }); } } var personDetails = _mapper.Map <PersonDetails>(personDb); if (string.IsNullOrEmpty(personDetails.Portrait)) { var gender = (Gender)Enum.Parse(typeof(Gender), personDb.Gender); personDetails.Portrait = gender == Gender.Male ? "Male.png" : "Female.png"; } personDetails.Family = familyDetails; var images = await _imagesRepository.GetImagesForPerson(id); personDetails.Images = new List <ImageDetails>(); foreach (var image in images) { var peopleInImage = await _imagesRepository.GetPeopleInImage(image.Id); string caption = peopleInImage.Count > 0 ? "People: \n" : ""; foreach (var personInImage in peopleInImage) { var personDbImage = await _personRepository.FindPerson(personInImage); caption += $"\t{personDbImage.PreferredName}\n"; } if (!string.IsNullOrEmpty(image.Description)) { caption += $"Description: {image.Description}\n"; } if (!string.IsNullOrEmpty(image.Location)) { caption += $"Location: {image.Location}\n"; } personDetails.Images.Add(new ImageDetails { Id = image.Id, FileName = image.FileName, Orientation = image.Orientation, Caption = caption }); } return(personDetails); }