Exemple #1
0
        // TODO Setup Cancellation Token
        public static async Task <PaginatedCollection <T> > InstantiateSearch(string haystack, string needle, CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = typeof(T).GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetPaginatedSearchRoute(haystack, needle);

            PaginatedCollection <T> book = new PaginatedCollection <T>(url);

            Page <T> firstPage = new Page <T>(book.BaseURL, 1);

            await firstPage.GetDataOrInitializeAsync();

            book.PageCount = (int)firstPage.TotalPageCount;

            book.Pages = new List <Page <T> >(book.PageCount)
            {
                firstPage
            };

            if (book.PageCount > 1)
            {
                for (int i = 2; i <= book.PageCount; i++)
                {
                    book.Pages.Add(new Page <T>(book.BaseURL, i));
                }
            }

            return(book);
        }
        public static async Task <PaginatedCollection <G> > GetRelatedModelPaginationAsync <G>(string relation, int?id, CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = typeof(T).GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetRelationshipRoute(id, relation);

            RestRequest request = new RestRequest(url, Method.GET, DataFormat.Json);

            IRestResponse <PaginatedCollection <G> > restResponse = await DataConnection.RequestAsync <PaginatedCollection <G> >(request, cancellationToken);

            return(restResponse.Data);
        }
        public virtual async Task <bool> DeleteAsync(CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = this.GetType().GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetSingularRoute(ID);

            RestRequest request = new RestRequest(url, Method.DELETE, DataFormat.Json);

            IRestResponse <T> restResponse = await DataConnection.RequestAsync <T>(request, cancellationToken);

            return(restResponse.IsSuccessful);
        }
        public static async Task <List <T> > SearchAsync(string haystack, string needle, CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = typeof(T).GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetSearchRoute(haystack, needle);

            RestRequest request = new RestRequest(url, Method.GET, DataFormat.Json);

            IRestResponse <List <T> > restResponse = await DataConnection.RequestAsync <List <T> >(request, cancellationToken);

            return(restResponse.Data);
        }
        public static async Task <T> GetAsync(int id, CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = typeof(T).GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetSingularRoute(id);

            RestRequest request = new RestRequest(url, Method.GET, DataFormat.Json);

            IRestResponse <T> restResponse = await DataConnection.RequestAsync <T>(request, cancellationToken);

            return(restResponse.Data);
        }
        public virtual async Task <G> PostRelatedAsync <G>(string relation, int?id, CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = typeof(T).GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetRelationshipRoute(id, relation);

            RestRequest request = new RestRequest(url, Method.POST, DataFormat.Json);

            request.AddJsonBody(this);

            IRestResponse <G> restResponse = await DataConnection.RequestAsync <G>(request, cancellationToken);

            return(restResponse.Data);
        }
        public virtual async Task <T> UpdateAsync(CancellationToken cancellationToken = default)
        {
            RouteAttribute routeAttribute = this.GetType().GetCustomAttributes(false).FirstOrDefault(x => x.GetType() == typeof(RouteAttribute)) as RouteAttribute;

            string url = routeAttribute.GetSingularRoute(ID);

            RestRequest request = new RestRequest(url, Method.PUT, DataFormat.Json);

            request.AddJsonBody(this);

            IRestResponse <T> restResponse = await DataConnection.RequestAsync <T>(request, cancellationToken);

            this.UpdatedAt = (restResponse.Data as DataPacket <T>).UpdatedAt;

            return(restResponse.Data);
        }