Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
        }