Beispiel #1
0
        public async Task <bool> SentInvitation(Guid topicsId, InviteeSentRequest inviteeRequest, string GetUserId)
        {
            var topicOwn = await _context.Topics
                           .Where(s => s.AppUserId.Equals(GetUserId) && s.Id.Equals(topicsId)).SingleOrDefaultAsync();

            if (topicOwn == null)
            {
                return(false);
            }

            var findUser = await _userManager.Users
                           .SingleOrDefaultAsync(s => s.UserName == inviteeRequest.UserName);

            if (findUser == null)
            {
                return(false);
            }

            var inviteeExist = await _context.Invitees
                               .AnyAsync(x => x.AppUserId.Equals(findUser.Id) && x.TopicsId.Equals(topicsId));

            if (inviteeExist)
            {
                return(false);
            }

            var inviteeSent = new Invitee
            {
                Id            = Guid.NewGuid(),
                RequestStatus = false,
                RoleStatus    = inviteeRequest.RoleStatus,
                AcceptedDate  = DateTime.Now,
                AppUserId     = findUser.Id,
                TopicsId      = topicsId
            };

            _context.Invitees.Add(inviteeSent);

            var created = await _context.SaveChangesAsync();

            var User = await _userManager.Users
                       .SingleOrDefaultAsync(s => s.Id == GetUserId);

            var newNottification = new Notification()
            {
                Id                  = Guid.NewGuid(),
                AppUserId           = findUser.Id,
                CreatedTime         = DateTime.Now,
                NotificationMessage = $"#{User.UserName} Sent Collaboration on {topicOwn.Name} ",
                Url                 = topicsId,
                ReadStatus          = false
            };

            _context.Notifications.Add(newNottification);

            await _notificationService.CreateAsync(newNottification);

            return(created > 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)
                    }
                }));
            }
        }