public ActionResult Save(CreateContactViewModel model)
        {
            Contact newContact = new Contact()
            {
                Address  = model.Address,
                Name     = model.Name,
                Lastname = model.Lastname,
                Avatar   = "",
                BirthDay = DateTime.Now.AddDays(-5045),
                WebSite  = model.WebSite,


                Numbers = new List <TelephoneNumber>()
                {
                    new TelephoneNumber("Home", "+39 051 552 888"),
                    new TelephoneNumber("Work", "+39 051 888 225")
                },
                Emails = new List <EmailAddress>()
                {
                    new EmailAddress("Home", "*****@*****.**"),
                    new EmailAddress("Work", "*****@*****.**")
                }
            };

            StoreDB.AddContact(newContact);

            ViewBag.Contact  = newContact;
            ViewBag.Contacts = StoreDB.GetContactsShort();

            return(Redirect("index"));
        }
Exemplo n.º 2
0
 public JsonResult CreateContacts(CreateContactViewModel contactVM)
 {
     // TriggerProfileKey("ProfileNAME", "ProfileKEY", 10);
     contactVM = RegisterContact(contactVM);
     // return View("~/Views/Page/Contacts/CreateContact.cshtml",contactVM);
     return(Json(new { Message = contactVM.OperationStatus }, JsonRequestBehavior.AllowGet));
 }
        public async Task <ActionResult <ContactViewModel> > CreateContact([FromBody] CreateContactViewModel model)
        {
            if (!ModelState.IsValid)
            {
                NotifyModelStateErrors();
                return(ModelStateErrorResponseError());
            }

            var createContactCommand = _mapper.Map <CreateContactCommand>(model);

            var result = await Mediator.SendCommandAsync(createContactCommand);

            if (result.Success)
            {
                await Mediator.NotifyDomainNotification(
                    DomainNotification.Success($" The contact to {model.ContactName} was add with success !"));
            }

            var contactId = result.Id;

            var contact = await _contactRepository.GetContactById(contactId);

            if (contact == null)
            {
                NotifyError("Fail to create the contact");
                return(ModelStateErrorResponseError());
            }

            var returnModel = _mapper.Map <ContactViewModel>(contact);


            return(ResponsePost(
                       nameof(CreateContact),
                       returnModel));
        }
Exemplo n.º 4
0
        public async Task <ActionResult> AddContact([FromBody] CreateContactViewModel model)
        {
            try
            {
                await _contactService.CreateNewContact(
                    model.FirstName,
                    model.LastName,
                    model.Email,
                    model.Birthday,
                    model.Gender,
                    model.IsFavorite,
                    model.Company,
                    model.Avatar,
                    model.Address,
                    model.Phone,
                    model.Comments
                    );

                return(StatusCode(201));
            }
            catch (BadRequestException e)
            {
                return(BadRequest(e.Message));
            }
        }
        public async Task <IActionResult> CreateContactAsync(CreateContactViewModel model)
        {
            try
            {
                ContactDto contact = new ContactDto
                {
                    Name                 = model.Name,
                    TelephoneNumber1     = model.TelephoneNumber1,
                    TelephoneNumber2     = model.TelephoneNumber2,
                    Address              = model.Address,
                    Email                = model.Email,
                    LegalOrNaturalPerson = model.LegalOrNaturalPerson,
                    Profession           = model.Profession,
                    CompanyId            = model.CompanyId
                };

                await contactService.CreateAsync(contact);

                return(RedirectToAction("ContactsList", "Contact"));
            }
            catch (Exception ex)
            {
                ErrorViewModel errorModel = new ErrorViewModel();
                errorModel.ErrorMessage = ex.Message.ToString();

                return(View("Views/Shared/Error.cshtml", errorModel));
            }
        }
Exemplo n.º 6
0
        public async Task CreateValidContact()
        {
            var faker     = new Faker();
            var viewModel = new CreateContactViewModel
            {
                FirstName  = faker.Name.FirstName(),
                LastName   = faker.Name.LastName(),
                Email      = faker.Internet.Email(),
                Birthday   = faker.Date.Past(18),
                IsFavorite = false,
                Gender     = "m",
                Address    = faker.Address.FullAddress(),
                Avatar     = faker.Internet.Avatar(),
                Company    = faker.Company.CompanyName(),
                Phone      = faker.Phone.PhoneNumber("(##) #####-####"),
                Comments   = faker.Random.Words(faker.Random.Int(0, 100))
            };

            var client = _factory.CreateClient();
            var result = await client.PostAsJsonAsync("/api/contacts", viewModel);

            result.EnsureSuccessStatusCode();

            var contact = await _factory.DbContext.Contacts.SingleOrDefaultAsync();

            Assert.Equal(viewModel.FirstName, contact.FirstName);
            Assert.Equal(viewModel.LastName, contact.LastName);
            Assert.Equal(viewModel.Email, contact.Email);
        }
        public async Task OnGetAsync()
        {
            Contact = new CreateContactViewModel();

            var groupLookup = await _contactAppService.GetGroupLookupAsync();

            Groups = groupLookup.Items.Select(x => new SelectListItem(x.Name, x.Id.ToString())).ToList();
        }
Exemplo n.º 8
0
        public IActionResult Delete(CreateContactViewModel vm)
        {
            Contact contact = _context.Contacts.Single(m => m.Id == vm.Id);

            _context.Contacts.Remove(contact);
            _context.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public ActionResult Contact(CreateContactViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                return(RedirectToAction("Index"));
            }

            return(View("Contact", viewModel));
        }
Exemplo n.º 10
0
 public IHttpActionResult Post(CreateContactViewModel newModel)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     _service.Create(_mapper.Map <Contact>(newModel));
     return(Ok());
 }
Exemplo n.º 11
0
        public async Task <IActionResult> CreateContactAsync(CreateContactViewModel createContactViewModel)
        {
            var createCommentDTO = _mapper.Map <CreateContactDTO>(createContactViewModel);
            var resultDTO        = await _contactService.CreateContactAsync(createCommentDTO);

            var resultVM = _mapper.Map <ContactViewModel>(resultDTO);

            return(Ok(resultVM));
        }
Exemplo n.º 12
0
        public ActionResult CreateContacts()
        {
            CreateContactViewModel contactVM = new CreateContactViewModel
            {
                PageTitle = "Contacts Creation",
                PageIntro = "Use this page to create contacts in Experience Profile"
            };

            return(View("~/Views/Page/Contacts/CreateContact.cshtml", contactVM));
        }
Exemplo n.º 13
0
        public ActionResult Create([Bind(Include = "Name,LastName,IsActive")] CreateContactViewModel contact)
        {
            if (ModelState.IsValid)
            {
                var domainObject = AutoMapper.Mapper.Map <Contact>(contact);
                contactService.CreateContact(domainObject);
                return(RedirectToAction("Index"));
            }

            return(View(contact));
        }
Exemplo n.º 14
0
        public async Task <IActionResult> Contact()
        {
            var user = await _userManager.GetUserAsync(User);

            var model = new CreateContactViewModel
            {
                Email = user.Email
            };

            return(View(model));
        }
Exemplo n.º 15
0
        public ActionResult Index(CreateContactViewModel model)
        {
            this.contacts.Add(new Contact()
            {
                Subject = model.Subject,
                Email = model.Email,
                Message = model.Message
            });

            this.TempData["Notification"] = "Message succesfuly sent";
            return this.RedirectToAction(x => x.Index());
        }
Exemplo n.º 16
0
        public async Task <ActionResult <Contact> > PostContact(CreateContactViewModel contact)
        {
            Contact c = new Contact
            {
                PersonId = contact.PersonId,
                Type     = contact.Type,
                Value    = contact.Value
            };
            await _contactsRepository.CreateContactAsync(c);

            return(StatusCode(201));
        }
Exemplo n.º 17
0
        public async Task <IViewComponentResult> InvokeAsync(
            string actionUrl        = "",
            string formTitle        = "",
            string formDescription  = "",
            string coverImageUrl    = "",
            bool withContactInfo    = false,
            bool withSocialNetworks = false,
            string viewName         = null)
        {
            var model = new CreateContactViewModel {
                WidgetTitle         = formTitle,
                WidgetDescription   = formDescription,
                WidgetCoverImageUrl = coverImageUrl,
                WidgetActionUrl     = actionUrl
            };

            if (withContactInfo)
            {
                var contactInfo = await _websiteOptionService.GetContactInfoAsync();

                if (contactInfo != null)
                {
                    model.ContactInfo = contactInfo.Adapt <WebsiteContactInfoViewModel>();
                }
            }

            if (withSocialNetworks)
            {
                var socialNetworks = await _websiteOptionService.GetSocialNetworksAsync();

                if (socialNetworks != null)
                {
                    model.SocialNetworks = socialNetworks.Adapt <WebsiteSocialNetworksViewModel>();
                }
            }

            if (viewName.IsNotNullOrEmpty())
            {
                return(await Task.FromResult(
                           View(viewName, model)
                           ));
            }

            return(await Task.FromResult(
                       View(model)
                       ));
        }
Exemplo n.º 18
0
        public async Task <IActionResult> Create([Bind("Type,Value,PersonId")] CreateContactViewModel contact)
        {
            if (ModelState.IsValid)
            {
                Contact c = new Contact
                {
                    PersonId = contact.PersonId,
                    Type     = contact.Type,
                    Value    = contact.Value
                };
                await _contactsRepository.CreateContactAsync(c);

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["PersonId"] = new SelectList(await _peopleRepository.GetPeopleAsync(), "Id", "Nome", contact.PersonId);
            return(View(contact));
        }
Exemplo n.º 19
0
        public void Contact_OnPostWithValidViewModel_ReturnsCorrectView()
        {
            var controller = new HomeController();

            var viewModel = new CreateContactViewModel
            {
                Name    = "mike",
                Email   = "*****@*****.**",
                Message = "okish",
                Phone   = 1234569871
            };

            var result = controller.Contact(viewModel) as RedirectToRouteResult;

            Assert.IsNotNull(result);
            Assert.AreEqual("Index", result.RouteValues["Action"]);
        }
Exemplo n.º 20
0
        // GET: Contact/Edit/5
        public IActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(HttpNotFound());
            }

            Contact contact = _context.Contacts.Single(m => m.Id == id);

            if (contact == null)
            {
                return(HttpNotFound());
            }

            List <string> list = new List <string>();

            if (contact.isAssociate)
            {
                list.Add("Associate");
            }
            if (contact.isColleague)
            {
                list.Add("Colleague");
            }
            if (contact.isFamily)
            {
                list.Add("Family");
            }
            if (contact.isFriend)
            {
                list.Add("Friend");
            }

            CreateContactViewModel vm = new CreateContactViewModel()
            {
                FirstName      = contact.FirstName,
                LastName       = contact.LastName,
                BirthDate      = contact.BirthDate,
                EmailAddress   = contact.EmailAddress,
                PhoneNumber    = contact.PhoneNumber,
                SelectedGroups = list
            };

            return(View(vm));
        }
Exemplo n.º 21
0
        public IActionResult CreateContact(CreateContactViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var contact = _contactService.Create(model);

            if (!contact.Valid)
            {
                return(ValidationProblem(contact.GetAllNotifications()));
            }

            return(Created(
                       $@"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}/{contact.Id}",
                       contact));
        }
Exemplo n.º 22
0
        public async Task <ActionResult> Create([Bind(Include = "FirstName, LastName, EMail, TelephoneNumber_Entry")] CreateContactViewModel createContactVModel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var req = new ContactCreateRequest
                    {
                        LastName              = createContactVModel.LastName,
                        FirstName             = createContactVModel.FirstName,
                        EMail                 = createContactVModel.EMail,
                        TelephoneNumber_Entry = createContactVModel.TelephoneNumber_Entry,
                        Creator               = LoggedInUserFacade.UserName
                    };

                    var result = await _contactRepository.ContactCreateAsync(req);

                    this.AddToastMessage(@Resource.Resource.Toast_Success, @Resource.Resource.CreateContact_Toast_Success, ToastType.Success);

                    return(RedirectToAction("Edit", new { id = result.Contact.Id }));
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", @Resource.Resource.Model_Error_Unable_To_Perform_Action);

                this.AddToastMessage(@Resource.Resource.CreateContact_Toast_Failure, ex.Message, ToastType.Error);

                var em = new ContactCreateExceptionMessage {
                    Message = ex.Message
                };

                Log.Error(ex, ex.Message);

                return(View("ContactCreationFailed", em));
            }

            return(View(createContactVModel));
        }
Exemplo n.º 23
0
        public async Task CreateInvalidEmailContact()
        {
            var faker     = new Faker();
            var viewModel = new CreateContactViewModel
            {
                FirstName  = faker.Name.FirstName(),
                LastName   = faker.Name.LastName(),
                Email      = "INVALID_EMAIL",
                Birthday   = faker.Date.Past(18),
                IsFavorite = false,
                Gender     = "m",
                Address    = faker.Address.FullAddress(),
                Avatar     = faker.Internet.Avatar(),
                Company    = faker.Company.CompanyName(),
                Phone      = faker.Phone.PhoneNumber("(##) #####-####"),
                Comments   = faker.Random.Words(faker.Random.Int(0, 100))
            };

            var client = _factory.CreateClient();
            var result = await client.PostAsJsonAsync("/api/contacts", viewModel);

            Assert.Equal(HttpStatusCode.BadRequest, result.StatusCode);
        }
Exemplo n.º 24
0
        public IActionResult Contact([Bind("Email, FullName, Message")] CreateContactViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new CreateContactViewModel
                {
                    Email    = model.Email,
                    FullName = model.FullName,
                    Message  = model.Message
                };
                var adminUsers = (from p in _context.Users
                                  join e in _context.UserRoles on p.Id equals e.UserId
                                  where e.RoleId == "b51d6fb0-1d08-4e6a-854c-10d1f1d84a71"
                                  select new
                {
                    email = p.Email
                }).ToList();

                for (int i = 0; i < adminUsers.Count; i++)
                {
                    var email = new EmailComposer
                    {
                        emailAddressSender    = "*****@*****.**",
                        emailAddressRecipient = adminUsers[i].email,
                        smtpServiceAddress    = "smtp.sapo.pt",
                        port     = 25,
                        password = "******",
                        subject  = user.FullName + " is contacting the administration",
                        body     = user.Message + "\nUser Email: " + user.Email,
                    };

                    email.SendEmail();
                }
            }

            return(RedirectToAction("Contact"));
        }
Exemplo n.º 25
0
        public async Task <IActionResult> Create(CreateContactViewModel vm, IFormFile file)
        {
            if (ModelState.IsValid)
            {
                Contact contact = new Contact();
                contact.BirthDate    = vm.BirthDate;
                contact.Comments     = vm.Comments;
                contact.EmailAddress = vm.EmailAddress;
                contact.FirstName    = vm.FirstName;
                contact.LastName     = vm.LastName;
                contact.PhoneNumber  = vm.PhoneNumber;

                // File upload logic
                var uploads = Path.Combine(_environment.WebRootPath, "images/UploadedProfileImages");
                if (file != null && file.Length > 0)
                {
                    contact.ProfileImagePath = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                    await file.SaveAsAsync(Path.Combine(uploads, contact.ProfileImagePath));
                }
                //

                if (vm.SelectedGroups != null)
                {
                    foreach (string group in vm.SelectedGroups)
                    {
                        switch (group)
                        {
                        case "Associate":
                            contact.isAssociate = true;
                            break;

                        case "Colleague":
                            contact.isColleague = true;
                            break;

                        case "Family":
                            contact.isFamily = true;
                            break;

                        case "Friend":
                            contact.isFriend = true;
                            break;

                        default:
                            contact.isAssociate = false;
                            contact.isColleague = false;
                            contact.isFamily    = false;
                            contact.isFriend    = false;
                            break;
                        }
                    }
                }
                else
                {
                    contact.isAssociate = false;
                    contact.isColleague = false;
                    contact.isFamily    = false;
                    contact.isFriend    = false;
                }

                _context.Contacts.Add(contact);
                _context.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(vm));
        }
Exemplo n.º 26
0
 public CreateContactViewModelTest()
 {
     mockRepository = new ContactRepositoryMock();
     subject        = new CreateContactViewModel(mockRepository);
 }
Exemplo n.º 27
0
        public static CreateContactViewModel RegisterContact(CreateContactViewModel contactVM)
        {
            CreateContactViewModel conctVMLocal = contactVM;
            // var offlineGoal = Guid.Parse("A9948719-E6E4-46D2-909B-3680E724ECE9");//offline goal - KioskSubmission goal
            // var channelId = Guid.Parse("3FC61BB8-0D9F-48C7-9BBD-D739DCBBE032"); // /sitecore/system/Marketing Control Panel/Taxonomies/Channel/Offline/Store/Enter store - offline enter storl channel
            var goal      = Guid.Parse("D59F316C-8C87-44A9-8347-E66C5A996CF5"); //online goal- directsitesubmission goal
            var channelId = Guid.Parse("B418E4F2-1013-4B42-A053-B6D4DCA988BF"); // /sitecore/system/Marketing Control Panel/Taxonomies/Channel/Online/Direct/Direct - online direct channel
            CertificateWebRequestHandlerModifierOptions options =
                CertificateWebRequestHandlerModifierOptions.Parse("StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=587d948806e57cf511b37a447a2453a02dfd3686");

            // Optional timeout modifier
            var certificateModifier = new CertificateWebRequestHandlerModifier(options);

            List <IHttpClientModifier> clientModifiers = new List <IHttpClientModifier>();
            var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20));

            clientModifiers.Add(timeoutClientModifier);

            // This overload takes three client end points - collection, search, and configuration
            var collectionClient    = new CollectionWebApiClient(new Uri("https://sc9.xconnect/odata"), clientModifiers, new[] { certificateModifier });
            var searchClient        = new SearchWebApiClient(new Uri("https://sc9.xconnect/odata"), clientModifiers, new[] { certificateModifier });
            var configurationClient = new ConfigurationWebApiClient(new Uri("https://sc9.xconnect/configuration"), clientModifiers, new[] { certificateModifier });



            var config = new XConnectClientConfiguration(
                new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient);

            config.Initialize();


            using (Sitecore.XConnect.Client.XConnectClient client = new XConnectClient(config))
            {
                bool    isExist    = false;
                Contact extContact = client.Get <Contact>(new IdentifiedContactReference("HIxConnect", contactIdentifierPrefix + contactVM.FormEmailAddress), new ContactExpandOptions(new string[] { PersonalInformation.DefaultFacetKey, EmailAddressList.DefaultFacetKey }));
                if (extContact != null)
                {
                    isExist = true;
                }

                try
                {
                    // Identifier for a 'known' contact
                    var identifier = new ContactIdentifier[]
                    {
                        new ContactIdentifier("HIxConnect", contactIdentifierPrefix + contactVM.FormEmailAddress, ContactIdentifierType.Known)
                    };
                    Contact knownContact = null;
                    if (isExist)
                    {
                        knownContact = extContact;
                    }
                    else
                    {
                        // Create a new contact with the identifier
                        knownContact = new Contact(identifier);
                        client.AddContact(knownContact);
                    }
                    //Persona information facet
                    PersonalInformation personalInfoFacet = new PersonalInformation();

                    personalInfoFacet.FirstName = contactVM.FormFirstName;
                    personalInfoFacet.LastName  = contactVM.FormLastName;
                    personalInfoFacet.JobTitle  = contactVM.FormJobTitle;

                    client.SetFacet <PersonalInformation>(knownContact, PersonalInformation.DefaultFacetKey, personalInfoFacet);

                    Interaction interaction = null;
                    if (!isExist)
                    {
                        // Create a new interaction for that contact
                        interaction = new Interaction(knownContact, InteractionInitiator.Contact, channelId, "");

                        // Add events - all interactions must have at least one event
                        var xConnectEvent = new Goal(goal, DateTime.UtcNow);
                        interaction.Events.Add(xConnectEvent);
                    }
                    #region EmailAddress Facet
                    EmailAddressList emails = new EmailAddressList(new EmailAddress(contactVM.FormEmailAddress, true), EmailAddressList.DefaultFacetKey);
                    //OR the following code
                    //var emails = existingContact.GetFacet<EmailAddressList>(EmailAddressList.DefaultFacetKey);
                    //emails.PreferredEmail = new EmailAddress("*****@*****.**", true);
                    client.SetFacet <EmailAddressList>(knownContact, EmailAddressList.DefaultFacetKey, emails);
                    #endregion

                    IpInfo ipInfo = new IpInfo("127.0.0.1");

                    ipInfo.BusinessName = "WebSiteSitecore";

                    client.SetFacet <IpInfo>(interaction, IpInfo.DefaultFacetKey, ipInfo);

                    // Submit contact and interaction - a total of two operations
                    if (!isExist)
                    {
                        // Add the contact and interaction
                        client.AddInteraction(interaction);
                    }
                    client.Submit();

                    var operations = client.LastBatch;
                    contactVM.OperationStatus = "created";
                }
                catch (XdbExecutionException ex)
                {
                    // Manage exception
                    conctVMLocal.OperationStatus = "false";
                }
                catch (Exception ex)
                {
                    conctVMLocal.OperationStatus = "false";
                }
                return(conctVMLocal);
            }
        }
Exemplo n.º 28
0
        public async Task <IActionResult> CreateAsync(
            [FromBody] CreateContactViewModel createContactViewModel
            )
        {
            try
            {
                if (createContactViewModel.IdLibraryBook <= 0)
                {
                    return(BadRequest(new ResponseErrorViewModel
                    {
                        Status = Constants.Error,
                        Errors = new List <object>
                        {
                            new { Message = Constants.LibraryNotFound }
                        }
                    }));
                }

                // buscar do usuario autenticado
                var login = Util.GetClaim(_httpContext,
                                          Constants.UserClaimIdentifier);

                var userDbRequest = await _userMananger
                                    .GetByLogin(login);

                if (userDbRequest == null)
                {
                    return(BadRequest(new ResponseErrorViewModel
                    {
                        Status = Constants.Error,
                        Errors = new List <object>
                        {
                            new { Message = Constants.UserNotFound }
                        }
                    }));
                }

                // verificar se existe contado de usuario logado
                var contactDbRequest = await _contactMananger
                                       .GetByEmail(userDbRequest.Login);

                // criar contato caso não exista
                if (contactDbRequest == null)
                {
                    contactDbRequest = new Contact
                    {
                        Email = userDbRequest.Login,
                        Name  = userDbRequest.Person.Name,
                        Phone = userDbRequest.Person.Phones
                                .SingleOrDefault(x => x.Master == true).Number,
                        Active    = true,
                        CreatedAt = Util.CurrentDateTime()
                    };
                }
                else
                {
                    // verifica se já solicitou contato para o mesmo livro
                    var contactDb = await _contactMananger
                                    .GetByIdLiraryAndContactRequest(
                        createContactViewModel.IdLibraryBook,
                        contactDbRequest.Id);

                    if (contactDb != null)
                    {
                        return(Conflict(new ResponseErrorViewModel
                        {
                            Errors = new List <object>
                            {
                                new { Message = Constants.ContactConflict }
                            },
                            Status = Constants.Error
                        }));
                    }
                }

                contactDbRequest.UpdatedAt = Util.CurrentDateTime();

                if (contactDbRequest.Id > 0)
                {
                    _contactMananger.Update(contactDbRequest);
                }
                else
                {
                    await _contactMananger.CreateAsync(contactDbRequest);
                }

                // buscar livro da biblioteca
                var libraryBook = await _libraryBookMananger
                                  .GetByIdAsync(createContactViewModel.IdLibraryBook);

                if (libraryBook == null)
                {
                    return(BadRequest(new ResponseErrorViewModel
                    {
                        Status = Constants.Error,
                        Errors = new List <object>
                        {
                            new { Message = Constants.BooksNotFound }
                        }
                    }));
                }

                // buscar o login do usuario dono da biblioteca para criar cadastro
                var userOwner = await _userMananger
                                .GetByIdAsyncNoTracking(libraryBook.Library.Person.Id);

                // verifica se o livro requisitado não é do mesmo usuario
                if (userOwner.Login.Equals(userDbRequest.Login))
                {
                    return(BadRequest(new ResponseErrorViewModel
                    {
                        Status = Constants.Error,
                        Errors = new List <object>
                        {
                            new { Message = Constants.BookInvalid }
                        }
                    }));
                }

                if (userOwner == null)
                {
                    return(BadRequest(new ResponseErrorViewModel
                    {
                        Status = Constants.Error,
                        Errors = new List <object>
                        {
                            new { Message = Constants.UserNotFound }
                        }
                    }));
                }

                var contactDbOwner = await _contactMananger
                                     .GetByEmail(userOwner.Login);

                if (contactDbOwner == null)
                {
                    contactDbOwner = new Contact
                    {
                        Name  = userOwner.Person.Name,
                        Email = userOwner.Login,
                        Phone = userOwner.Person.Phones
                                .SingleOrDefault(x => x.Master == true).Number,
                        ContactBooksOwner = new List <ContactBook>(),
                        Active            = true,
                        CreatedAt         = Util.CurrentDateTime()
                    };
                }

                contactDbOwner.UpdatedAt = Util.CurrentDateTime();

                var contactBook = new ContactBook
                {
                    ContactOwner   = contactDbOwner,
                    ContactRequest = contactDbRequest,
                    LibraryBook    = libraryBook,
                    Approved       = libraryBook.LibraryBookTypes.Any(x => x.Type.Id == 5),
                    Denied         = false,
                    CreatedAt      = Util.CurrentDateTime()
                };

                contactDbOwner.ContactBooksOwner.Add(contactBook);

                if (contactDbOwner.Id > 0)
                {
                    _contactMananger.Update(contactDbOwner);
                }
                else
                {
                    await _contactMananger.CreateAsync(contactDbOwner);
                }

                // gerar notificação
                var notification = new Notification
                {
                    Name        = "Você tem uma solicitação de contado!",
                    Description = "Entre em seu perfil e verifique os contatos!",
                    CreatedAt   = Util.CurrentDateTime()
                };

                await _notificationMananger.CreateAsync(notification);

                var personNotification = new NotificationPerson
                {
                    Notification = notification,
                    Person       = libraryBook.Library.Person,
                    Active       = true,
                    CreatedAt    = Util.CurrentDateTime()
                };

                await _notificationPersonMananger
                .CreateAsync(personNotification);

                _uow.Commit();

                return(Created(
                           new Uri(Url.ActionLink("Create", "Contact")), new ResponseViewModel
                {
                    Result = null,
                    Status = Constants.Sucess
                }));
            }
            catch (Exception ex)
            {
                // gerar log
                return(BadRequest(new ResponseErrorViewModel
                {
                    Status = Constants.Error,
                    Errors = new List <object> {
                        Util.ReturnException(ex)
                    }
                }));
            }
        }