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