public virtual async Task <ActionResult> Update([FromRoute] int id, [FromBody] OrganizationInviteRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var result = await _service.UpdateEntityByIdAsync(request, id); if (!result) { return(StatusCode(500)); } return(Ok(result)); }
public virtual async Task <ActionResult <OrganizationInviteDto> > Create([FromBody] OrganizationInviteRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var dto = await _service.CreateEntityAsync(request); if (dto == null) { return(StatusCode(500)); } return(Ok(dto)); }
public async Task <OrganizationInviteDto> CreateEntityAsync(OrganizationInviteRequest request) { var entity = _mapper.Map <OrganizationInviteRequest, OrganizationInvite>(request); entity.CreatedDate = DateTime.Now; entity.ExperationDate = entity.CreatedDate.AddDays(20); // TODO get from config Experation Days entity.Link = GetHashString(entity.Id + entity.CreatedByUserId + entity.CreatedDate + entity.CreatedDate.Millisecond); entity.State = OrganizationInviteState.Pending; entity = await _uow.OrganizationInvitesRepository.CreateAsync(entity); var result = await _uow.SaveAsync(); if (!result) { return(null); } if (entity == null) { return(null); } var dto = _mapper.Map <OrganizationInvite, OrganizationInviteDto>(entity); if (InvitesHub.UsersConnections.ContainsKey(dto.CreatedByUserId)) { foreach (string connectionId in InvitesHub.UsersConnections[dto.CreatedByUserId]) { await _invitesHub.Clients.Client(connectionId) .SendAsync("AddInvite", dto); } } return(dto); }
public async Task <bool> UpdateEntityByIdAsync(OrganizationInviteRequest request, int id) { bool result = false; if (request.CreatedByUserId == request.InvitedUserId) { return(false); } var entity = _mapper.Map <OrganizationInviteRequest, OrganizationInvite>(request); entity.Id = id; var inviteFromDb = await _uow.OrganizationInvitesRepository.GetFirstOrDefaultAsync(x => x.Id == entity.Id); if (inviteFromDb == null) { return(false); } if (inviteFromDb.State != OrganizationInviteState.Pending) { return(false); } if (entity.State == OrganizationInviteState.Accepted) { var invitedUser = await _uow.UsersRepository.GetFirstOrDefaultAsync(x => x.Id == entity.InvitedUserId); await _uow.BeginTransaction(); if (invitedUser.UserOrganizations == null) { invitedUser.UserOrganizations = new List <UserOrganization>(); } //TODO: organization role in request //id 2 is member invitedUser.UserOrganizations.Add(new UserOrganization { UserId = invitedUser.Id, OrganizationId = entity.OrganizationId, OrganizationRoleId = 2 }); invitedUser.LastPickedOrganizationId = entity.OrganizationId; await _uow.UsersRepository.UpdateAsync(invitedUser); var updated = await _uow.OrganizationInvitesRepository.UpdateAsync(entity); result = await _uow.SaveAsync(); _uow.CommitTransaction(); } else { if (entity.State == OrganizationInviteState.Pending) { if (String.IsNullOrWhiteSpace(entity.InviteEmail) != true) // send Email { OrganizationInvite inviteFromBd = await _uow.OrganizationInvitesRepository.GetFirstOrDefaultAsync(x => x.Id == entity.Id, include : invite => invite.Include(i => i.Organization) .Include(i => i.CreatedByUser)); string body = $"User {inviteFromBd.CreatedByUser.DisplayName} granted you access to the organization {inviteFromBd.Organization.Name}. \n "; body += $"Your invite link: https://bsa-watcher.azurewebsites.net/invite/{entity.Link}"; await _emailProvider.SendMessageOneToOne("*****@*****.**", "WATCHER Invite", entity.InviteEmail, body, ""); } } var updated = await _uow.OrganizationInvitesRepository.UpdateAsync(entity); result = await _uow.SaveAsync(); } var dto = _mapper.Map <OrganizationInvite, OrganizationInviteDto>(await _uow.OrganizationInvitesRepository.GetFirstOrDefaultAsync(i => i.Id == id)); if (InvitesHub.UsersConnections.ContainsKey(dto.CreatedByUserId)) { foreach (string connectionId in InvitesHub.UsersConnections[dto.CreatedByUserId]) { await _invitesHub.Clients.Client(connectionId) .SendAsync("UpdateInvite", dto); } } return(result); }
public virtual async Task <ActionResult <OrganizationInviteDto> > CreatedAndSend([FromBody] OrganizationInviteRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var dto = await _service.CreateEntityAsync(request); if (dto == null) { return(StatusCode(500)); } if (String.IsNullOrWhiteSpace(request.InviteEmail) != true) { var fromUser = await _usersService.GetEntityByIdAsync(request.CreatedByUserId); var company = await _organizationService.GetEntityByIdAsync(request.OrganizationId); string body = $"User {fromUser.DisplayName} granted you access to the organization {company.Name}. \n "; body += $"Your invite link: https://bsa-watcher.azurewebsites.net/invite/{request.Link}"; await _emailProvider.SendMessageOneToOne("*****@*****.**", "WATCHER Invite", request.InviteEmail, body, ""); } return(Ok(dto)); }