public async Task <ActionResult> List(int?groupId, int offset = 0, int limit = 10)
        {
            IEnumerable <Contact> contacts;
            SqlQuery query;

            if (groupId.HasValue)
            {
                query = new SqlQuery
                {
                    Offset       = offset,
                    Limit        = limit,
                    Filter       = "contact_group_id = " + groupId,
                    Related      = "contact_by_contact_id,contact_group_by_contact_group_id",
                    IncludeCount = true
                };

                DatabaseResourceWrapper <ContactContactGroup> result = await databaseApi.GetRecordsAsync <ContactContactGroup>("contact_group_relationship", query);

                contacts = result.Records.Select(x => x.Contact);

                ViewBag.TotalResults = result.Meta.Count;
                if (result.Records.Any())
                {
                    ViewBag.GroupName = result.Records.Select(x => x.ContactGroup.Name).FirstOrDefault();
                }
                else
                {
                    query = new SqlQuery
                    {
                        Filter = "id = " + groupId
                    };

                    DatabaseResourceWrapper <ContactGroup> contactGroupResult = await databaseApi.GetRecordsAsync <ContactGroup>("contact_group", query);

                    ViewBag.GroupName = contactGroupResult.Records.Select(x => x.Name).FirstOrDefault();
                }
            }
            else
            {
                query = new SqlQuery
                {
                    Offset       = offset,
                    Limit        = limit,
                    IncludeCount = true
                };

                DatabaseResourceWrapper <Contact> result = await databaseApi.GetRecordsAsync <Contact>("contact", query);

                contacts = result.Records;

                ViewBag.TotalResults = result.Meta.Count;
            }

            ViewBag.Page     = offset / limit + 1;
            ViewBag.PageSize = limit;

            return(View(contacts));
        }
Beispiel #2
0
        public void ShouldReturnMetadataWhenQueryingRecordsAsync()
        {
            // Arrange
            IDatabaseApi databaseApi = CreateDatabaseApi();
            SqlQuery     query       = new SqlQuery {
                Fields = "*", IncludeCount = true, IncludeSchema = true
            };

            // Act
            DatabaseResourceWrapper <StaffRecord> result = databaseApi.GetRecordsAsync <StaffRecord>("staff", query).Result;

            // Assert
            result.Meta.ShouldNotBe(null);
            result.Meta.Count.ShouldBe(3);
            result.Meta.Schema.ShouldNotBe(null);
        }
        public async Task <ActionResult> List(int offset = 0, int limit = 10)
        {
            SqlQuery query = new SqlQuery
            {
                Offset       = offset,
                Limit        = limit,
                IncludeCount = true
            };

            DatabaseResourceWrapper <ContactGroup> result = await databaseApi.GetRecordsAsync <ContactGroup>("contact_group", query);

            ViewBag.Page         = offset / limit + 1;
            ViewBag.PageSize     = limit;
            ViewBag.TotalResults = result.Meta.Count;

            return(View(result.Records));
        }
Beispiel #4
0
        /// <summary>
        /// Execute a delete request on specified IDs of a given resource.
        /// </summary>
        /// <typeparam name="TResponse">Type of the objects included in response.</typeparam>
        /// <param name="resource">Resource of the ids that will be deleted.</param>
        /// <param name="query">Query parameters.</param>
        /// <param name="force">Indicator whether all records should be deleted.</param>
        /// <param name="ids">IDs that should be deleted.</param>
        /// <returns>A collection of TResponse objects.</returns>
        /// <exception cref="ArgumentException">Thrown when ids argument is null or the length of an array is less than 1.</exception>
        /// <exception cref="ArgumentNullException">Thrown when any of the required arguments are null.</exception>
        internal async Task <IEnumerable <TResponse> > RequestDeleteAsync <TResponse>(string resource, SqlQuery query, bool force, params int[] ids)
            where TResponse : class, new()
        {
            if (resource == null)
            {
                throw new ArgumentNullException("resource");
            }

            if (ids == null || ids.Length < 1)
            {
                throw new ArgumentException("At least one identifier must be specified", "ids");
            }

            query.CustomParameters.Add("force", force);
            query.CustomParameters.Add("ids", string.Join(",", ids));

            DatabaseResourceWrapper <TResponse> response = await GetDeserializedResponse <DatabaseResourceWrapper <TResponse> >(
                method : HttpMethod.Delete,
                resourceParts : new[] { resource },
                query : query
                );

            return(response.Records);
        }
Beispiel #5
0
        /// <summary>
        /// Execute a request with specified resource and payload that is a collection.
        /// </summary>
        /// <typeparam name="TRequest">Type of the request payload</typeparam>
        /// <typeparam name="TResponse">Type of the objects included in response.</typeparam>
        /// <param name="method">HttpMethod to be used in request.</param>
        /// <param name="resource">Resource.</param>
        /// <param name="query">Query parameters.</param>
        /// <param name="payload">Collection of records that should sent as payload.</param>
        /// <returns>A collection of TResponse objects.</returns>
        /// <exception cref="ArgumentNullException">Thrown when any of the required arguments are null.</exception>
        /// <exception cref="ArgumentException">Thrown when records collection is null or its length is less than 1.</exception>
        internal async Task <IEnumerable <TResponse> > RequestWithPayloadAsync <TRequest, TResponse>(HttpMethod method, string resource, SqlQuery query, params TRequest[] payload)
            where TRequest : IRecord
        {
            if (resource == null)
            {
                throw new ArgumentNullException("resource");
            }

            if (payload == null || payload.Length < 1)
            {
                throw new ArgumentException("At least one parameter must be specified", "payload");
            }

            DatabaseResourceWrapper <TResponse> response = await RequestWithPayloadAsync <RequestResourceWrapper <TRequest>, DatabaseResourceWrapper <TResponse> >(
                method : method,
                resource : resource,
                query : query,
                payload : new RequestResourceWrapper <TRequest> {
                Records = new List <TRequest>(payload), Ids = payload.Select(x => x.Id).ToArray()
            }
                );

            return(response.Records);
        }