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) } })); } }