예제 #1
0
        public Uri GetUri(string baseId, string tableName)
        {
            var uriBuilder = new UriBuilder(AirClient.TableUri(baseId, tableName));

            if (!string.IsNullOrEmpty(Offset))
            {
                AddParametersToQuery(uriBuilder, "offset", Offset);
            }

            if (Fields != null)
            {
                string flattenFieldsParam = FlattenFieldsParam(Fields);
                AddParametersToQuery(uriBuilder, flattenFieldsParam);
            }

            if (!string.IsNullOrEmpty(FilterByFormula))
            {
                AddParametersToQuery(uriBuilder, "filterByFormula", FilterByFormula);
            }

            if (Sort != null)
            {
                string flattenSortParam = FlattenSortParam(Sort);
                AddParametersToQuery(uriBuilder, flattenSortParam);
            }

            if (!string.IsNullOrEmpty(View))
            {
                AddParametersToQuery(uriBuilder, "view", View);
            }

            if (MaxRecords != null)
            {
                if (MaxRecords <= 0)
                {
                    throw new ArgumentException("Maximum Number of Records must be > 0", nameof(MaxRecords));
                }
                AddParametersToQuery(uriBuilder, "maxRecords", MaxRecords, encode: false);
            }

            if (PageSize != null)
            {
                if (PageSize <= 0 || PageSize > MAX_PAGE_SIZE)
                {
                    throw new ArgumentException("Page Size must be > 0 and <= 100", nameof(PageSize));
                }
                AddParametersToQuery(uriBuilder, "pageSize", PageSize, encode: false);
            }

            return(uriBuilder.Uri);
        }
예제 #2
0
        async Task <TRecord> CUROperation <TRecord>(HttpMethod method, string recordId, Dictionary <string, object> fields, bool typecast) where TRecord : AirRecord
        {
            // For JsonConvert
            fields = FixDates(fields);

            var uri = AirClient.RecordUri(Base.BaseId, Name, recordId);
            var fieldsAndTypecast = new FieldsAndTypecast(fields, typecast);

            var response = await AirClient.SendAsync(method, Base.ApiKey, uri, fieldsAndTypecast.ToJson());

            var record = JsonConvert.DeserializeObject <TRecord>(response.Body);

            return(record);
        }
예제 #3
0
        public async Task <bool> DeleteRecord(string recordId)
        {
            var uri = AirClient.RecordUri(Base.BaseId, Name, recordId);

            try {
                await AirClient.DeleteAsync(Base.ApiKey, uri);

                return(true);
            }
            catch (Exception exc) {
                Debug.ExceptionCaught(exc);
                return(false);
            }
        }
예제 #4
0
        //public async Task<DataQueryResult> Query<TRecord>(object queryToken) where TRecord : AirRecord
        //{
        //	QyeryBuilder queryBuilder;
        //	if (queryToken is QyeryBuilder) {
        //		queryBuilder = (QyeryBuilder)queryToken;
        //	}
        //	else if (queryToken == null) {
        //		queryBuilder = new QyeryBuilder();
        //	}
        //	else {
        //		throw new ArgumentException("Invalid type of query token", queryToken.GetType().ToString());
        //	}

        //	var list = await List<TRecord>(queryBuilder);
        //	if (list != null && list.Records.Length > 0) {
        //		queryBuilder.Offset += list.Records.Length;

        //		return new DataQueryResult {
        //			Records = list.Records,
        //			Count = list.Records.Length,
        //			NextToken = queryBuilder
        //		};
        //	}
        //	else {
        //		return new DataQueryResult { Records = null, Count = 0, NextToken = null };
        //	}
        //}

        //public async Task<DataQueryResult> Filter<TRecord>(string formula, QyeryBuilder queryBuilder = null) where TRecord : AirRecord
        //{
        //	Guard.ArgumentNotEmpty(formula, nameof(formula));

        //	string savedFormula = null;
        //	if (queryBuilder == null) {
        //		queryBuilder = new QyeryBuilder { FilterByFormula = formula };
        //	}
        //	else {
        //		savedFormula = queryBuilder.FilterByFormula;
        //		queryBuilder.FilterByFormula = formula;
        //	}

        //	var result = await Query<TRecord>(queryBuilder);
        //	queryBuilder.FilterByFormula = savedFormula;
        //	return result;
        //}

        //public async Task<ICollection<IDataRecord>> GetAllRecords<TRecord>() where TRecord : AirRecord
        //{
        //	var records = new List<IDataRecord>();
        //	var queryBuilder = new QyeryBuilder();
        //	bool hasMore = true;
        //	do {
        //		var list = await List<TRecord>(queryBuilder);
        //		if (list != null && list.Records.Length > 0) {
        //			records.AddRange(list.Records);
        //			queryBuilder.Offset = list.Offset;
        //			hasMore = list.Offset != null;
        //		}
        //		else {
        //			hasMore = false;
        //		}
        //	}
        //	while (hasMore);

        //	return records;
        //}

        public async Task <TRecord> GetRecord <TRecord>(string recordId)
        {
            var uri = AirClient.RecordUri(Base.BaseId, Name, recordId);

            var response = await AirClient.GetAsync(Base.ApiKey, uri);

            var settings = new JsonSerializerSettings();

            settings.DateTimeZoneHandling = UsesUTC ? DateTimeZoneHandling.Utc : DateTimeZoneHandling.Local;

            var record = JsonConvert.DeserializeObject <TRecord>(response.Body, settings);

            return(record);
        }
예제 #5
0
        public async Task <AirRecordList <TRecord> > List <TRecord>(QyeryBuilder queryBuilder = null) where TRecord : AirRecord
        {
            if (queryBuilder == null)
            {
                queryBuilder = new QyeryBuilder {
                }
            }
            ;

            var uri = queryBuilder.GetUri(Base.BaseId, Name);

            var response = await AirClient.GetAsync(Base.ApiKey, uri);

            var recordList = JsonConvert.DeserializeObject <AirRecordList <TRecord> >(response.Body);

            return(recordList);
        }