示例#1
0
 /// <summary>
 /// Add the resource with the key provided to the currently signed in user
 /// If globalResource is true, resource transferred will be global rather than for the game.
 /// </summary>
 /// <param name="key">Name of the resource being transferred</param>
 /// <param name="amount">The amount being transferred</param>
 /// <param name="onComplete">Callback which returns whether the transfer was a success and the current value of the resource that was transferred</param>
 /// <param name="globalResource">**Optional** Setting for if the resource is global rather than for this game. (default: false)</param>
 /// <remarks>
 /// If globalResource is true, resource transferred will be global rather than for the game.
 /// </remarks>
 public void Add(string key, long amount, Action <bool, long> onComplete, bool globalResource = false)
 {
     if (SUGARManager.UserSignedIn)
     {
         var request = new ResourceAddRequest
         {
             ActorId  = SUGARManager.CurrentUser.Id,
             GameId   = globalResource ? Platform.GlobalGameId : SUGARManager.GameId,
             Key      = key,
             Quantity = amount
         };
         SUGARManager.client.Resource.AddOrUpdateAsync(request,
                                                       response =>
         {
             UpdateResource(response);
             onComplete(true, GetFromCache(key, globalResource));
         },
                                                       exception =>
         {
             Debug.LogError($"Failed to add resources. {exception}");
             GetFromServer(
                 (getSuccess, getValues) =>
             {
                 onComplete(false, GetFromCache(key, globalResource));
             }, new[] { key }, globalResource);
         });
     }
 }
示例#2
0
        public void CanUpdateExisting()
        {
            var key             = "Resource_CanUpdateExisting";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var resourceRequest = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                Key      = key,
                Quantity = 100,
                GameId   = game.Id
            };

            var createdResource = Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest);
            var createdQuantity = createdResource.Quantity;
            var updatedQuantity = createdQuantity + 9000;

            var resourceRequestUpdated = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                Key      = createdResource.Key,
                Quantity = updatedQuantity,
                GameId   = game.Id
            };

            Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequestUpdated);

            var updatedResource = Fixture.SUGARClient.Resource.Get(createdResource.GameId, createdResource.ActorId,
                                                                   new[] { createdResource.Key }).Single();

            Assert.Equal(createdQuantity + updatedQuantity, updatedResource.Quantity);
        }
示例#3
0
        public async Task <IResponseEntity> CreateAsync(ResourceAddRequest req)
        {
            var item   = _mapper.Map <SysResourceEntity>(req);
            var result = await _sysResourceRepository.InsertAsync(item);

            //清除缓存
            await _cache.RemoveByPatternAsync(CacheKeyTemplate.PermissionResourceList);

            return(ResponseEntity.Result(result != null && result?.Id != ""));
        }
 public static EvaluationData ToModel(this ResourceAddRequest resourceContract)
 {
     return(new EvaluationData {
         ActorId = resourceContract.ActorId.Value,
         GameId = resourceContract.GameId.Value,
         Key = resourceContract.Key,
         Value = resourceContract.Quantity.ToString(),
         EvaluationDataType = EvaluationDataType.Long,
         Category = EvaluationDataCategory.Resource
     });
 }
示例#5
0
        private ResourceResponse GiveResource(int gameId, int actorId, string key, int quantity)
        {
            var resourceRequest = new ResourceAddRequest
            {
                ActorId  = actorId,
                GameId   = gameId,
                Key      = key,
                Quantity = quantity
            };

            return(Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest));
        }
示例#6
0
        public void CannotCreateWithoutGameId()
        {
            var key             = "Resource_CanCreateWithoutGameId";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var resourceRequest = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                Key      = key,
                Quantity = 100
            };

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest));
        }
示例#7
0
        public void CannotCreateWithoutActorId()
        {
            var key = "Resource_CannotCreateWithoutActorId";

            Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var resourceRequest = new ResourceAddRequest
            {
                GameId   = game.Id,
                Key      = key,
                Quantity = 100
            };

            Assert.Throws <ClientHttpException>(() => Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest));
        }
        public async Task <IActionResult> AddOrUpdate([FromBody] ResourceAddRequest resourceRequest)
        {
            if ((await _authorizationService.AuthorizeAsync(User, resourceRequest.ActorId, HttpContext.ScopeItems(ClaimScope.Group))).Succeeded ||
                (await _authorizationService.AuthorizeAsync(User, resourceRequest.ActorId, HttpContext.ScopeItems(ClaimScope.User))).Succeeded ||
                (await _authorizationService.AuthorizeAsync(User, resourceRequest.GameId, HttpContext.ScopeItems(ClaimScope.Game))).Succeeded)
            {
                var resource = _resourceController.CreateOrUpdate(
                    resourceRequest.GameId.Value,
                    resourceRequest.ActorId.Value,
                    resourceRequest.Key,
                    resourceRequest.Quantity.Value);

                var resourceContract = resource.ToResourceContract();
                return(new ObjectResult(resourceContract));
            }
            return(Forbid());
        }
示例#9
0
        public void CanCreate()
        {
            var key             = "Resource_CanCreate";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var resourceRequest = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                GameId   = game.Id,
                Key      = key,
                Quantity = 100
            };

            var response = Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest);

            Assert.Equal(resourceRequest.Key, response.Key);
            Assert.Equal(resourceRequest.Quantity, response.Quantity);
        }
示例#10
0
        public void CanGetResourceByMultipleKeys()
        {
            var key             = "Resource_CanGetResourceByMultipleKeys";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);
            var game            = Helpers.GetGame(Fixture.SUGARClient.Game, key);

            var resourceRequestOne = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                GameId   = game.Id,
                Key      = key + "1",
                Quantity = 100
            };

            var resourceRequestTwo = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                GameId   = game.Id,
                Key      = key + "2",
                Quantity = 100
            };

            var resourceRequestThree = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                GameId   = game.Id,
                Key      = key + "3",
                Quantity = 100
            };

            Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequestOne);
            Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequestTwo);
            Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequestThree);

            var get = Fixture.SUGARClient.Resource.Get(game.Id, loggedInAccount.User.Id, new[] { resourceRequestOne.Key, resourceRequestTwo.Key, resourceRequestThree.Key });

            Assert.Equal(3, get.Count());
            foreach (var r in get)
            {
                Assert.Equal(100, r.Quantity);
            }
        }
示例#11
0
        public void CanGetGlobalResource()
        {
            var key             = "Resource_CanGetResourceWithoutGameId";
            var loggedInAccount = Helpers.CreateAndLoginGlobal(Fixture.SUGARClient, key);

            var resourceRequest = new ResourceAddRequest
            {
                ActorId  = loggedInAccount.User.Id,
                GameId   = Platform.GlobalGameId,
                Key      = key,
                Quantity = 100
            };

            Fixture.SUGARClient.Resource.AddOrUpdate(resourceRequest);

            var get = Fixture.SUGARClient.Resource.Get(Platform.GlobalGameId, loggedInAccount.User.Id, new[] { key });

            Assert.Equal(1, get.Count());
            Assert.Equal(resourceRequest.Key, get.First().Key);
            Assert.Equal(resourceRequest.Quantity, get.First().Quantity);
        }
示例#12
0
        public IActionResult Resource(ResourceAddRequest request)
        {
            ValidateEntity <ResourceAddRequest>(request);

            Guid domainId = Guid.Parse(request.Domain);

            using (SqlConnection connection = new SqlConnection(Settings.Current.StorageSource))
            {
                connection.Open();

                using (SqlCommand command = new SqlCommand("Zesty_Resource_Add", connection))
                {
                    command.CommandType = CommandType.StoredProcedure;

                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@url", Value = request.Url.Trim()
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@ParentId", Value = !string.IsNullOrEmpty(request.ParentId) ? Guid.Parse(request.ParentId) : (Object)DBNull.Value
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@isPublic", Value = request.IsPublic ? 1 : 0
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@requireToken", Value = request.RequireToken ? 1 : 0
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@order", Value = request.Order
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@label", Value = !string.IsNullOrEmpty(request.Label) ? request.Label.Trim() : (Object)DBNull.Value
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@title", Value = !string.IsNullOrEmpty(request.Title) ? request.Title.Trim() : (Object)DBNull.Value
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@image", Value = !string.IsNullOrEmpty(request.Image) ? request.Image.Trim() : (Object)DBNull.Value
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@type", Value = !string.IsNullOrEmpty(request.Type) ? request.Type.Trim() : (Object)DBNull.Value
                    });
                    command.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@domain", Value = domainId
                    });

                    command.ExecuteNonQuery();
                }
            }

            return(GetOutput());
        }
 public void AddOrUpdateAsync(ResourceAddRequest data, Action <ResourceResponse> onSuccess, Action <Exception> onError)
 {
     AsyncRequestController.EnqueueRequest(() => AddOrUpdate(data),
                                           onSuccess,
                                           onError);
 }
        /// <summary>
        /// Create or Updates a Resource record.
        /// </summary>
        /// <param name="data"><see cref="ResourceAddRequest"/> object that holds the details of the new Resource.</param>
        /// <returns>A <see cref="ResourceResponse"/> containing the new Resource details.</returns>
        public ResourceResponse AddOrUpdate(ResourceAddRequest data)
        {
            var query = GetUriBuilder(ControllerPrefix).ToString();

            return(Post <ResourceAddRequest, ResourceResponse>(query, data));
        }
 public async Task <IResponseEntity> Create(ResourceAddRequest req)
 {
     return(await _sysResourceService.CreateAsync(req));
 }