Exemplo n.º 1
0
        public async Task <IActionResult> AcceptRequestFollow([FromBody] AcceptRequestFollowDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Hay errores de validación", ModelState)));
            }
            if (model.Permissions == null)
            {
                return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Hay errores de validación", new List <string>()
                {
                    $"No se recibieron los permisos"
                })));
            }
            try{
                AppUser currentUser = await _userManager.FindByNameAsync(User.Identity.Name);

                var requestFollow = _followingRequestRepository.FindById(model.FollowingRequestId);
                if (requestFollow == null)
                {
                    return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Request no existente", new List <string>()
                    {
                        $"No existe el request follow"
                    })));
                }
                if (requestFollow.FollowedId != currentUser.EndUserId)
                {
                    return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "El request no le pertenece", new List <string>()
                    {
                        $"Este request no pertenece al usuario"
                    })));
                }
                requestFollow.Status = FollowingRequestStatus.Approved;
                _followingRequestRepository.Update(requestFollow);

                var       followingId = Guid.NewGuid().ToString();
                Following follow      = new Following {
                    Id                 = followingId,
                    CreatedAt          = DateTime.Now,
                    FollowedUserId     = requestFollow.FollowedId,
                    FollowedById       = requestFollow.RequesterId,
                    GrantedPermissions = GrantedFollowerPermissionFactory.Create(model.Permissions, followingId)
                };
                _userRepository.AddFollow(currentUser.EndUserId, follow);        //Add followRequest
                _endContext.SaveChanges();

                var followResult = new AcceptResponseFollowDto();
                followResult.Id           = follow.Id;
                followResult.FollowedById = follow.FollowedById;
                followResult.CreatedAt    = follow.CreatedAt;
                follow.FollowedUserId     = follow.FollowedUserId;
                return(Ok(followResult));
            }catch (Exception ex) {
                return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Exception, "Exception", ex)));
            }
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Create([FromBody] AddUserDto model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Hay errores de validación", ModelState)));
            }
            using (var transaction = await _endContext.Database.BeginTransactionAsync())
            {
                try
                {
                    var enduser   = new EndUser();
                    var endUserId = Guid.NewGuid().ToString();
                    //create account
                    if (model.HasAccount)
                    {
                        AppUser existingUser = await _userManager.FindByEmailAsync(model.Email.Trim());

                        if (existingUser != null)
                        {
                            ModelState.AddModelError("Email", "El email está ocupado por otro usuario");
                            return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Validaciones", ModelState)));
                        }
                        if (string.IsNullOrEmpty(model.Email) || string.IsNullOrEmpty(model.Password))
                        {
                            ModelState.AddModelError("Email", "Email y Password son requeridos para crear la cuenta");
                            return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Validaciones", ModelState)));
                        }
                        if (model.Password.Trim().CompareTo(model.ConfirmPassword.Trim()) != 0)
                        {
                            ModelState.AddModelError("Password", "Password no coincide con la confirmación");
                            return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Validaciones", ModelState)));
                        }
                        var user = new AppUser {
                            UserName = model.Email.Trim(), Email = model.Email.Trim(), EndUserId = endUserId
                        };
                        var result = await _userManager.CreateAsync(user, model.Password.Trim());

                        _endContext.SaveChanges();    //Save user temp
                        if (result.Succeeded)
                        {
                            //Add intoRole USERS
                            await _userManager.AddToRoleAsync(user, EndConstants.RoleNameForUsers);

                            _endContext.SaveChanges();        //Add role to user temp
                        }
                        else
                        {
                            transaction.Rollback();
                            var errors = result.Errors.Select(x => x.Description).ToList();
                            return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Validation, "Identity validation errors", errors)));
                        }
                    }

                    //create user
                    enduser = new EndUser {
                        Id        = endUserId,
                        Name      = model.Name,
                        BirthDate = model.BirthDate,
                        Initial   = model.Initial,
                        Unicode   = UnicodeGenerator.GetUnicode(),
                        Email     = model.Email
                    };                               //Can repeat email in endUsers no in accounts
                    _userRepository.Create(enduser); //create user
                    _endContext.SaveChanges();
                    //follow
                    if (model.Followup)
                    {
                        AppUser currentUser = await _userManager.FindByNameAsync(User.Identity.Name);

                        var       permissionsFollowingStock = _followerPermissionRepository.GetStockPermissions();
                        var       followingId = Guid.NewGuid().ToString();
                        Following follow      = new Following {
                            Id                 = followingId,
                            CreatedAt          = DateTime.Now,
                            FollowedUserId     = enduser.Id,
                            FollowedById       = currentUser.EndUserId,
                            GrantedPermissions = GrantedFollowerPermissionFactory.Create(permissionsFollowingStock, true, followingId)
                        };

                        _userRepository.AddFollow(currentUser.EndUserId, follow);//Add followRequest
                        _endContext.SaveChanges();
                    }
                    transaction.Commit();
                    return(Ok(enduser));
                }
                catch (Exception ex) {
                    transaction.Rollback();
                    return(BadRequest(new ManagedErrorResponse(ManagedErrorCode.Exception, "Exception", ex)));
                }
            }
        }